@shopify/create-app
Version:
A CLI tool to create a new Shopify app.
1,283 lines (1,268 loc) • 11.3 MB
JavaScript
import {
require_normalize_path
} from "./chunk-X7YTIMNN.js";
import {
import_websocket_server
} from "./chunk-3GXB4ZRP.js";
import {
errorHandler,
registerCleanBugsnagErrorsFromWithinPlugins,
require_end_of_stream
} from "./chunk-EL5DCDEL.js";
import {
postRunHookHasCompleted
} from "./chunk-YXRIPYLR.js";
import {
setCurrentCommandId,
showNotificationsIfNeeded
} from "./chunk-GRJC5EZB.js";
import {
CLI_KIT_VERSION,
ClientError,
DevServerCore,
FetchError,
addCursorAndFiltersToAppLogsUrl,
adminFqdn,
appDevFqdn,
appManagementFqdn,
blockPartnersAccess,
buildHeaders,
businessPlatformOrganizationsRequest,
businessPlatformOrganizationsRequestDoc,
businessPlatformRequestDoc,
compact,
compileData,
deepCompare,
deepDifference,
deepMergeObjects,
developerDashboardFqdn,
ensureAuthenticatedAdmin,
ensureAuthenticatedAdminAsApp,
ensureAuthenticatedAppManagementAndBusinessPlatform,
ensureAuthenticatedPartners,
ensureAuthenticatedStorefront,
ensureAuthenticatedThemes,
err,
fanoutHooks,
fetch as fetch2,
fileHash,
formData,
generateFetchAppLogUrl,
getBackendPort,
getEnvironmentVariables,
getListOfTunnelPlugins,
getPartnersToken,
getPathValue,
gql,
graphqlRequest,
graphqlRequestDoc,
hashString,
isEmpty,
isNetworkError,
isServiceAccount,
isThemeAccessSession,
isUserAccount,
jsonOutputEnabled,
nonRandomUUID,
normalizeStoreFqdn,
ok,
partnersFqdn,
partnersRequest,
partnersRequestDoc,
pickBy,
randomUUID,
recordError,
recordEvent,
recordTiming,
reportAnalyticsEvent,
require_assignValue,
require_baseAssignValue,
require_call_bind_apply_helpers,
require_cjs,
require_getAllKeysIn,
require_getPrototype,
require_getSymbolsIn,
require_get_intrinsic,
require_graphql,
require_keysIn,
require_lib as require_lib3,
require_lib2 as require_lib4,
require_mime_types,
require_type,
serviceEnvironment,
setNextDeprecationDate,
setPathValue,
shopifyFetch,
z
} from "./chunk-M7VMC3PN.js";
import "./chunk-XD3LXUGW.js";
import {
LocalStorage,
UnknownPackageManagerError,
addNPMDependenciesIfNeeded,
addResolutionOrOverride,
findUpAndReadPackageJson,
getDependencies,
getPackageManager,
getPackageVersion,
inferPackageManager,
installNPMDependenciesRecursively,
installNodeModules,
lockfiles,
lockfilesByManager,
readAndParsePackageJson,
require_ajv,
runAtMinimumInterval,
usesWorkspaces,
versionSatisfies,
writePackageJSON
} from "./chunk-5F7FMAT2.js";
import {
AbortController as AbortController2,
AbortError,
AbortSignal,
AbortSilentError,
Alert,
Box_default,
BugError,
CancelExecution,
ConcurrentOutput,
Link,
Static,
TabularData,
Text,
addPublicMetadata,
addSensitiveMetadata,
appendFile,
asHumanFriendlyArray,
camelize,
capitalize,
chmod,
codespacePortForwardingDomain,
codespaceURL,
constantize,
copyFile,
createFileReadStream,
createFileWriteStream,
createRuntimeMetadataContainer,
currentProcessIsGlobal,
debounce,
difference,
environmentVariables,
exec,
figures_default,
fileExists,
fileExistsSync,
fileHasExecutablePermissions,
fileLastUpdatedTimestamp,
fileRealPath,
fileSize,
findPathUp,
firstPartyDev,
formatDate,
formatLocalDate,
formatPackageManagerCommand,
formatSection,
generateRandomNameForSubdirectory,
getArrayRejectingUndefined,
getRandomName,
getThemeKitAccessDomain,
gitpodURL,
glob,
globSync,
globalCLIVersion,
handleCtrlC,
hasGit,
hyphenate,
import_ts_error,
inTemporaryDirectory,
init_tslib_es6,
installGlobalCLIPrompt,
installGlobalShopifyCLI,
isCI,
isDevelopment,
isDirectory,
isDirectorySync,
isPreReleaseVersion,
isShopify,
isTTY,
isTerminalInteractive,
isTruthy,
isUnitTest,
isVerbose,
isWsl,
itemToString,
joinWithAnd,
keypress,
localCLIVersion,
matchGlob,
measure_element_default,
mkdir,
moveFile,
normalizeDelimitedString,
openURL,
outputCompleted,
outputContent,
outputDebug,
outputInfo,
outputNewline,
outputResult,
outputSuccess,
outputToken,
outputWarn,
pascalize,
platformAndArch,
pluralize,
readFile,
readFileSync,
readStdinString,
readdir,
removeFile,
removeFileSync,
render,
renderAutocompletePrompt,
renderConcurrent,
renderConfirmationPrompt,
renderDangerousConfirmationPrompt,
renderError,
renderFatalError,
renderInfo,
renderSelectPrompt,
renderSingleTask,
renderSuccess,
renderTable,
renderTasks,
renderTextPrompt,
renderWarning,
require_Stack,
require_Symbol,
require_Uint8Array,
require_baseEach,
require_baseIteratee,
require_baseUnary,
require_getAllKeys,
require_getSymbols,
require_getTag,
require_isArray,
require_isBuffer,
require_isObject,
require_isObjectLike,
require_isPrototype,
require_keys,
require_lib,
require_nodeUtil,
require_react,
require_root,
require_scheduler,
require_signal_exit,
rmdir,
runWithTimer,
shouldDisplayColors,
sleep,
slugify,
source_default,
stringifyMessage,
symlink,
tempDirectory,
terminalSupportsPrompting,
themeKitAccessDomain,
timeAgo,
touchFile,
treeKill,
tryParseInt,
tslib_es6_exports,
underscore,
uniq,
uniqBy,
unlinkFile,
unstyled,
useAbortSignal,
useConcurrentOutputContext,
use_input_default,
use_stdin_default,
use_stdout_default,
username,
writeFile,
writeFileSync
} from "./chunk-YZFEE3WJ.js";
import {
require_brace_expansion,
require_commonjs,
require_lib as require_lib2,
require_typescript
} from "./chunk-V7OWCSFT.js";
import {
require_ms,
require_src
} from "./chunk-UMUTXITN.js";
import {
basename,
cwd,
dirname,
extname,
joinPath,
moduleDirectory,
normalizePath,
relativePath,
relativizePath,
resolvePath,
sniffForJson
} from "./chunk-Y2JP6WFP.js";
import {
require_fs,
require_glob,
require_inflight,
require_inherits
} from "./chunk-TIUOQMGA.js";
import {
require_once
} from "./chunk-SHWOPMLQ.js";
import {
require_graceful_fs
} from "./chunk-6ONJEX7Y.js";
import "./chunk-LABBARNJ.js";
import "./chunk-CTFDRWUN.js";
import "./chunk-7IK72W75.js";
import "./chunk-G2ZZKGSV.js";
import {
__commonJS,
__esm,
__export,
__require,
__toCommonJS,
__toESM,
init_cjs_shims
} from "./chunk-PKR7KJ6P.js";
// ../../node_modules/.pnpm/@shopify+toml-patch@0.3.0/node_modules/@shopify/toml-patch/toml_patch.js
var require_toml_patch = __commonJS({
"../../node_modules/.pnpm/@shopify+toml-patch@0.3.0/node_modules/@shopify/toml-patch/toml_patch.js"(exports2, module2) {
init_cjs_shims();
var imports = {};
imports.__wbindgen_placeholder__ = module2.exports;
var wasm, { TextEncoder: TextEncoder2, TextDecoder } = __require("util");
function isLikeNone(x) {
return x == null;
}
var cachedDataViewMemory0 = null;
function getDataViewMemory0() {
return (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === !0 || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) && (cachedDataViewMemory0 = new DataView(wasm.memory.buffer)), cachedDataViewMemory0;
}
var WASM_VECTOR_LEN = 0, cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
return (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) && (cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer)), cachedUint8ArrayMemory0;
}
var cachedTextEncoder = new TextEncoder2("utf-8"), encodeString = typeof cachedTextEncoder.encodeInto == "function" ? function(arg, view) {
return cachedTextEncoder.encodeInto(arg, view);
} : function(arg, view) {
let buf = cachedTextEncoder.encode(arg);
return view.set(buf), {
read: arg.length,
written: buf.length
};
};
function passStringToWasm0(arg, malloc, realloc) {
if (realloc === void 0) {
let buf = cachedTextEncoder.encode(arg), ptr2 = malloc(buf.length, 1) >>> 0;
return getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf), WASM_VECTOR_LEN = buf.length, ptr2;
}
let len = arg.length, ptr = malloc(len, 1) >>> 0, mem = getUint8ArrayMemory0(), offset = 0;
for (; offset < len; offset++) {
let code = arg.charCodeAt(offset);
if (code > 127) break;
mem[ptr + offset] = code;
}
if (offset !== len) {
offset !== 0 && (arg = arg.slice(offset)), ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
let view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len), ret = encodeString(arg, view);
offset += ret.written, ptr = realloc(ptr, len, offset, 1) >>> 0;
}
return WASM_VECTOR_LEN = offset, ptr;
}
var cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: !0, fatal: !0 });
cachedTextDecoder.decode();
function getStringFromWasm0(ptr, len) {
return ptr = ptr >>> 0, cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
function takeFromExternrefTable0(idx) {
let value = wasm.__wbindgen_export_0.get(idx);
return wasm.__externref_table_dealloc(idx), value;
}
module2.exports.echoToml = function(tomlContent) {
let deferred3_0, deferred3_1;
try {
let ptr0 = passStringToWasm0(tomlContent, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc), len0 = WASM_VECTOR_LEN, ret = wasm.echoToml(ptr0, len0);
var ptr2 = ret[0], len2 = ret[1];
if (ret[3])
throw ptr2 = 0, len2 = 0, takeFromExternrefTable0(ret[2]);
return deferred3_0 = ptr2, deferred3_1 = len2, getStringFromWasm0(ptr2, len2);
} finally {
wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
}
};
module2.exports.updateTomlValues = function(tomlContent, patches) {
let deferred3_0, deferred3_1;
try {
let ptr0 = passStringToWasm0(tomlContent, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc), len0 = WASM_VECTOR_LEN, ret = wasm.updateTomlValues(ptr0, len0, patches);
var ptr2 = ret[0], len2 = ret[1];
if (ret[3])
throw ptr2 = 0, len2 = 0, takeFromExternrefTable0(ret[2]);
return deferred3_0 = ptr2, deferred3_1 = len2, getStringFromWasm0(ptr2, len2);
} finally {
wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
}
};
module2.exports.__wbg_from_2a5d3e218e67aa85 = function(arg0) {
return Array.from(arg0);
};
module2.exports.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) {
return arg0[arg1 >>> 0];
};
module2.exports.__wbg_length_e2d2a49132c1b256 = function(arg0) {
return arg0.length;
};
module2.exports.__wbindgen_boolean_get = function(arg0) {
let v = arg0;
return typeof v == "boolean" ? v ? 1 : 0 : 2;
};
module2.exports.__wbindgen_init_externref_table = function() {
let table = wasm.__wbindgen_export_0, offset = table.grow(4);
table.set(0, void 0), table.set(offset + 0, void 0), table.set(offset + 1, null), table.set(offset + 2, !0), table.set(offset + 3, !1);
};
module2.exports.__wbindgen_is_array = function(arg0) {
return Array.isArray(arg0);
};
module2.exports.__wbindgen_is_undefined = function(arg0) {
return arg0 === void 0;
};
module2.exports.__wbindgen_number_get = function(arg0, arg1) {
let obj = arg1, ret = typeof obj == "number" ? obj : void 0;
getDataViewMemory0().setFloat64(arg0 + 8, isLikeNone(ret) ? 0 : ret, !0), getDataViewMemory0().setInt32(arg0 + 0, !isLikeNone(ret), !0);
};
module2.exports.__wbindgen_string_get = function(arg0, arg1) {
let obj = arg1, ret = typeof obj == "string" ? obj : void 0;
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc), len1 = WASM_VECTOR_LEN;
getDataViewMemory0().setInt32(arg0 + 4, len1, !0), getDataViewMemory0().setInt32(arg0 + 0, ptr1, !0);
};
module2.exports.__wbindgen_string_new = function(arg0, arg1) {
return getStringFromWasm0(arg0, arg1);
};
module2.exports.__wbindgen_throw = function(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
};
var path = __require("path").join(__dirname, "toml_patch_bg.wasm"), bytes = __require("fs").readFileSync(path), wasmModule = new WebAssembly.Module(bytes), wasmInstance = new WebAssembly.Instance(wasmModule, imports);
wasm = wasmInstance.exports;
module2.exports.__wasm = wasm;
wasm.__wbindgen_start();
}
});
// ../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/object.js
var require_object = __commonJS({
"../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/object.js"(exports2) {
"use strict";
init_cjs_shims();
Object.defineProperty(exports2, "__esModule", { value: !0 });
exports2.deepGet = void 0;
function deepGet(obj, path) {
return path.reduce((acc, key) => acc?.[key], obj);
}
exports2.deepGet = deepGet;
}
});
// ../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/array.js
var require_array = __commonJS({
"../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/array.js"(exports2) {
"use strict";
init_cjs_shims();
Object.defineProperty(exports2, "__esModule", { value: !0 });
exports2.findLastAndIndex = exports2.findLastIndex = exports2.findLast = exports2.last = exports2.first = void 0;
function first2(arr) {
return arr[0];
}
exports2.first = first2;
function last2(arr, offset = 0) {
return arr[arr.length - 1 + offset];
}
exports2.last = last2;
function findLast(array, pred) {
return array[findLastIndex(array, pred)];
}
exports2.findLast = findLast;
function findLastIndex(array, pred) {
for (let i = array.length - 1; i >= 0; i--)
if (pred(array[i]))
return i;
return -1;
}
exports2.findLastIndex = findLastIndex;
function findLastAndIndex(array, pred) {
let index = findLastIndex(array, pred);
return [array[index], index];
}
exports2.findLastAndIndex = findLastAndIndex;
}
});
// ../../node_modules/.pnpm/isarray@1.0.0/node_modules/isarray/index.js
var require_isarray = __commonJS({
"../../node_modules/.pnpm/isarray@1.0.0/node_modules/isarray/index.js"(exports2, module2) {
init_cjs_shims();
var toString2 = {}.toString;
module2.exports = Array.isArray || function(arr) {
return toString2.call(arr) == "[object Array]";
};
}
});
// ../../node_modules/.pnpm/isobject@2.1.0/node_modules/isobject/index.js
var require_isobject = __commonJS({
"../../node_modules/.pnpm/isobject@2.1.0/node_modules/isobject/index.js"(exports2, module2) {
"use strict";
init_cjs_shims();
var isArray = require_isarray();
module2.exports = function(val) {
return val != null && typeof val == "object" && isArray(val) === !1;
};
}
});
// ../../node_modules/.pnpm/line-column@1.0.2/node_modules/line-column/lib/line-column.js
var require_line_column = __commonJS({
"../../node_modules/.pnpm/line-column@1.0.2/node_modules/line-column/lib/line-column.js"(exports2, module2) {
"use strict";
init_cjs_shims();
var isArray = require_isarray(), isObject4 = require_isobject(), slice = Array.prototype.slice;
module2.exports = LineColumnFinder;
function LineColumnFinder(str, options) {
if (!(this instanceof LineColumnFinder))
return typeof options == "number" ? new LineColumnFinder(str).fromIndex(options) : new LineColumnFinder(str, options);
this.str = str || "", this.lineToIndex = buildLineToIndex(this.str), options = options || {}, this.origin = typeof options.origin > "u" ? 1 : options.origin;
}
LineColumnFinder.prototype.fromIndex = function(index) {
if (index < 0 || index >= this.str.length || isNaN(index))
return null;
var line = findLowerIndexInRangeArray(index, this.lineToIndex);
return {
line: line + this.origin,
col: index - this.lineToIndex[line] + this.origin
};
};
LineColumnFinder.prototype.toIndex = function(line, column) {
if (typeof column > "u")
return isArray(line) && line.length >= 2 ? this.toIndex(line[0], line[1]) : isObject4(line) && "line" in line && ("col" in line || "column" in line) ? this.toIndex(line.line, "col" in line ? line.col : line.column) : -1;
if (isNaN(line) || isNaN(column))
return -1;
if (line -= this.origin, column -= this.origin, line >= 0 && column >= 0 && line < this.lineToIndex.length) {
var lineIndex = this.lineToIndex[line], nextIndex = line === this.lineToIndex.length - 1 ? this.str.length : this.lineToIndex[line + 1];
if (column < nextIndex - lineIndex)
return lineIndex + column;
}
return -1;
};
function buildLineToIndex(str) {
for (var lines = str.split(`
`), lineToIndex = new Array(lines.length), index = 0, i = 0, l = lines.length; i < l; i++)
lineToIndex[i] = index, index += lines[i].length + /* "\n".length */
1;
return lineToIndex;
}
function findLowerIndexInRangeArray(value, arr) {
if (value >= arr[arr.length - 1])
return arr.length - 1;
for (var min = 0, max = arr.length - 2, mid; min < max; )
if (mid = min + (max - min >> 1), value < arr[mid])
max = mid - 1;
else if (value >= arr[mid + 1])
min = mid + 1;
else {
min = mid;
break;
}
return min;
}
}
});
// ../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/position.js
var require_position = __commonJS({
"../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/position.js"(exports2) {
"use strict";
init_cjs_shims();
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
return mod && mod.__esModule ? mod : { default: mod };
};
Object.defineProperty(exports2, "__esModule", { value: !0 });
exports2.getOffset = exports2.getPosition = void 0;
var line_column_1 = __importDefault(require_line_column());
function getPosition(source, index) {
let lineCol = (0, line_column_1.default)(source, { origin: 0 }).fromIndex(Math.min(index, source.length - 1));
return {
index,
line: lineCol ? lineCol.line : -1,
character: lineCol ? lineCol.col : -1
};
}
exports2.getPosition = getPosition;
function getOffset(source, line, column) {
return (0, line_column_1.default)(source, { origin: 1 }).toIndex(line, column);
}
exports2.getOffset = getOffset;
}
});
// ../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/error.js
var require_error = __commonJS({
"../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/error.js"(exports2) {
"use strict";
init_cjs_shims();
Object.defineProperty(exports2, "__esModule", { value: !0 });
exports2.asError = exports2.isError = void 0;
var PARSE_ERROR_MESSAGES = {
1: "Invalid symbol found in the input.",
2: "Invalid number format detected.",
3: "Property name expected but not found.",
4: "A value was expected but not found.",
5: "Colon `:` expected after the property name.",
6: "Comma `,` expected between elements and properties.",
7: "Closing brace `}` expected.",
8: "Closing bracket `]` expected.",
9: "End of file expected.",
10: "Invalid comment token found.",
11: "Unexpected end of comment.",
12: "Unexpected end of string.",
13: "Unexpected end of number.",
14: "Invalid Unicode escape sequence.",
15: "Invalid escape character found.",
16: "Invalid character found in the input."
};
function isError3(error) {
return error instanceof Error;
}
exports2.isError = isError3;
function asError(error) {
return error instanceof Error ? error : typeof error == "string" ? new Error(error) : error && typeof error == "object" && "error" in error ? new Error(getParseErrorMessage(error)) : error && typeof error.toString == "function" ? new Error(error.toString()) : new Error("An unknown error occurred");
}
exports2.asError = asError;
function getParseErrorMessage(parseError) {
return PARSE_ERROR_MESSAGES[parseError.error] || "Unknown parse error.";
}
}
});
// ../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/types.js
var require_types = __commonJS({
"../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/types.js"(exports2) {
"use strict";
init_cjs_shims();
Object.defineProperty(exports2, "__esModule", { value: !0 });
exports2.assertNever = void 0;
function assertNever(x) {
throw new Error(`We should never reach this code, you are missing a case for ${x}`);
}
exports2.assertNever = assertNever;
}
});
// ../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/memo.js
var require_memo = __commonJS({
"../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/memo.js"(exports2) {
"use strict";
init_cjs_shims();
Object.defineProperty(exports2, "__esModule", { value: !0 });
exports2.memoize = exports2.memo = void 0;
var Unset = Symbol("Unset");
function memo(fn) {
let cachedValue = Unset, memoedFunction = (...args) => (cachedValue === Unset && (cachedValue = fn(...args)), cachedValue);
return memoedFunction.clearCache = () => {
cachedValue = Unset;
}, memoedFunction;
}
exports2.memo = memo;
function memoize(fn, keyFn) {
let cache3 = {}, memoedFunction = (...args) => {
let key = keyFn(...args);
return cache3[key] || (cache3[key] = fn(...args)), cache3[key];
};
return memoedFunction.force = (...args) => (memoedFunction.invalidate(...args), memoedFunction(...args)), memoedFunction.invalidate = (...args) => {
let key = keyFn(...args);
delete cache3[key];
}, memoedFunction.clearCache = () => {
cache3 = {};
}, memoedFunction;
}
exports2.memoize = memoize;
}
});
// ../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/indexBy.js
var require_indexBy = __commonJS({
"../../node_modules/.pnpm/@shopify+theme-check-common@3.23.0/node_modules/@shopify/theme-check-common/dist/utils/indexBy.js"(exports2) {
"use strict";
init_cjs_shims();
Object.defineProperty(exports2, "__esModule", { value: !0 });
exports2.indexBy = void 0;
function indexBy(keyFn, collection) {
let record = {};
for (let item of collection)
record[keyFn(item)] = item;
return record;
}
exports2.indexBy = indexBy;
}
});
// ../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/umd/impl/scanner.js
function createScanner(text, ignoreTrivia = !1) {
let len = text.length, pos = 0, value = "", tokenOffset = 0, token = 16, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0;
function scanHexDigits(count, exact) {
let digits = 0, value2 = 0;
for (; digits < count || !exact; ) {
let ch = text.charCodeAt(pos);
if (ch >= 48 && ch <= 57)
value2 = value2 * 16 + ch - 48;
else if (ch >= 65 && ch <= 70)
value2 = value2 * 16 + ch - 65 + 10;
else if (ch >= 97 && ch <= 102)
value2 = value2 * 16 + ch - 97 + 10;
else
break;
pos++, digits++;
}
return digits < count && (value2 = -1), value2;
}
function setPosition(newPosition) {
pos = newPosition, value = "", tokenOffset = 0, token = 16, scanError = 0;
}
function scanNumber() {
let start = pos;
if (text.charCodeAt(pos) === 48)
pos++;
else
for (pos++; pos < text.length && isDigit2(text.charCodeAt(pos)); )
pos++;
if (pos < text.length && text.charCodeAt(pos) === 46)
if (pos++, pos < text.length && isDigit2(text.charCodeAt(pos)))
for (pos++; pos < text.length && isDigit2(text.charCodeAt(pos)); )
pos++;
else
return scanError = 3, text.substring(start, pos);
let end = pos;
if (pos < text.length && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101))
if (pos++, (pos < text.length && text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) && pos++, pos < text.length && isDigit2(text.charCodeAt(pos))) {
for (pos++; pos < text.length && isDigit2(text.charCodeAt(pos)); )
pos++;
end = pos;
} else
scanError = 3;
return text.substring(start, end);
}
function scanString() {
let result = "", start = pos;
for (; ; ) {
if (pos >= len) {
result += text.substring(start, pos), scanError = 2;
break;
}
let ch = text.charCodeAt(pos);
if (ch === 34) {
result += text.substring(start, pos), pos++;
break;
}
if (ch === 92) {
if (result += text.substring(start, pos), pos++, pos >= len) {
scanError = 2;
break;
}
switch (text.charCodeAt(pos++)) {
case 34:
result += '"';
break;
case 92:
result += "\\";
break;
case 47:
result += "/";
break;
case 98:
result += "\b";
break;
case 102:
result += "\f";
break;
case 110:
result += `
`;
break;
case 114:
result += "\r";
break;
case 116:
result += " ";
break;
case 117:
let ch3 = scanHexDigits(4, !0);
ch3 >= 0 ? result += String.fromCharCode(ch3) : scanError = 4;
break;
default:
scanError = 5;
}
start = pos;
continue;
}
if (ch >= 0 && ch <= 31)
if (isLineBreak(ch)) {
result += text.substring(start, pos), scanError = 2;
break;
} else
scanError = 6;
pos++;
}
return result;
}
function scanNext() {
if (value = "", scanError = 0, tokenOffset = pos, lineStartOffset = lineNumber, prevTokenLineStartOffset = tokenLineStartOffset, pos >= len)
return tokenOffset = len, token = 17;
let code = text.charCodeAt(pos);
if (isWhiteSpace(code)) {
do
pos++, value += String.fromCharCode(code), code = text.charCodeAt(pos);
while (isWhiteSpace(code));
return token = 15;
}
if (isLineBreak(code))
return pos++, value += String.fromCharCode(code), code === 13 && text.charCodeAt(pos) === 10 && (pos++, value += `
`), lineNumber++, tokenLineStartOffset = pos, token = 14;
switch (code) {
// tokens: []{}:,
case 123:
return pos++, token = 1;
case 125:
return pos++, token = 2;
case 91:
return pos++, token = 3;
case 93:
return pos++, token = 4;
case 58:
return pos++, token = 6;
case 44:
return pos++, token = 5;
// strings
case 34:
return pos++, value = scanString(), token = 10;
// comments
case 47:
let start = pos - 1;
if (text.charCodeAt(pos + 1) === 47) {
for (pos += 2; pos < len && !isLineBreak(text.charCodeAt(pos)); )
pos++;
return value = text.substring(start, pos), token = 12;
}
if (text.charCodeAt(pos + 1) === 42) {
pos += 2;
let safeLength = len - 1, commentClosed = !1;
for (; pos < safeLength; ) {
let ch = text.charCodeAt(pos);
if (ch === 42 && text.charCodeAt(pos + 1) === 47) {
pos += 2, commentClosed = !0;
break;
}
pos++, isLineBreak(ch) && (ch === 13 && text.charCodeAt(pos) === 10 && pos++, lineNumber++, tokenLineStartOffset = pos);
}
return commentClosed || (pos++, scanError = 1), value = text.substring(start, pos), token = 13;
}
return value += String.fromCharCode(code), pos++, token = 16;
// numbers
case 45:
if (value += String.fromCharCode(code), pos++, pos === len || !isDigit2(text.charCodeAt(pos)))
return token = 16;
// found a minus, followed by a number so
// we fall through to proceed with scanning
// numbers
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
return value += scanNumber(), token = 11;
// literals and unknown symbols
default:
for (; pos < len && isUnknownContentCharacter(code); )
pos++, code = text.charCodeAt(pos);
if (tokenOffset !== pos) {
switch (value = text.substring(tokenOffset, pos), value) {
case "true":
return token = 8;
case "false":
return token = 9;
case "null":
return token = 7;
}
return token = 16;
}
return value += String.fromCharCode(code), pos++, token = 16;
}
}
function isUnknownContentCharacter(code) {
if (isWhiteSpace(code) || isLineBreak(code))
return !1;
switch (code) {
case 125:
case 93:
case 123:
case 91:
case 34:
case 58:
case 44:
case 47:
return !1;
}
return !0;
}
function scanNextNonTrivia() {
let result;
do
result = scanNext();
while (result >= 12 && result <= 15);
return result;
}
return {
setPosition,
getPosition: () => pos,
scan: ignoreTrivia ? scanNextNonTrivia : scanNext,
getToken: () => token,
getTokenValue: () => value,
getTokenOffset: () => tokenOffset,
getTokenLength: () => pos - tokenOffset,
getTokenStartLine: () => lineStartOffset,
getTokenStartCharacter: () => tokenOffset - prevTokenLineStartOffset,
getTokenError: () => scanError
};
}
function isWhiteSpace(ch) {
return ch === 32 || ch === 9;
}
function isLineBreak(ch) {
return ch === 10 || ch === 13;
}
function isDigit2(ch) {
return ch >= 48 && ch <= 57;
}
var CharacterCodes, init_scanner = __esm({
"../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/umd/impl/scanner.js"() {
"use strict";
init_cjs_shims();
(function(CharacterCodes2) {
CharacterCodes2[CharacterCodes2.lineFeed = 10] = "lineFeed", CharacterCodes2[CharacterCodes2.carriageReturn = 13] = "carriageReturn", CharacterCodes2[CharacterCodes2.space = 32] = "space", 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.asterisk = 42] = "asterisk", CharacterCodes2[CharacterCodes2.backslash = 92] = "backslash", CharacterCodes2[CharacterCodes2.closeBrace = 125] = "closeBrace", CharacterCodes2[CharacterCodes2.closeBracket = 93] = "closeBracket", CharacterCodes2[CharacterCodes2.colon = 58] = "colon", CharacterCodes2[CharacterCodes2.comma = 44] = "comma", CharacterCodes2[CharacterCodes2.dot = 46] = "dot", CharacterCodes2[CharacterCodes2.doubleQuote = 34] = "doubleQuote", CharacterCodes2[CharacterCodes2.minus = 45] = "minus", CharacterCodes2[CharacterCodes2.openBrace = 123] = "openBrace", CharacterCodes2[CharacterCodes2.openBracket = 91] = "openBracket", CharacterCodes2[CharacterCodes2.plus = 43] = "plus", CharacterCodes2[CharacterCodes2.slash = 47] = "slash", CharacterCodes2[CharacterCodes2.formFeed = 12] = "formFeed", CharacterCodes2[CharacterCodes2.tab = 9] = "tab";
})(CharacterCodes || (CharacterCodes = {}));
}
});
// ../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/umd/impl/string-intern.js
var cachedSpaces, maxCachedValues, cachedBreakLinesWithSpaces, supportedEols, init_string_intern = __esm({
"../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/umd/impl/string-intern.js"() {
init_cjs_shims();
cachedSpaces = new Array(20).fill(0).map((_2, index) => " ".repeat(index)), maxCachedValues = 200, cachedBreakLinesWithSpaces = {
" ": {
"\n": new Array(maxCachedValues).fill(0).map((_2, index) => `
` + " ".repeat(index)),
"\r": new Array(maxCachedValues).fill(0).map((_2, index) => "\r" + " ".repeat(index)),
"\r\n": new Array(maxCachedValues).fill(0).map((_2, index) => `\r
` + " ".repeat(index))
},
" ": {
"\n": new Array(maxCachedValues).fill(0).map((_2, index) => `
` + " ".repeat(index)),
"\r": new Array(maxCachedValues).fill(0).map((_2, index) => "\r" + " ".repeat(index)),
"\r\n": new Array(maxCachedValues).fill(0).map((_2, index) => `\r
` + " ".repeat(index))
}
}, supportedEols = [`
`, "\r", `\r
`];
}
});
// ../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/umd/impl/format.js
function format(documentText, range, options) {
let initialIndentLevel, formatText, formatTextStart, rangeStart, rangeEnd;
if (range) {
for (rangeStart = range.offset, rangeEnd = rangeStart + range.length, formatTextStart = rangeStart; formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1); )
formatTextStart--;
let endOffset = rangeEnd;
for (; endOffset < documentText.length && !isEOL(documentText, endOffset); )
endOffset++;
formatText = documentText.substring(formatTextStart, endOffset), initialIndentLevel = computeIndentLevel(formatText, options);
} else
formatText = documentText, initialIndentLevel = 0, formatTextStart = 0, rangeStart = 0, rangeEnd = documentText.length;
let eol = getEOL(options, documentText), eolFastPathSupported = supportedEols.includes(eol), numberLineBreaks = 0, indentLevel = 0, indentValue;
options.insertSpaces ? indentValue = cachedSpaces[options.tabSize || 4] ?? repeat(cachedSpaces[1], options.tabSize || 4) : indentValue = " ";
let indentType = indentValue === " " ? " " : " ", scanner = createScanner(formatText, !1), hasError = !1;
function newLinesAndIndent() {
if (numberLineBreaks > 1)
return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);
let amountOfSpaces = indentValue.length * (initialIndentLevel + indentLevel);
return !eolFastPathSupported || amountOfSpaces > cachedBreakLinesWithSpaces[indentType][eol].length ? eol + repeat(indentValue, initialIndentLevel + indentLevel) : amountOfSpaces <= 0 ? eol : cachedBreakLinesWithSpaces[indentType][eol][amountOfSpaces];
}
function scanNext() {
let token = scanner.scan();
for (numberLineBreaks = 0; token === 15 || token === 14; )
token === 14 && options.keepLines ? numberLineBreaks += 1 : token === 14 && (numberLineBreaks = 1), token = scanner.scan();
return hasError = token === 16 || scanner.getTokenError() !== 0, token;
}
let editOperations = [];
function addEdit(text, startOffset, endOffset) {
!hasError && (!range || startOffset < rangeEnd && endOffset > rangeStart) && documentText.substring(startOffset, endOffset) !== text && editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });
}
let firstToken = scanNext();
if (options.keepLines && numberLineBreaks > 0 && addEdit(repeat(eol, numberLineBreaks), 0, 0), firstToken !== 17) {
let firstTokenStart = scanner.getTokenOffset() + formatTextStart, initialIndent = indentValue.length * initialIndentLevel < 20 && options.insertSpaces ? cachedSpaces[indentValue.length * initialIndentLevel] : repeat(indentValue, initialIndentLevel);
addEdit(initialIndent, formatTextStart, firstTokenStart);
}
for (; firstToken !== 17; ) {
let firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart, secondToken = scanNext(), replaceContent = "", needsLineBreak = !1;
for (; numberLineBreaks === 0 && (secondToken === 12 || secondToken === 13); ) {
let commentTokenStart = scanner.getTokenOffset() + formatTextStart;
addEdit(cachedSpaces[1], firstTokenEnd, commentTokenStart), firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart, needsLineBreak = secondToken === 12, replaceContent = needsLineBreak ? newLinesAndIndent() : "", secondToken = scanNext();
}
if (secondToken === 2)
firstToken !== 1 && indentLevel--, options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 1 ? replaceContent = newLinesAndIndent() : options.keepLines && (replaceContent = cachedSpaces[1]);
else if (secondToken === 4)
firstToken !== 3 && indentLevel--, options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 3 ? replaceContent = newLinesAndIndent() : options.keepLines && (replaceContent = cachedSpaces[1]);
else {
switch (firstToken) {
case 3:
case 1:
indentLevel++, options.keepLines && numberLineBreaks > 0 || !options.keepLines ? replaceContent = newLinesAndIndent() : replaceContent = cachedSpaces[1];
break;
case 5:
options.keepLines && numberLineBreaks > 0 || !options.keepLines ? replaceContent = newLinesAndIndent() : replaceContent = cachedSpaces[1];
break;
case 12:
replaceContent = newLinesAndIndent();
break;
case 13:
numberLineBreaks > 0 ? replaceContent = newLinesAndIndent() : needsLineBreak || (replaceContent = cachedSpaces[1]);
break;
case 6:
options.keepLines && numberLineBreaks > 0 ? replaceContent = newLinesAndIndent() : needsLineBreak || (replaceContent = cachedSpaces[1]);
break;
case 10:
options.keepLines && numberLineBreaks > 0 ? replaceContent = newLinesAndIndent() : secondToken === 6 && !needsLineBreak && (replaceContent = "");
break;
case 7:
case 8:
case 9:
case 11:
case 2:
case 4:
options.keepLines && numberLineBreaks > 0 ? replaceContent = newLinesAndIndent() : (secondToken === 12 || secondToken === 13) && !needsLineBreak ? replaceContent = cachedSpaces[1] : secondToken !== 5 && secondToken !== 17 && (hasError = !0);
break;
case 16:
hasError = !0;
break;
}
numberLineBreaks > 0 && (secondToken === 12 || secondToken === 13) && (replaceContent = newLinesAndIndent());
}
secondToken === 17 && (options.keepLines && numberLineBreaks > 0 ? replaceContent = newLinesAndIndent() : replaceContent = options.insertFinalNewline ? eol : "");
let secondTokenStart = scanner.getTokenOffset() + formatTextStart;
addEdit(replaceContent, firstTokenEnd, secondTokenStart), firstToken = secondToken;
}
return editOperations;
}
function repeat(s, count) {
let result = "";
for (let i = 0; i < count; i++)
result += s;
return result;
}
function computeIndentLevel(content, options) {
let i = 0, nChars = 0, tabSize = options.tabSize || 4;
for (; i < content.length; ) {
let ch = content.charAt(i);
if (ch === cachedSpaces[1])
nChars++;
else if (ch === " ")
nChars += tabSize;
else
break;
i++;
}
return Math.floor(nChars / tabSize);
}
function getEOL(options, text) {
for (let i = 0; i < text.length; i++) {
let ch = text.charAt(i);
if (ch === "\r")
return i + 1 < text.length && text.charAt(i + 1) === `
` ? `\r
` : "\r";
if (ch === `
`)
return `
`;
}
return options && options.eol || `
`;
}
function isEOL(text, offset) {
return `\r
`.indexOf(text.charAt(offset)) !== -1;
}
var init_format = __esm({
"../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/umd/impl/format.js"() {
"use strict";
init_cjs_shims();
init_scanner();
init_string_intern();
}
});
// ../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/umd/impl/parser.js
function getLocation(text, position) {
let segments = [], earlyReturnException = new Object(), previousNode, previousNodeInst = {
value: {},
offset: 0,
length: 0,
type: "object",
parent: void 0
}, isAtPropertyKey = !1;
function setPreviousNode(value, offset, length, type) {
previousNodeInst.value = value, previousNodeInst.offset = offset, previousNodeInst.length = length, previousNodeInst.type = type, previousNodeInst.colonOffset = void 0, previousNode = previousNodeInst;
}
try {
visit(text, {
onObjectBegin: (offset, length) => {
if (position <= offset)
throw earlyReturnException;
previousNode = void 0, isAtPropertyKey = position > offset, segments.push("");
},
onObjectProperty: (name, offset, length) => {
if (position < offset || (setPreviousNode(name, offset, length, "property"), segments[segments.length - 1] = name, position <= offset + length))
throw earlyReturnException;
},
onObjectEnd: (offset, length) => {
if (position <= offset)
throw earlyReturnException;
previousNode = void 0, segments.pop();
},
onArrayBegin: (offset, length) => {
if (position <= offset)
throw earlyReturnException;
previousNode = void 0, segments.push(0);
},
onArrayEnd: (offset, length) => {
if (position <= offset)
throw earlyReturnException;
previousNode = void 0, segments.pop();
},
onLiteralValue: (value, offset, length) => {
if (position < offset || (setPreviousNode(value, offset, length, getNodeType(value)), position <= offset + length))
throw earlyReturnException;
},
onSeparator: (sep, offset, length) => {
if (position <= offset)
throw earlyReturnException;
if (sep === ":" && previousNode && previousNode.type === "property")
previousNode.colonOffset = offset, isAtPropertyKey = !1, previousNode = void 0;
else if (sep === ",") {
let last2 = segments[segments.length - 1];
typeof last2 == "number" ? segments[segments.length - 1] = last2 + 1 : (isAtPropertyKey = !0, segments[segments.length - 1] = ""), previousNode = void 0;
}
}
});
} catch (e) {
if (e !== earlyReturnException)
throw e;
}
return {
path: segments,
previousNode,
isAtPropertyKey,
matches: (pattern) => {
let k = 0;
for (let i = 0; k < pattern.length && i < segments.length; i++)
if (pattern[k] === segments[i] || pattern[k] === "*")
k++;
else if (pattern[k] !== "**")
return !1;
return k === pattern.length;
}
};
}
function parse(text, errors = [], options = ParseOptions.DEFAULT) {
let currentProperty = null, currentParent = [], previousParents = [];
function onValue(value) {
Array.isArray(currentParent) ? currentParent.push(value) : currentProperty !== null && (currentParent[currentProperty] = value);
}
return visit(text, {
onObjectBegin: () => {
let object = {};
onValue(object), previousParents.push(currentParent), currentParent = object, currentProperty = null;
},
onObjectProperty: (name) => {
currentProperty = name;
},
onObjectEnd: () => {
currentParent = previousParents.pop();
},
onArrayBegin: () => {
let array = [];
onValue(array), previousParents.push(currentParent), currentParent = array, currentProperty = null;
},
onArrayEnd: () => {
currentParent = previousParents.pop();
},
onLiteralValue: onValue,
onError: (error, offset, length) => {
errors.push({ error, offset, length });
}
}, options), currentParent[0];
}
function parseTree(text, errors = [], options = ParseOptions.DEFAULT) {
let currentParent = { type: "array", offset: -1, length: -1, children: [], parent: void 0 };
function ensurePropertyComplete(endOffset) {
currentParent.type === "property" && (currentParent.length = endOffset - currentParent.offset, currentParent = currentParent.parent);
}
function onValue(valueNode) {
return currentParent.children.push(valueNode), valueNode;
}
visit(text, {
onObjectBegin: (offset) => {
currentParent = onValue({ type: "object", offset, length: -1, parent: currentParent, children: [] });
},
onObjectProperty: (name, offset, length) => {
currentParent = onValue({ type: "property", offset, length: -1, parent: currentParent, children: [] }), currentParent.children.push({ type: "string", value: name, offset, length, parent: currentParent });
},
onObjectEnd: (offset, length) => {
ensurePropertyComplete(offset + length), currentParent.length = offset + length - currentParent.offset, currentParent = currentParent.parent, ensurePropertyComplete(offset + length);
},
onArrayBegin: (offset, length) => {
currentParent = onValue({ type: "array", offset, length: -1, parent: currentParent, children: [] });
},
onArrayEnd: (offset, length) => {
currentParent.length = offset + length - currentParent.offset, currentParent = currentParent.parent, ensurePropertyComplete(offset + length);
},
onLiteralValue: (value, offset, length) => {
onValue({ type: getNodeType(value), offset, length, parent: currentParent, value }), ensurePropertyComplete(offset + length);
},
onSeparator: (sep, offset, length) => {
currentParent.type === "property" && (sep === ":" ? currentParent.colonOffset = offset : sep === "," && ensurePropertyComplete(offset));
},
onError: (error, offset, length) => {
errors.push({ error, offset, length });
}
}, options);
let result = currentParent.children[0];
return result && delete result.parent, result;
}
function findNodeAtLocation(root, path) {
if (!root)
return;
let node = root;
for (let segment of path)
if (typeof segment == "string") {
if (node.type !== "object" || !Array.isArray(node.children))
return;
let found = !1;
for (let propertyNode of node.children)
if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment && propertyNode.children.length === 2) {
node = propertyNode.children[1], found = !0;
break;
}
if (!found)
return;
} else {
let index = segment;
if (node.typ