@shopify/cli
Version:
A CLI tool to build for the Shopify platform
1,262 lines (1,260 loc) • 10.7 MB
JavaScript
import {
require_out
} from "./chunk-CTFDRWUN.js";
import "./chunk-7IK72W75.js";
import {
require_brace_expansion,
require_source_map_support
} from "./chunk-G5R6YD27.js";
import "./chunk-XE5EOEBL.js";
import {
__commonJS,
__require,
__toESM,
init_cjs_shims
} from "./chunk-PKR7KJ6P.js";
// ../../node_modules/.pnpm/@ts-morph+common@0.21.0/node_modules/@ts-morph/common/dist/typescript.js
var require_typescript = __commonJS({
"../../node_modules/.pnpm/@ts-morph+common@0.21.0/node_modules/@ts-morph/common/dist/typescript.js"(exports, module) {
"use strict";
init_cjs_shims();
var ts2 = (() => {
var __defProp = Object.defineProperty, __getOwnPropNames = Object.getOwnPropertyNames, __esm = (fn, res) => function() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
}, __commonJS2 = (cb, mod) => function() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
}, __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: !0 });
}, versionMajorMinor, version, Comparison, init_corePublic = __esm({
"src/compiler/corePublic.ts"() {
"use strict";
versionMajorMinor = "5.2", version = "5.2.2", Comparison = /* @__PURE__ */ ((Comparison3) => (Comparison3[Comparison3.LessThan = -1] = "LessThan", Comparison3[Comparison3.EqualTo = 0] = "EqualTo", Comparison3[Comparison3.GreaterThan = 1] = "GreaterThan", Comparison3))(Comparison || {});
}
});
function length(array) {
return array ? array.length : 0;
}
function forEach(array, callback) {
if (array)
for (let i = 0; i < array.length; i++) {
let result = callback(array[i], i);
if (result)
return result;
}
}
function forEachRight(array, callback) {
if (array)
for (let i = array.length - 1; i >= 0; i--) {
let result = callback(array[i], i);
if (result)
return result;
}
}
function firstDefined(array, callback) {
if (array !== void 0)
for (let i = 0; i < array.length; i++) {
let result = callback(array[i], i);
if (result !== void 0)
return result;
}
}
function firstDefinedIterator(iter, callback) {
for (let value of iter) {
let result = callback(value);
if (result !== void 0)
return result;
}
}
function reduceLeftIterator(iterator, f, initial) {
let result = initial;
if (iterator) {
let pos = 0;
for (let value of iterator)
result = f(result, value, pos), pos++;
}
return result;
}
function zipWith(arrayA, arrayB, callback) {
let 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;
let result = [];
for (let i = 0, n = input.length; i < n; i++)
i && result.push(element), result.push(input[i]);
return result;
}
function every(array, callback) {
if (array) {
for (let i = 0; i < array.length; i++)
if (!callback(array[i], i))
return !1;
}
return !0;
}
function find(array, predicate, startIndex) {
if (array !== void 0)
for (let i = startIndex ?? 0; i < array.length; i++) {
let value = array[i];
if (predicate(value, i))
return value;
}
}
function findLast(array, predicate, startIndex) {
if (array !== void 0)
for (let i = startIndex ?? array.length - 1; i >= 0; i--) {
let value = array[i];
if (predicate(value, i))
return value;
}
}
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 findMap(array, callback) {
for (let i = 0; i < array.length; i++) {
let result = callback(array[i], i);
if (result)
return result;
}
return Debug.fail();
}
function contains(array, value, equalityComparer = equateValues) {
if (array) {
for (let v of array)
if (equalityComparer(v, value))
return !0;
}
return !1;
}
function arraysEqual(a, b, equalityComparer = equateValues) {
return a.length === b.length && a.every((x, i) => equalityComparer(x, b[i]));
}
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)
for (let i = 0; i < array.length; i++) {
let v = array[i];
predicate(v, i) && count++;
}
return count;
}
function filter(array, f) {
if (array) {
let len = array.length, i = 0;
for (; i < len && f(array[i]); )
i++;
if (i < len) {
let result = array.slice(0, i);
for (i++; i < len; ) {
let item = array[i];
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++)
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) {
result = [];
for (let i = 0; i < array.length; i++)
result.push(f(array[i], i));
}
return result;
}
function* mapIterator(iter, mapFn) {
for (let x of iter)
yield mapFn(x);
}
function sameMap(array, f) {
if (array)
for (let i = 0; i < array.length; i++) {
let item = array[i], mapped = f(item, i);
if (item !== mapped) {
let result = array.slice(0, i);
for (result.push(mapped), i++; i < array.length; i++)
result.push(f(array[i], i));
return result;
}
}
return array;
}
function flatten(array) {
let result = [];
for (let v of array)
v && (isArray(v) ? addRange(result, v) : result.push(v));
return result;
}
function flatMap(array, mapfn) {
let result;
if (array)
for (let i = 0; i < array.length; i++) {
let v = mapfn(array[i], i);
v && (isArray(v) ? result = addRange(result, v) : result = append(result, v));
}
return result || emptyArray;
}
function flatMapToMutable(array, mapfn) {
let result = [];
if (array)
for (let i = 0; i < array.length; i++) {
let v = mapfn(array[i], i);
v && (isArray(v) ? addRange(result, v) : result.push(v));
}
return result;
}
function* flatMapIterator(iter, mapfn) {
for (let x of iter) {
let iter2 = mapfn(x);
iter2 && (yield* iter2);
}
}
function sameFlatMap(array, mapfn) {
let result;
if (array)
for (let i = 0; i < array.length; i++) {
let item = array[i], mapped = mapfn(item, i);
(result || item !== mapped || isArray(mapped)) && (result || (result = array.slice(0, i)), isArray(mapped) ? addRange(result, mapped) : result.push(mapped));
}
return result || array;
}
function mapAllOrFail(array, mapFn) {
let result = [];
for (let i = 0; i < array.length; i++) {
let mapped = mapFn(array[i], i);
if (mapped === void 0)
return;
result.push(mapped);
}
return result;
}
function mapDefined(array, mapFn) {
let result = [];
if (array)
for (let i = 0; i < array.length; i++) {
let mapped = mapFn(array[i], i);
mapped !== void 0 && result.push(mapped);
}
return result;
}
function* mapDefinedIterator(iter, mapFn) {
for (let x of iter) {
let value = mapFn(x);
value !== void 0 && (yield value);
}
}
function mapDefinedEntries(map2, f) {
if (!map2)
return;
let result = /* @__PURE__ */ new Map();
return map2.forEach((value, key) => {
let entry = f(key, value);
if (entry !== void 0) {
let [newKey, newValue] = entry;
newKey !== void 0 && newValue !== void 0 && result.set(newKey, newValue);
}
}), result;
}
function getOrUpdate(map2, key, callback) {
if (map2.has(key))
return map2.get(key);
let value = callback();
return map2.set(key, value), value;
}
function tryAddToSet(set, value) {
return set.has(value) ? !1 : (set.add(value), !0);
}
function* singleIterator(value) {
yield value;
}
function spanMap(array, keyfn, mapfn) {
let result;
if (array) {
result = [];
let len = array.length, previousKey, key, start = 0, pos = 0;
for (; start < len; ) {
for (; pos < len; ) {
let value = array[pos];
if (key = keyfn(value, pos), pos === 0)
previousKey = key;
else if (key !== previousKey)
break;
pos++;
}
if (start < pos) {
let v = mapfn(array.slice(start, pos), previousKey, start, pos);
v && result.push(v), start = pos;
}
previousKey = key, pos++;
}
}
return result;
}
function mapEntries(map2, f) {
if (!map2)
return;
let result = /* @__PURE__ */ new Map();
return map2.forEach((value, key) => {
let [newKey, newValue] = f(key, value);
result.set(newKey, newValue);
}), result;
}
function some(array, predicate) {
if (array)
if (predicate) {
for (let v of array)
if (predicate(v))
return !0;
} else
return array.length > 0;
return !1;
}
function getRangesWhere(arr, pred, cb) {
let start;
for (let i = 0; i < arr.length; i++)
pred(arr[i]) ? start = start === void 0 ? i : start : start !== void 0 && (cb(start, i), start = void 0);
start !== void 0 && cb(start, arr.length);
}
function concatenate(array1, array2) {
return some(array2) ? some(array1) ? [...array1, ...array2] : array2 : array1;
}
function selectIndex(_, i) {
return i;
}
function indicesOf(array) {
return array.map(selectIndex);
}
function deduplicateRelational(array, equalityComparer, comparer) {
let indices = indicesOf(array);
stableSortIndices(array, indices, comparer);
let last2 = array[indices[0]], deduplicated = [indices[0]];
for (let i = 1; i < indices.length; i++) {
let index = indices[i], item = array[index];
equalityComparer(last2, item) || (deduplicated.push(index), last2 = item);
}
return deduplicated.sort(), deduplicated.map((i) => array[i]);
}
function deduplicateEquality(array, equalityComparer) {
let result = [];
for (let item of array)
pushIfUnique(result, item, 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], deduplicated = [last2];
for (let i = 1; i < array.length; i++) {
let next = array[i];
switch (comparer(next, last2)) {
case !0:
case 0:
continue;
case -1:
return Debug.fail("Array is unsorted.");
}
deduplicated.push(last2 = next);
}
return deduplicated;
}
function createSortedArray() {
return [];
}
function insertSorted(array, insert, compare, allowDuplicates) {
if (array.length === 0)
return array.push(insert), !0;
let insertIndex = binarySearch(array, insert, identity, compare);
return insertIndex < 0 ? (array.splice(~insertIndex, 0, insert), !0) : allowDuplicates ? (array.splice(insertIndex, 0, insert), !0) : !1;
}
function sortAndDeduplicate(array, comparer, equalityComparer) {
return deduplicateSorted(sort(array, comparer), equalityComparer || comparer || compareStringsCaseSensitive);
}
function arrayIsSorted(array, comparer) {
if (array.length < 2)
return !0;
for (let i = 1, len = array.length; i < len; i++)
if (comparer(array[i - 1], array[i]) === 1)
return !1;
return !0;
}
function detectSortCaseSensitivity(array, getString, compareStringsCaseSensitive2, compareStringsCaseInsensitive2) {
let kind = 3;
if (array.length < 2)
return kind;
let prevElement = getString(array[0]);
for (let i = 1, len = array.length; i < len && kind !== 0; i++) {
let element = getString(array[i]);
kind & 1 && compareStringsCaseSensitive2(prevElement, element) > 0 && (kind &= -2), kind & 2 && compareStringsCaseInsensitive2(prevElement, element) > 0 && (kind &= -3), prevElement = element;
}
return kind;
}
function arrayIsEqualTo(array1, array2, equalityComparer = equateValues) {
if (!array1 || !array2)
return array1 === array2;
if (array1.length !== array2.length)
return !1;
for (let i = 0; i < array1.length; i++)
if (!equalityComparer(array1[i], array2[i], i))
return !1;
return !0;
}
function compact(array) {
let result;
if (array)
for (let i = 0; i < array.length; i++) {
let v = array[i];
(result || !v) && (result || (result = array.slice(0, i)), v && result.push(v));
}
return result || array;
}
function relativeComplement(arrayA, arrayB, comparer) {
if (!arrayB || !arrayA || arrayB.length === 0 || arrayA.length === 0)
return arrayB;
let result = [];
loopB:
for (let offsetA = 0, offsetB = 0; offsetB < arrayB.length; offsetB++) {
offsetB > 0 && Debug.assertGreaterThanOrEqual(
comparer(arrayB[offsetB], arrayB[offsetB - 1]),
0
/* EqualTo */
);
loopA:
for (let startA = offsetA; offsetA < arrayA.length; offsetA++)
switch (offsetA > startA && Debug.assertGreaterThanOrEqual(
comparer(arrayA[offsetA], arrayA[offsetA - 1]),
0
/* EqualTo */
), comparer(arrayB[offsetB], arrayA[offsetA])) {
case -1:
result.push(arrayB[offsetB]);
continue loopB;
case 0:
continue loopB;
case 1:
continue loopA;
}
}
return result;
}
function append(to, value) {
return value === void 0 ? to : to === void 0 ? [value] : (to.push(value), to);
}
function combine(xs, ys) {
return xs === void 0 ? ys : ys === void 0 ? xs : isArray(xs) ? isArray(ys) ? concatenate(xs, ys) : append(xs, ys) : isArray(ys) ? append(ys, xs) : [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++)
from[i] !== void 0 && to.push(from[i]);
return to;
}
function pushIfUnique(array, toAdd, equalityComparer) {
return contains(array, toAdd, equalityComparer) ? !1 : (array.push(toAdd), !0);
}
function appendIfUnique(array, toAdd, equalityComparer) {
return array ? (pushIfUnique(array, toAdd, equalityComparer), array) : [toAdd];
}
function stableSortIndices(array, indices, comparer) {
indices.sort((x, y) => comparer(array[x], array[y]) || compareValues(x, y));
}
function sort(array, comparer) {
return array.length === 0 ? array : array.slice().sort(comparer);
}
function* arrayReverseIterator(array) {
for (let i = array.length - 1; i >= 0; i--)
yield array[i];
}
function stableSort(array, comparer) {
let indices = indicesOf(array);
return stableSortIndices(array, indices, comparer), indices.map((i) => array[i]);
}
function rangeEquals(array1, array2, pos, end) {
for (; pos < end; ) {
if (array1[pos] !== array2[pos])
return !1;
pos++;
}
return !0;
}
function firstOrUndefined(array) {
return array === void 0 || array.length === 0 ? void 0 : array[0];
}
function firstOrUndefinedIterator(iter) {
if (iter)
for (let value of iter)
return value;
}
function first(array) {
return Debug.assert(array.length !== 0), array[0];
}
function firstIterator(iter) {
for (let 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) {
return Debug.assert(array.length !== 0), array[array.length - 1];
}
function singleOrUndefined(array) {
return array && array.length === 1 ? array[0] : void 0;
}
function single(array) {
return Debug.checkDefined(singleOrUndefined(array));
}
function singleOrMany(array) {
return array && array.length === 1 ? array[0] : array;
}
function replaceElement(array, index, value) {
let result = array.slice(0);
return result[index] = value, 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, high = array.length - 1;
for (; low <= high; ) {
let middle = low + (high - low >> 1), midKey = keySelector(array[middle], middle);
switch (keyComparer(midKey, key)) {
case -1:
low = middle + 1;
break;
case 0:
return middle;
case 1:
high = middle - 1;
break;
}
}
return ~low;
}
function reduceLeft(array, f, initial, start, count) {
if (array && array.length > 0) {
let size = array.length;
if (size > 0) {
let pos = start === void 0 || start < 0 ? 0 : start, end = count === void 0 || pos + count > size - 1 ? size - 1 : pos + count, result;
for (arguments.length <= 2 ? (result = array[pos], pos++) : result = initial; pos <= end; )
result = f(result, array[pos], pos), pos++;
return result;
}
}
return initial;
}
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) {
let keys = [];
for (let key in map2)
hasOwnProperty.call(map2, key) && keys.push(key);
return keys;
}
function getAllKeys(obj) {
let result = [];
do {
let names = Object.getOwnPropertyNames(obj);
for (let name of names)
pushIfUnique(result, name);
} while (obj = Object.getPrototypeOf(obj));
return result;
}
function getOwnValues(collection) {
let values = [];
for (let key in collection)
hasOwnProperty.call(collection, key) && values.push(collection[key]);
return values;
}
function arrayOf(count, f) {
let result = new Array(count);
for (let i = 0; i < count; i++)
result[i] = f(i);
return result;
}
function arrayFrom(iterator, map2) {
let result = [];
for (let value of iterator)
result.push(map2 ? map2(value) : value);
return result;
}
function assign(t, ...args) {
for (let arg of args)
if (arg !== void 0)
for (let p in arg)
hasProperty(arg, p) && (t[p] = arg[p]);
return t;
}
function equalOwnProperties(left, right, equalityComparer = equateValues) {
if (left === right)
return !0;
if (!left || !right)
return !1;
for (let key in left)
if (hasOwnProperty.call(left, key) && (!hasOwnProperty.call(right, key) || !equalityComparer(left[key], right[key])))
return !1;
for (let key in right)
if (hasOwnProperty.call(right, key) && !hasOwnProperty.call(left, key))
return !1;
return !0;
}
function arrayToMap(array, makeKey, makeValue = identity) {
let result = /* @__PURE__ */ new Map();
for (let value of array) {
let key = makeKey(value);
key !== void 0 && result.set(key, makeValue(value));
}
return result;
}
function arrayToNumericMap(array, makeKey, makeValue = identity) {
let result = [];
for (let value of array)
result[makeKey(value)] = makeValue(value);
return result;
}
function arrayToMultiMap(values, makeKey, makeValue = identity) {
let result = createMultiMap();
for (let value of values)
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) {
let result = {};
if (values)
for (let value of values) {
let key = `${keySelector(value)}`;
(result[key] ?? (result[key] = [])).push(value);
}
return result;
}
function clone(object) {
let result = {};
for (let id in object)
hasOwnProperty.call(object, id) && (result[id] = object[id]);
return result;
}
function extend(first2, second) {
let result = {};
for (let id in second)
hasOwnProperty.call(second, id) && (result[id] = second[id]);
for (let id in first2)
hasOwnProperty.call(first2, id) && (result[id] = first2[id]);
return result;
}
function copyProperties(first2, second) {
for (let id in second)
hasOwnProperty.call(second, id) && (first2[id] = second[id]);
}
function maybeBind(obj, fn) {
return fn ? fn.bind(obj) : void 0;
}
function createMultiMap() {
let map2 = /* @__PURE__ */ new Map();
return map2.add = multiMapAdd, map2.remove = multiMapRemove, map2;
}
function multiMapAdd(key, value) {
let values = this.get(key);
return values ? values.push(value) : this.set(key, values = [value]), values;
}
function multiMapRemove(key, value) {
let values = this.get(key);
values && (unorderedRemoveItem(values, value), values.length || this.delete(key));
}
function createQueue(items) {
let elements = items?.slice() || [], headIndex = 0;
function isEmpty() {
return headIndex === elements.length;
}
function enqueue(...items2) {
elements.push(...items2);
}
function dequeue() {
if (isEmpty())
throw new Error("Queue is empty");
let result = elements[headIndex];
if (elements[headIndex] = void 0, headIndex++, headIndex > 100 && headIndex > elements.length >> 1) {
let 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) {
let multiMap = /* @__PURE__ */ new Map(), size = 0;
function* getElementIterator() {
for (let value of multiMap.values())
isArray(value) ? yield* value : yield value;
}
let set = {
has(element) {
let hash = getHashCode(element);
if (!multiMap.has(hash))
return !1;
let candidates = multiMap.get(hash);
if (!isArray(candidates))
return equals(candidates, element);
for (let candidate of candidates)
if (equals(candidate, element))
return !0;
return !1;
},
add(element) {
let hash = getHashCode(element);
if (multiMap.has(hash)) {
let values = multiMap.get(hash);
if (isArray(values))
contains(values, element, equals) || (values.push(element), size++);
else {
let value = values;
equals(value, element) || (multiMap.set(hash, [value, element]), size++);
}
} else
multiMap.set(hash, element), size++;
return this;
},
delete(element) {
let hash = getHashCode(element);
if (!multiMap.has(hash))
return !1;
let candidates = multiMap.get(hash);
if (isArray(candidates)) {
for (let i = 0; i < candidates.length; i++)
if (equals(candidates[i], element))
return candidates.length === 1 ? multiMap.delete(hash) : candidates.length === 2 ? multiMap.set(hash, candidates[1 - i]) : unorderedRemoveItemAt(candidates, i), size--, !0;
} else if (equals(candidates, element))
return multiMap.delete(hash), size--, !0;
return !1;
},
clear() {
multiMap.clear(), size = 0;
},
get size() {
return size;
},
forEach(action) {
for (let elements of arrayFrom(multiMap.values()))
if (isArray(elements))
for (let element of elements)
action(element, element, set);
else {
let element = elements;
action(element, element, set);
}
},
keys() {
return getElementIterator();
},
values() {
return getElementIterator();
},
*entries() {
for (let value of getElementIterator())
yield [value, value];
},
[Symbol.iterator]: () => 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) {
return value !== void 0 && test(value) ? value : Debug.fail(`Invalid cast. The supplied value ${value} did not pass the test '${Debug.getFunctionName(test)}'.`);
}
function noop(_) {
}
function returnFalse() {
return !1;
}
function returnTrue() {
return !0;
}
function returnUndefined() {
}
function identity(x) {
return x;
}
function toLowerCase(x) {
return x.toLowerCase();
}
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 () => (callback && (value = callback(), callback = void 0), value);
}
function memoizeOne(callback) {
let map2 = /* @__PURE__ */ new Map();
return (arg) => {
let key = `${typeof arg}:${arg}`, value = map2.get(key);
return value === void 0 && !map2.has(key) && (value = callback(arg), map2.set(key, value)), value;
};
}
function memoizeWeak(callback) {
let map2 = /* @__PURE__ */ new WeakMap();
return (arg) => {
let value = map2.get(arg);
return value === void 0 && !map2.has(arg) && (value = callback(arg), map2.set(arg, value)), value;
};
}
function memoizeCached(callback, cache) {
return (...args) => {
let value = cache.get(args);
return value === void 0 && !cache.has(args) && (value = callback(...args), cache.set(args, value)), value;
};
}
function compose(a, b, c, d, e) {
if (e) {
let args = [];
for (let i = 0; i < arguments.length; i++)
args[i] = arguments[i];
return (t) => reduceLeft(args, (u, f) => f(u), t);
} else return d ? (t) => d(c(b(a(t)))) : c ? (t) => c(b(a(t))) : b ? (t) => b(a(t)) : a ? (t) => a(t) : (t) => t;
}
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 : a === void 0 ? -1 : b === void 0 ? 1 : a < b ? -1 : 1;
}
function compareValues(a, b) {
return compareComparableValues(a, b);
}
function compareTextSpans(a, b) {
return compareValues(a?.start, b?.start) || compareValues(a?.length, b?.length);
}
function min(items, compare) {
return reduceLeft(items, (x, y) => compare(x, y) === -1 ? x : y);
}
function compareStringsCaseInsensitive(a, b) {
return a === b ? 0 : a === void 0 ? -1 : b === void 0 ? 1 : (a = a.toUpperCase(), b = b.toUpperCase(), a < b ? -1 : a > b ? 1 : 0);
}
function compareStringsCaseInsensitiveEslintCompatible(a, b) {
return a === b ? 0 : a === void 0 ? -1 : b === void 0 ? 1 : (a = a.toLowerCase(), b = b.toLowerCase(), a < b ? -1 : a > b ? 1 : 0);
}
function compareStringsCaseSensitive(a, b) {
return compareComparableValues(a, b);
}
function getStringComparer(ignoreCase) {
return ignoreCase ? compareStringsCaseInsensitive : compareStringsCaseSensitive;
}
function getUILocale() {
return uiLocale;
}
function setUILocale(value) {
uiLocale !== value && (uiLocale = value, uiComparerCaseSensitive = void 0);
}
function compareStringsCaseSensitiveUI(a, b) {
return (uiComparerCaseSensitive || (uiComparerCaseSensitive = createUIStringComparer(uiLocale)))(a, b);
}
function compareProperties(a, b, key, comparer) {
return a === b ? 0 : a === void 0 ? -1 : b === void 0 ? 1 : comparer(a[key], b[key]);
}
function compareBooleans(a, b) {
return compareValues(a ? 1 : 0, b ? 1 : 0);
}
function getSpellingSuggestion(name, candidates, getName) {
let maximumLengthDifference = Math.max(2, Math.floor(name.length * 0.34)), bestDistance = Math.floor(name.length * 0.4) + 1, bestCandidate;
for (let candidate of candidates) {
let candidateName = getName(candidate);
if (candidateName !== void 0 && Math.abs(candidateName.length - name.length) <= maximumLengthDifference) {
if (candidateName === name || candidateName.length < 3 && candidateName.toLowerCase() !== name.toLowerCase())
continue;
let 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), current = new Array(s2.length + 1), big = max + 0.01;
for (let i = 0; i <= s2.length; i++)
previous[i] = i;
for (let i = 1; i <= s1.length; i++) {
let c1 = s1.charCodeAt(i - 1), minJ = Math.ceil(i > max ? i - max : 1), 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++) {
let substitutionDistance = s1[i - 1].toLowerCase() === s2[j - 1].toLowerCase() ? previous[j - 1] + 0.1 : previous[j - 1] + 2, 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;
let temp = previous;
previous = current, current = temp;
}
let res = previous[s2.length];
return res > max ? void 0 : res;
}
function endsWith(str, suffix) {
let expectedPos = str.length - suffix.length;
return expectedPos >= 0 && 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 stringContains(str, substring) {
return str.indexOf(substring) !== -1;
}
function removeMinAndVersionNumbers(fileName) {
let end = fileName.length;
for (let pos = end - 1; pos > 0; pos--) {
let ch = fileName.charCodeAt(pos);
if (ch >= 48 && ch <= 57)
do
--pos, ch = fileName.charCodeAt(pos);
while (pos > 0 && ch >= 48 && ch <= 57);
else if (pos > 4 && (ch === 110 || ch === 78)) {
if (--pos, ch = fileName.charCodeAt(pos), ch !== 105 && ch !== 73 || (--pos, ch = fileName.charCodeAt(pos), ch !== 109 && ch !== 77))
break;
--pos, ch = fileName.charCodeAt(pos);
} else
break;
if (ch !== 45 && ch !== 46)
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)
return orderedRemoveItemAt(array, i), !0;
return !1;
}
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]))
return unorderedRemoveItemAt(array, i), !0;
return !1;
}
function createGetCanonicalFileName(useCaseSensitiveFileNames2) {
return useCaseSensitiveFileNames2 ? identity : toFileNameLowerCase;
}
function patternText({ prefix, suffix }) {
return `${prefix}*${suffix}`;
}
function matchedText(pattern, candidate) {
return Debug.assert(isPatternMatch(pattern, candidate)), candidate.substring(pattern.prefix.length, candidate.length - pattern.suffix.length);
}
function findBestPatternMatch(values, getPattern, candidate) {
let matchedValue, longestMatchPrefixLength = -1;
for (let v of values) {
let pattern = getPattern(v);
isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength && (longestMatchPrefixLength = pattern.prefix.length, matchedValue = v);
}
return matchedValue;
}
function startsWith(str, prefix) {
return 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 (let f of fs)
if (lastResult = f(...args), 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, oldIndex = 0, newLen = newItems.length, oldLen = oldItems.length, hasChanges = !1;
for (; newIndex < newLen && oldIndex < oldLen; ) {
let newItem = newItems[newIndex], oldItem = oldItems[oldIndex], compareResult = comparer(newItem, oldItem);
compareResult === -1 ? (inserted(newItem), newIndex++, hasChanges = !0) : compareResult === 1 ? (deleted(oldItem), oldIndex++, hasChanges = !0) : (unchanged(oldItem, newItem), newIndex++, oldIndex++);
}
for (; newIndex < newLen; )
inserted(newItems[newIndex++]), hasChanges = !0;
for (; oldIndex < oldLen; )
deleted(oldItems[oldIndex++]), hasChanges = !0;
return hasChanges;
}
function cartesianProduct(arrays) {
let result = [];
return cartesianProductWorker(
arrays,
result,
/*outer*/
void 0,
0
), result;
}
function cartesianProductWorker(arrays, result, outer, index) {
for (let element of arrays[index]) {
let inner;
outer ? (inner = outer.slice(), inner.push(element)) : inner = [element], index === arrays.length - 1 ? result.push(inner) : cartesianProductWorker(arrays, result, inner, index + 1);
}
}
function padLeft(s, length2, padString = " ") {
return length2 <= s.length ? s : padString.repeat(length2 - s.length) + s;
}
function padRight(s, length2, padString = " ") {
return length2 <= s.length ? s : s + padString.repeat(length2 - s.length);
}
function takeWhile(array, predicate) {
if (array) {
let len = array.length, index = 0;
for (; index < len && predicate(array[index]); )
index++;
return array.slice(0, index);
}
}
function skipWhile(array, predicate) {
if (array) {
let len = array.length, index = 0;
for (; index < len && predicate(array[index]); )
index++;
return array.slice(index);
}
}
function trimEndImpl(s) {
let end = s.length - 1;
for (; end >= 0 && isWhiteSpaceLike(s.charCodeAt(end)); )
end--;
return s.slice(0, end + 1);
}
function isNodeLikeSystem() {
return typeof process < "u" && !!process.nextTick && !process.browser && typeof module == "object";
}
var emptyArray, emptyMap, emptySet, SortKind, elementAt, hasOwnProperty, fileNameLowerCaseRegExp, AssertionLevel, createUIStringComparer, uiComparerCaseSensitive, uiLocale, trimString, trimStringEnd, trimStringStart, init_core = __esm({
"src/compiler/core.ts"() {
"use strict";
init_ts2(), emptyArray = [], emptyMap = /* @__PURE__ */ new Map(), emptySet = /* @__PURE__ */ new Set(), SortKind = /* @__PURE__ */ ((SortKind2) => (SortKind2[SortKind2.None = 0] = "None", SortKind2[SortKind2.CaseSensitive = 1] = "CaseSensitive", SortKind2[SortKind2.CaseInsensitive = 2] = "CaseInsensitive", SortKind2[SortKind2.Both = 3] = "Both", SortKind2))(SortKind || {}), elementAt = Array.prototype.at ? (array, offset) => array?.at(offset) : (array, offset) => {
if (array && (offset = toOffset(array, offset), offset < array.length))
return array[offset];
}, hasOwnProperty = Object.prototype.hasOwnProperty, fileNameLowerCaseRegExp = /[^\u0130\u0131\u00DFa-z0-9\\/:\-_. ]+/g, AssertionLevel = /* @__PURE__ */ ((AssertionLevel2) => (AssertionLevel2[AssertionLevel2.None = 0] = "None", AssertionLevel2[AssertionLevel2.Normal = 1] = "Normal", AssertionLevel2[AssertionLevel2.Aggressive = 2] = "Aggressive", AssertionLevel2[AssertionLevel2.VeryAggressive = 3] = "VeryAggressive", AssertionLevel2))(AssertionLevel || {}), createUIStringComparer = (() => {
let defaultComparer, enUSComparer, stringComparerFactory = getStringComparerFactory();
return createStringComparer;
function compareWithCallback(a, b, comparer) {
if (a === b)
return 0;
if (a === void 0)
return -1;
if (b === void 0)
return 1;
let value = comparer(a, b);
return value < 0 ? -1 : value > 0 ? 1 : 0;
}
function createIntlCollatorStringComparer(locale) {
let comparer = new Intl.Collator(locale, { usage: "sort", sensitivity: "variant" }).compare;
return (a, b) => compareWithCallback(a, b, comparer);
}
function createLocaleCompareStringComparer(locale) {
if (locale !== void 0)
return createFallbackStringComparer();
return (a, b) => compareWithCallback(a, b, compareStrings);
function compareStrings(a, b) {
return a.localeCompare(b);
}
}
function createFallbackStringComparer() {
return (a, b) => compareWithCallback(a, b, compareDictionaryOrder);
function compareDictionaryOrder(a, b) {
return compareStrings(a.toUpperCase(), b.toUpperCase()) || compareStrings(a, b);
}
function compareStrings(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}
}
function getStringComparerFactory() {
return typeof Intl == "object" && typeof Intl.Collator == "function" ? createIntlCollatorStringComparer : typeof String.prototype.localeCompare == "function" && typeof String.prototype.toLocaleUpperCase == "function" && "a".localeCompare("B") < 0 ? createLocaleCompareStringComparer : createFallbackStringComparer;
}
function createStringComparer(locale) {
return locale === void 0 ? defaultComparer || (defaultComparer = stringComparerFactory(locale)) : locale === "en-US" ? enUSComparer || (enUSComparer = stringComparerFactory(locale)) : stringComparerFactory(locale);
}
})(), trimString = String.prototype.trim ? (s) => s.trim() : (s) => trimStringEnd(trimStringStart(s)), trimStringEnd = String.prototype.trimEnd ? (s) => s.trimEnd() : trimEndImpl, trimStringStart = String.prototype.trimStart ? (s) => s.trimStart() : (s) => s.replace(/^\s+/g, "");
}
}), LogLevel, Debug, init_debug = __esm({
"src/compiler/debug.ts"() {
"use strict";
init_ts2(), init_ts2(), LogLevel = /* @__PURE__ */ ((LogLevel2) => (LogLevel2[LogLevel2.Off = 0] = "Off", LogLevel2[LogLevel2.Error = 1] = "Error", LogLevel2[LogLevel2.Warning = 2] = "Warning", LogLevel2[LogLevel2.Info = 3] = "Info", LogLevel2[LogLevel2.Verbose = 4] = "Verbose", LogLevel2))(LogLevel || {}), ((Debug2) => {
let currentAssertionLevel = 0;
Debug2.currentLogLevel = 2, Debug2.isDebugging = !1;
function shouldLog(level) {
return Debug2.currentLogLevel <= level;
}
Debug2.shouldLog = shouldLog;
function logMessage(level, s) {
Debug2.loggingHost && shouldLog(level) && Debug2.loggingHost.log(level, s);
}
function log(s) {
logMessage(3, s);
}
Debug2.log = log, ((_log) => {
function error2(s) {
logMessage(1, s);
}
_log.error = error2;
function warn(s) {
logMessage(2, s);
}
_log.warn = warn;
function log2(s) {
logMessage(3, s);
}
_log.log = log2;
function trace2(s) {
logMessage(4, s);
}
_log.trace = trace2;
})(log = Debug2.log || (Debug2.log = {}));
let assertionCache = {};
function getAssertionLevel() {
return currentAssertionLevel;
}
Debug2.getAssertionLevel = getAssertionLevel;
function setAssertionLevel(level) {
let prevAssertionLevel = currentAssertionLevel;
if (currentAssertionLevel = level, level > prevAssertionLevel)
for (let key of getOwnKeys(assertionCache)) {
let cachedFunc = assertionCache[key];
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) {
return shouldAssert(level) ? !0 : (assertionCache[name] = { level, assertion: Debug2[name] }, Debug2[name] = noop, !1);
}
function fail(message, stackCrawlMark) {
debugger;
let e = new Error(message ? `Debug Failure. ${message}` : "Debug Failure.");