@wcstack/typescript 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ja.md CHANGED
@@ -20,7 +20,22 @@ npx wcs-validate --strict index.html # typo は error に、偽警告は消
20
20
 
21
21
  ### `wcs-schema emit <state.ts|state.js> [options]`
22
22
 
23
- ファイルの `export default` から `states[<name>].stateSchema` を生成します(`defineState(...)` は構文的に剥がすので、このパッケージは `@wcstack/state` を解決できなくても動きます)。生成結果は書き出す前に検証器自身の manifest 検査を通します。
23
+ ファイルの `export default` から manifest の単一の `stateSchema`(`schemaVersion` 2)を生成します(`defineState(...)` は構文的に剥がすので、このパッケージは `@wcstack/state` を解決できなくても動きます)。生成結果は書き出す前に検証器自身の manifest 検査を通します。
24
+
25
+ トップレベルの spread は、その型のキーを持ち込みます: `{ ...defaults(), get total() { … } }` は、`defaults()` の戻り値の型が挙げるキーを載せます。4.4 から、キーを挙げない型 —— index signature(`Record<string, unknown>`)・`any`・`unknown` —— の spread があると、schema は開いた `{}` になります(警告付き)。コンパイラは spread から index signature を落とすので、literal 自身のキーだけの schema にすると、spread のキーがすべて `wcs/path-nonexistent` になってしまうためです。その式に型を付けてください。キーが表から来るなら、型も表から導けば、宣言は 1 か所のままです:
26
+
27
+ ```javascript
28
+ export const FIELDS = /** @type {const} */ ({ total: { type: "amount" }, married: { type: "flag" } });
29
+ /**
30
+ * @typedef {{ amount: number, flag: boolean }} ValueOf
31
+ * @typedef {{ -readonly [K in keyof typeof FIELDS]: ValueOf[(typeof FIELDS)[K]["type"]] }} Inputs
32
+ * @returns {Inputs}
33
+ */
34
+ export const defaults = () => /** @type {Inputs} */ (Object.fromEntries(
35
+ /** @type {(keyof typeof FIELDS)[]} */ (Object.keys(FIELDS)).map((k) => [k, FIELDS[k].type === "flag" ? false : 0])));
36
+ ```
37
+
38
+ 4.4 から、コマンドは大きなスタックの worker スレッドで動きます。spread のある literal では、TypeScript のチェッカーが `this` を読む getter 1 本ごとに 1 段再帰し、getter が 100 本ほどの state で主スレッドのスタックが尽きたためです。API(`generateStateSchema()`)から呼ぶと、そうした state は `the TypeScript checker ran out of stack` を投げることがあります。`resourceLimits.stackSizeMb` を大きくした worker で呼んでください。
24
39
 
25
40
  | オプション | 説明 |
26
41
  |---|---|
package/README.md CHANGED
@@ -22,6 +22,21 @@ Zero runtime dependencies. `typescript` is a peer dependency — the project's o
22
22
 
23
23
  Generates the manifest's single `stateSchema` (`schemaVersion` 2) from the file's `export default` (a `defineState(...)` call is unwrapped syntactically, so the package does not even need to resolve `@wcstack/state`). The result is run through the validator core's own manifest check before anything is written.
24
24
 
25
+ A top-level spread brings its type's keys in: `{ ...defaults(), get total() { … } }` lists what `defaults()` is typed to return. Since 4.4, a spread whose type does not list its keys — an index signature (`Record<string, unknown>`), `any`, `unknown` — makes the schema open (`{}`, with a warning): the compiler drops an index signature from a spread, and a schema of the literal's own keys would make every key of the spread `wcs/path-nonexistent`. Type the expression instead. When the keys come from a table, derive the type from the table, so they are still declared once:
26
+
27
+ ```javascript
28
+ export const FIELDS = /** @type {const} */ ({ total: { type: "amount" }, married: { type: "flag" } });
29
+ /**
30
+ * @typedef {{ amount: number, flag: boolean }} ValueOf
31
+ * @typedef {{ -readonly [K in keyof typeof FIELDS]: ValueOf[(typeof FIELDS)[K]["type"]] }} Inputs
32
+ * @returns {Inputs}
33
+ */
34
+ export const defaults = () => /** @type {Inputs} */ (Object.fromEntries(
35
+ /** @type {(keyof typeof FIELDS)[]} */ (Object.keys(FIELDS)).map((k) => [k, FIELDS[k].type === "flag" ? false : 0])));
36
+ ```
37
+
38
+ Since 4.4, the command runs on a worker thread with a large stack: the TypeScript checker recurses once per getter that reads `this` in a literal with a spread, and a state of a hundred getters ran out of the main thread's. Called from the API (`generateStateSchema()`), such a state may throw `the TypeScript checker ran out of stack`; call it on a worker with a larger `resourceLimits.stackSizeMb`.
39
+
25
40
  | Option | Description |
26
41
  |---|---|
27
42
  | `--mount=<path>` | Emit only the subtree at this mount path — the type file of a `<wcs-state mount="…">` volume merges as a subtree of the single tree. Omit for the root state file |
package/dist/index.d.ts CHANGED
@@ -25,6 +25,8 @@ interface LoadedState {
25
25
  readonly location: ts.Node;
26
26
  /** Non-fatal notes for the caller (e.g. the state type resolved to `any`). */
27
27
  readonly warnings: readonly string[];
28
+ /** A top-level spread brings in keys its type does not list: the state's schema is open (`{}`), whatever `type` says. */
29
+ readonly open: boolean;
28
30
  }
29
31
  /** Defaults used when no tsconfig.json is found — enough to type a plain state file. */
30
32
  declare const DEFAULT_COMPILER_OPTIONS: ts.CompilerOptions;
package/dist/index.esm.js CHANGED
@@ -106,12 +106,54 @@ function loadStateFile(file, options = {}) {
106
106
  }
107
107
  const location = stateExpression(exportAssignment.expression);
108
108
  const checker = program.getTypeChecker();
109
- const type = checker.getTypeAtLocation(location);
110
109
  const warnings = [];
110
+ // A spread whose type does not list its keys first: the type of the whole literal is not needed then (and is the
111
+ // expensive one, below)
112
+ const spread = openSpread(checker, sourceFile, location);
113
+ if (spread !== null) {
114
+ warnings.push(`the spread \`${spread.text}\` (${file}:${spread.line}) brings in keys its type does not list (\`${spread.type}\`); the generated stateSchema will be open ({}). Give that expression a type that lists them (a JSDoc @returns or @type)`);
115
+ return { program, checker, sourceFile, type: checker.getAnyType(), location, warnings, open: true };
116
+ }
117
+ let type;
118
+ try {
119
+ type = checker.getTypeAtLocation(location);
120
+ }
121
+ catch (e) {
122
+ /* v8 ignore next 2 -- the checker's own overflow, exercised against the built dist (stack.test.ts) */
123
+ if (!(e instanceof RangeError))
124
+ throw e;
125
+ throw new Error(`the TypeScript checker ran out of stack on ${file}: an \`export default { … }\` with a top-level spread makes it recurse once per getter that reads \`this\`. The wcs-schema command runs on a larger stack; from the API, call generateStateSchema() on a worker with a larger resourceLimits.stackSizeMb`);
126
+ }
111
127
  if ((type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0) {
112
128
  warnings.push(`the default export of ${file} has type \`${checker.typeToString(type)}\`; the generated stateSchema will be open ({})`);
113
129
  }
114
- return { program, checker, sourceFile, type, location, warnings };
130
+ return { program, checker, sourceFile, type, location, warnings, open: false };
131
+ }
132
+ /**
133
+ * A top-level spread of the state literal whose type does not list the keys it brings in — `any`, `unknown`, or an
134
+ * index signature (`...sanitizeInputs({}).inputs` returning `Record<string, unknown>`). The compiler drops an
135
+ * index signature from a spread, so the literal's type then lists only its own keys: a schema made from it would
136
+ * call every key of the spread nonexistent (`wcs/path-nonexistent`, an error), where the validator knows nothing.
137
+ * Found by an outside evaluation (a tax return draft whose 34 inputs come from such a spread).
138
+ */
139
+ function openSpread(checker, sourceFile, location) {
140
+ if (!ts.isObjectLiteralExpression(location))
141
+ return null;
142
+ for (const property of location.properties) {
143
+ if (!ts.isSpreadAssignment(property))
144
+ continue;
145
+ const type = checker.getTypeAtLocation(property.expression);
146
+ const open = (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0
147
+ || (type.isUnion() ? type.types : [type]).some((t) => checker.getIndexInfosOfType(t).length > 0);
148
+ if (!open)
149
+ continue;
150
+ return {
151
+ text: property.getText(sourceFile),
152
+ line: sourceFile.getLineAndCharacterOfPosition(property.getStart(sourceFile)).line + 1,
153
+ type: checker.typeToString(type),
154
+ };
155
+ }
156
+ return null;
115
157
  }
116
158
 
117
159
  /**
@@ -350,7 +392,7 @@ function dedupeNodes(nodes) {
350
392
  */
351
393
  function generateStateSchema(file, options = {}) {
352
394
  const loaded = loadStateFile(file, options);
353
- const schema = stateTypeToSchema(loaded.checker, loaded.program, loaded.type, loaded.location, options);
395
+ const schema = loaded.open ? {} : stateTypeToSchema(loaded.checker, loaded.program, loaded.type, loaded.location, options);
354
396
  return { schema, warnings: loaded.warnings };
355
397
  }
356
398
 
@@ -572,7 +614,7 @@ function loadSchemaCore() {
572
614
  return cached;
573
615
  }
574
616
 
575
- var version = "4.3.0";
617
+ var version = "4.4.0";
576
618
  var pkg = {
577
619
  version: version};
578
620
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../src/program.ts","../../src/typeToSchema.ts","../../src/generate.ts","../../src/manifest.ts","../../src/schemaCore.ts","../../src/version.ts"],"sourcesContent":["/**\n * program.ts — open a state file with the TypeScript compiler API and locate the\n * type of its `export default`.\n *\n * `defineState(x)` is an identity function, so the exported type is `x`'s type —\n * but the call is unwrapped syntactically anyway: when `@wcstack/state` is not\n * resolvable from the state file (a CDN-only page, a fixture in a temp dir), the\n * call expression would type as `any` and every path would be lost, while the\n * argument literal still carries the full object type.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport ts from \"typescript\";\n\nexport interface LoadStateOptions {\n /** Explicit tsconfig.json path. Default: the nearest tsconfig.json above the state file, else built-in defaults. */\n readonly tsconfig?: string;\n}\n\nexport interface LoadedState {\n readonly program: ts.Program;\n readonly checker: ts.TypeChecker;\n readonly sourceFile: ts.SourceFile;\n /** The type of the default export (the `defineState(...)` argument when wrapped). */\n readonly type: ts.Type;\n /** Node to use as the location for `getTypeOfSymbolAtLocation`. */\n readonly location: ts.Node;\n /** Non-fatal notes for the caller (e.g. the state type resolved to `any`). */\n readonly warnings: readonly string[];\n}\n\n/** Defaults used when no tsconfig.json is found — enough to type a plain state file. */\nexport const DEFAULT_COMPILER_OPTIONS: ts.CompilerOptions = {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n lib: [\"lib.esnext.d.ts\", \"lib.dom.d.ts\", \"lib.dom.iterable.d.ts\"],\n strict: true,\n};\n\n/** The compiler API compares paths it attaches diagnostics to against `/`-separated ones; feed it those on Windows too. */\nfunction toPosix(path: string): string {\n return path.replace(/\\\\/g, \"/\");\n}\n\nexport function resolveCompilerOptions(stateFile: string, options: LoadStateOptions = {}): ts.CompilerOptions {\n const configPath = options.tsconfig !== undefined\n ? toPosix(resolve(options.tsconfig))\n : ts.findConfigFile(toPosix(dirname(stateFile)), ts.sys.fileExists, \"tsconfig.json\");\n let base: ts.CompilerOptions = { ...DEFAULT_COMPILER_OPTIONS };\n if (configPath !== undefined) {\n let parsedOptions: ts.CompilerOptions;\n try {\n const read = ts.readConfigFile(configPath, ts.sys.readFile);\n if (read.error !== undefined) {\n throw new Error(ts.flattenDiagnosticMessageText(read.error.messageText, \"\\n\"));\n }\n parsedOptions = ts.parseJsonConfigFileContent(read.config, ts.sys, toPosix(dirname(configPath)), undefined, configPath).options;\n } catch (e) {\n throw new Error(`cannot read ${configPath}: ${(e as Error).message}`);\n }\n base = { ...DEFAULT_COMPILER_OPTIONS, ...parsedOptions };\n }\n return {\n ...base,\n // The generator only reads types: never write, always accept JS (JSDoc types), keep it fast.\n noEmit: true,\n allowJs: true,\n checkJs: true,\n skipLibCheck: true,\n declaration: false,\n declarationMap: false,\n sourceMap: false,\n composite: false,\n incremental: false,\n tsBuildInfoFile: undefined,\n };\n}\n\n/** Unwrap `defineState(x)` (any callee whose last identifier is `defineState`) and `satisfies` / `as`-free wrappers. */\nfunction stateExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n if (ts.isCallExpression(current) && current.arguments.length > 0) {\n const callee = current.expression;\n const name = ts.isIdentifier(callee)\n ? callee.text\n : ts.isPropertyAccessExpression(callee)\n ? callee.name.text\n : undefined;\n if (name === \"defineState\") return current.arguments[0];\n }\n return current;\n}\n\nexport function loadStateFile(file: string, options: LoadStateOptions = {}): LoadedState {\n const abs = resolve(file);\n if (!existsSync(abs)) throw new Error(`cannot read ${file}: no such file`);\n // Read up front so an unreadable file fails with a plain message, not a compiler internals one.\n readFileSync(abs, \"utf8\");\n\n const compilerOptions = resolveCompilerOptions(abs, options);\n const program = ts.createProgram([abs], compilerOptions);\n const sourceFile = program.getSourceFile(abs);\n /* v8 ignore next -- the file exists and is a root name; the compiler always returns it */\n if (sourceFile === undefined) throw new Error(`cannot open ${file} as a TypeScript/JavaScript source`);\n\n const syntax = program.getSyntacticDiagnostics(sourceFile);\n if (syntax.length > 0) {\n const lines = syntax.map((d) => {\n // Syntactic diagnostics always carry their file and position; the fallback is type-level only.\n /* v8 ignore next 2 */\n const pos = d.file !== undefined && d.start !== undefined ? d.file.getLineAndCharacterOfPosition(d.start) : undefined;\n const where = pos !== undefined ? `${file}:${pos.line + 1}:${pos.character + 1}` : file;\n return `${where} ${ts.flattenDiagnosticMessageText(d.messageText, \"\\n\")}`;\n });\n throw new Error(`syntax error(s) in ${file}:\\n${lines.join(\"\\n\")}`);\n }\n\n const exportAssignment = sourceFile.statements.find(\n (s): s is ts.ExportAssignment => ts.isExportAssignment(s) && !s.isExportEquals,\n );\n if (exportAssignment === undefined) {\n throw new Error(`${file} has no \\`export default\\` — a wcstack state file exports its state object as the default export`);\n }\n\n const location = stateExpression(exportAssignment.expression);\n const checker = program.getTypeChecker();\n const type = checker.getTypeAtLocation(location);\n const warnings: string[] = [];\n if ((type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0) {\n warnings.push(`the default export of ${file} has type \\`${checker.typeToString(type)}\\`; the generated stateSchema will be open ({})`);\n }\n return { program, checker, sourceFile, type, location, warnings };\n}\n","/**\n * typeToSchema.ts — TypeScript type → `stateSchema` (the JSON-Schema subset of\n * docs/wcstack-manifest-schema.md §4: type / properties / required / items /\n * enum / const / anyOf only).\n *\n * Rules (docs/app-testing-and-typescript-impl-plan.md §4-2-2):\n * - `$`-prefixed keys are dropped (runtime namespaces, never data paths).\n * - Members with call signatures (methods, function-valued properties) are dropped.\n * - Getters contribute their return type. Path getters (`get \"users.*.ageCategory\"()`)\n * are injected at the path they compute, so the validator sees them as members.\n * - Arrays → `items`; unions split `null` out into `anyOf`; literal unions → `enum`.\n * - Built-in / library object types (`Date`, `Map`, DOM types, …) become a **bare `{}`**\n * — never `{ \"type\": \"object\" }`: the validator treats a bare `{}` as *unknown*\n * (silent) and a typed object without the member as *nonexistent* (error).\n * - Nesting stops at `maxDepth` (default 5 = the validator's candidate budget) with a bare `{}`.\n * - An object type with an index signature (`{ [year: number]: Sale }`, `{ [key: string]: T }`) becomes a bare\n * `{}`: its keys are open, and the subset has no open-object form — a typed object would make every key\n * (`byYear.2024`) *nonexistent*.\n */\n\nimport ts from \"typescript\";\n\nexport interface JsonSchemaNode {\n type?: string;\n properties?: Record<string, JsonSchemaNode>;\n required?: string[];\n items?: JsonSchemaNode;\n enum?: unknown[];\n const?: unknown;\n anyOf?: JsonSchemaNode[];\n}\n\nexport const DEFAULT_MAX_DEPTH = 5;\n\nexport interface SchemaOptions {\n /** Object nesting depth at which a bare `{}` is emitted instead of descending. Default 5. */\n readonly maxDepth?: number;\n}\n\ninterface Context {\n readonly checker: ts.TypeChecker;\n readonly program: ts.Program;\n readonly location: ts.Node;\n readonly maxDepth: number;\n /** Object types currently being expanded (recursion guard). */\n readonly stack: Set<ts.Type>;\n /** Path getters found on the root object, injected after the tree is built. */\n readonly pathGetters: Array<{ segments: string[]; type: ts.Type }>;\n}\n\n/**\n * Convert the type of a state object into a `stateSchema` node.\n */\nexport function stateTypeToSchema(\n checker: ts.TypeChecker,\n program: ts.Program,\n type: ts.Type,\n location: ts.Node,\n options: SchemaOptions = {},\n): JsonSchemaNode {\n const ctx: Context = {\n checker,\n program,\n location,\n maxDepth: options.maxDepth ?? DEFAULT_MAX_DEPTH,\n stack: new Set(),\n pathGetters: [],\n };\n const root = convertType(type, 0, ctx, true);\n for (const getter of ctx.pathGetters) {\n injectPath(root, getter.segments, convertType(getter.type, getter.segments.length, ctx, false));\n }\n return root;\n}\n\nfunction convertType(type: ts.Type, depth: number, ctx: Context, isRoot: boolean): JsonSchemaNode {\n const flags = type.flags;\n if (flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.Never | ts.TypeFlags.TypeParameter | ts.TypeFlags.NonPrimitive)) {\n return {};\n }\n if (flags & ts.TypeFlags.Null) return { type: \"null\" };\n if (flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) return {};\n if (flags & ts.TypeFlags.Boolean) return { type: \"boolean\" };\n if (flags & ts.TypeFlags.BooleanLiteral) return { type: \"boolean\", const: literalValue(type, ctx) };\n if (flags & ts.TypeFlags.StringLiteral) return { type: \"string\", const: (type as ts.StringLiteralType).value };\n if (flags & ts.TypeFlags.NumberLiteral) return { type: \"number\", const: (type as ts.NumberLiteralType).value };\n if (flags & (ts.TypeFlags.BigInt | ts.TypeFlags.BigIntLiteral | ts.TypeFlags.ESSymbolLike)) return {};\n if (flags & ts.TypeFlags.String) return { type: \"string\" };\n if (flags & ts.TypeFlags.Number) return { type: \"number\" };\n if (type.isUnion()) return convertUnion(type, depth, ctx);\n\n if (ctx.checker.isArrayType(type) || ctx.checker.isTupleType(type)) {\n return convertArray(type as ts.TypeReference, depth, ctx);\n }\n\n const callable = type.getCallSignatures().length > 0 || type.getConstructSignatures().length > 0;\n if (callable && ctx.checker.getPropertiesOfType(type).length === 0) return {};\n\n const symbol = type.getSymbol() ?? type.aliasSymbol;\n if (symbol !== undefined && isLibrarySymbol(symbol, ctx)) return {};\n\n return convertObject(type, depth, ctx, isRoot);\n}\n\nfunction convertUnion(type: ts.UnionType, depth: number, ctx: Context): JsonSchemaNode {\n const members = type.types.filter((t) => (t.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) === 0);\n const hasNull = members.some((t) => (t.flags & ts.TypeFlags.Null) !== 0);\n const nonNull = members.filter((t) => (t.flags & ts.TypeFlags.Null) === 0);\n\n let node: JsonSchemaNode;\n if (nonNull.length === 0) {\n return { type: \"null\" };\n } else if (nonNull.every((t) => (t.flags & ts.TypeFlags.BooleanLiteral) !== 0) && nonNull.length === 2) {\n node = { type: \"boolean\" };\n } else if (nonNull.every((t) => t.isLiteral() || (t.flags & ts.TypeFlags.BooleanLiteral) !== 0)) {\n const values = nonNull.map((t) => literalValue(t, ctx));\n const kinds = [...new Set(values.map((v) => typeof v))];\n node = kinds.length === 1 && (kinds[0] === \"string\" || kinds[0] === \"number\" || kinds[0] === \"boolean\")\n ? { type: kinds[0], enum: values }\n : { enum: values };\n } else if (nonNull.length === 1) {\n node = convertType(nonNull[0], depth, ctx, false);\n } else {\n const converted = dedupeNodes(nonNull.map((t) => convertType(t, depth, ctx, false)));\n node = converted.length === 1 ? converted[0] : { anyOf: converted };\n }\n\n if (!hasNull) return node;\n if (node.type === \"null\") return node;\n return node.anyOf !== undefined ? { anyOf: [...node.anyOf, { type: \"null\" }] } : { anyOf: [node, { type: \"null\" }] };\n}\n\nfunction convertArray(type: ts.TypeReference, depth: number, ctx: Context): JsonSchemaNode {\n const args = ctx.checker.getTypeArguments(type);\n if (args.length === 0) return { type: \"array\", items: {} };\n if (ctx.checker.isTupleType(type)) {\n const converted = dedupeNodes(args.map((t) => convertType(t, depth, ctx, false)));\n return { type: \"array\", items: converted.length === 1 ? converted[0] : { anyOf: converted } };\n }\n return { type: \"array\", items: convertType(args[0], depth, ctx, false) };\n}\n\nfunction convertObject(type: ts.Type, depth: number, ctx: Context, isRoot: boolean): JsonSchemaNode {\n if (depth >= ctx.maxDepth) return {};\n if (ctx.stack.has(type)) return {};\n // Open keys (an index signature): unknown to the validator, not an object without members\n if (ctx.checker.getIndexInfosOfType(type).length > 0) return {};\n ctx.stack.add(type);\n try {\n const properties: Record<string, JsonSchemaNode> = {};\n const required: string[] = [];\n for (const prop of ctx.checker.getPropertiesOfType(type)) {\n const name = prop.getName();\n if (name.startsWith(\"$\")) continue;\n if (isMethodSymbol(prop)) continue;\n const propType = ctx.checker.getTypeOfSymbolAtLocation(prop, ctx.location);\n if (isFunctionValued(propType, ctx)) continue;\n if (isRoot && (name.includes(\".\") || name.includes(\"*\"))) {\n // A path getter declares a member at a nested position; inject it once the tree exists.\n ctx.pathGetters.push({ segments: name.split(\".\"), type: propType });\n continue;\n }\n properties[name] = convertType(propType, depth + 1, ctx, false);\n if (!isOptional(prop, propType)) required.push(name);\n }\n const node: JsonSchemaNode = { type: \"object\", properties };\n if (required.length > 0) node.required = required;\n return node;\n } finally {\n ctx.stack.delete(type);\n }\n}\n\n/** Walk `segments` (`*` = array items) into a definite object and add the leaf; unknown (`{}`) containers stay unknown. */\nfunction injectPath(root: JsonSchemaNode, segments: string[], leaf: JsonSchemaNode): void {\n const last = segments[segments.length - 1];\n if (last === \"*\" || last === \"\") return;\n let node: JsonSchemaNode | undefined = root;\n for (const segment of segments.slice(0, -1)) {\n node = segment === \"*\" ? node.items : descendObject(node)?.properties?.[segment];\n if (node === undefined) return;\n node = unwrapNullable(node);\n }\n const container = descendObject(node);\n if (container === undefined || container.properties === undefined) return;\n container.properties[last] = leaf;\n}\n\n/** For `anyOf: [object, null]` return the object member; otherwise the node itself. */\nfunction unwrapNullable(node: JsonSchemaNode): JsonSchemaNode {\n if (node.anyOf === undefined) return node;\n const objects = node.anyOf.filter((n) => n.properties !== undefined || n.items !== undefined);\n return objects.length === 1 ? objects[0] : node;\n}\n\nfunction descendObject(node: JsonSchemaNode | undefined): JsonSchemaNode | undefined {\n if (node === undefined) return undefined;\n const unwrapped = unwrapNullable(node);\n return unwrapped.properties !== undefined ? unwrapped : undefined;\n}\n\nfunction isMethodSymbol(symbol: ts.Symbol): boolean {\n if (symbol.flags & ts.SymbolFlags.Method) return true;\n return (symbol.declarations ?? []).some(\n (d) => ts.isMethodDeclaration(d) || ts.isMethodSignature(d) || ts.isFunctionDeclaration(d),\n );\n}\n\nfunction isFunctionValued(type: ts.Type, ctx: Context): boolean {\n const members = type.isUnion() ? type.types : [type];\n return members.some(\n (t) => t.getCallSignatures().length > 0 && ctx.checker.getPropertiesOfType(t).length === 0,\n );\n}\n\nfunction isOptional(symbol: ts.Symbol, type: ts.Type): boolean {\n if (symbol.flags & ts.SymbolFlags.Optional) return true;\n return type.isUnion() && type.types.some((t) => (t.flags & ts.TypeFlags.Undefined) !== 0);\n}\n\n/** Declared in a default lib (`lib.*.d.ts`) or under node_modules → opaque `{}` (Date, Map, DOM types, third-party classes). */\nfunction isLibrarySymbol(symbol: ts.Symbol, ctx: Context): boolean {\n const declarations = symbol.declarations ?? [];\n if (declarations.length === 0) return false;\n return declarations.every((d) => {\n const sf = d.getSourceFile();\n return ctx.program.isSourceFileDefaultLibrary(sf) || /[\\\\/]node_modules[\\\\/]/.test(sf.fileName);\n });\n}\n\nfunction literalValue(type: ts.Type, ctx: Context): unknown {\n if (type.flags & ts.TypeFlags.BooleanLiteral) return ctx.checker.typeToString(type) === \"true\";\n /* v8 ignore next 4 -- callers only pass literal types; the tail is the type-level fallback */\n if (type.isLiteral()) {\n const value = type.value;\n return typeof value === \"object\" ? Number(`${value.negative ? \"-\" : \"\"}${value.base10Value}`) : value;\n }\n return undefined;\n}\n\nfunction dedupeNodes(nodes: JsonSchemaNode[]): JsonSchemaNode[] {\n const seen = new Set<string>();\n const out: JsonSchemaNode[] = [];\n for (const n of nodes) {\n const key = JSON.stringify(n);\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(n);\n }\n return out;\n}\n","/**\n * generate.ts — one call from a state file to its `stateSchema`.\n */\n\nimport { loadStateFile, type LoadStateOptions } from \"./program.js\";\nimport { stateTypeToSchema, type JsonSchemaNode, type SchemaOptions } from \"./typeToSchema.js\";\n\nexport interface GenerateOptions extends LoadStateOptions, SchemaOptions {}\n\nexport interface GeneratedSchema {\n readonly schema: JsonSchemaNode;\n /** Non-fatal notes (e.g. the state type resolved to `any`). */\n readonly warnings: readonly string[];\n}\n\nexport function generateStateSchema(file: string, options: GenerateOptions = {}): GeneratedSchema {\n const loaded = loadStateFile(file, options);\n const schema = stateTypeToSchema(loaded.checker, loaded.program, loaded.type, loaded.location, options);\n return { schema, warnings: loaded.warnings };\n}\n","/**\n * manifest.ts — build / merge / compare the `application` sidecar artifact.\n *\n * The manifest is a **derived artifact** (D9): the TypeScript type is the source\n * of truth, `wcs-schema emit` writes the manifest, and `wcs-schema check`\n * detects drift between the two in CI.\n *\n * v2 (schemaVersion 2): the application namespace carries a **single**\n * `stateSchema` — one state tree per root, no name dimension\n * (docs/state-mount-design.md D15). A volume (`<wcs-state mount=\"path\">`)\n * contributes a **subtree**: `--mount=<path>` merges the module's schema under\n * that path inside the single `stateSchema`. `--merge` keeps everything else in\n * an existing manifest (filters, listContexts); a hand-written schema for the\n * same slot does not survive, by design: there is no implicit merge in the\n * sidecar spec (§5).\n */\n\nimport type { JsonSchemaNode } from \"./typeToSchema.js\";\n\nexport const APPLICATION_MANIFEST_FILENAME = \"wcstack.manifest.json\";\nexport const SCHEMA_VERSION = 2;\nexport const APPLICATION_NAMESPACE = \"wcstack.application\";\n\nexport interface ApplicationManifest {\n schemaVersion: number;\n kind: \"application\";\n manifestExtensions: {\n [APPLICATION_NAMESPACE]: {\n version: number;\n stateSchema?: JsonSchemaNode;\n [key: string]: unknown;\n };\n [namespace: string]: unknown;\n };\n [key: string]: unknown;\n}\n\n/**\n * Create the manifest object for the state tree, or graft into `existing`\n * (a parsed manifest object; envelope fields are normalized to v2 — a v1\n * manifest's `states` map does not survive, its replacement is exactly this\n * regeneration path).\n *\n * `mountPath === null` replaces the whole `stateSchema`; a mount path merges\n * the schema as a subtree at that path (intermediate object nodes are created).\n */\nexport function buildManifest(mountPath: string | null, schema: JsonSchemaNode, existing?: unknown): ApplicationManifest {\n const base: Record<string, unknown> =\n existing !== null && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n base.schemaVersion = SCHEMA_VERSION;\n base.kind = \"application\";\n const extensions =\n base.manifestExtensions !== null && typeof base.manifestExtensions === \"object\" && !Array.isArray(base.manifestExtensions)\n ? { ...(base.manifestExtensions as Record<string, unknown>) }\n : {};\n const nsRaw = extensions[APPLICATION_NAMESPACE];\n const ns: Record<string, unknown> =\n nsRaw !== null && typeof nsRaw === \"object\" && !Array.isArray(nsRaw) ? { ...(nsRaw as Record<string, unknown>) } : {};\n ns.version = SCHEMA_VERSION;\n // v1 leftovers: the name dimension is gone; regeneration does not carry it\n delete ns.states;\n if (mountPath === null) {\n ns.stateSchema = schema;\n } else {\n const rootRaw = ns.stateSchema;\n const root: Record<string, unknown> =\n rootRaw !== null && typeof rootRaw === \"object\" && !Array.isArray(rootRaw)\n ? { ...(rootRaw as Record<string, unknown>) }\n : { type: \"object\" };\n let node = root;\n const segments = mountPath.split(\".\");\n for (let i = 0; i < segments.length; i++) {\n const properties =\n node.properties !== null && typeof node.properties === \"object\" && !Array.isArray(node.properties)\n ? { ...(node.properties as Record<string, unknown>) }\n : {};\n node.properties = properties;\n if (i === segments.length - 1) {\n properties[segments[i]] = schema;\n break;\n }\n const childRaw = properties[segments[i]];\n const child: Record<string, unknown> =\n childRaw !== null && typeof childRaw === \"object\" && !Array.isArray(childRaw)\n ? { ...(childRaw as Record<string, unknown>) }\n : { type: \"object\" };\n properties[segments[i]] = child;\n node = child;\n }\n ns.stateSchema = root as unknown as JsonSchemaNode;\n }\n extensions[APPLICATION_NAMESPACE] = ns;\n base.manifestExtensions = extensions;\n return base as unknown as ApplicationManifest;\n}\n\n/** Read the single `stateSchema` from a parsed manifest object, or undefined. */\nexport function readStateSchema(manifest: unknown): unknown {\n if (manifest === null || typeof manifest !== \"object\") return undefined;\n const extensions = (manifest as Record<string, unknown>).manifestExtensions;\n if (extensions === null || typeof extensions !== \"object\") return undefined;\n const ns = (extensions as Record<string, unknown>)[APPLICATION_NAMESPACE];\n if (ns === null || typeof ns !== \"object\") return undefined;\n return (ns as Record<string, unknown>).stateSchema;\n}\n\n/**\n * True for a v1-shaped manifest (`schemaVersion: 1` or a `states` map in the\n * application namespace). `check` uses it to point at the regeneration path\n * instead of reporting a confusing \"missing stateSchema\".\n */\nexport function isV1Manifest(manifest: unknown): boolean {\n if (manifest === null || typeof manifest !== \"object\") return false;\n if ((manifest as Record<string, unknown>).schemaVersion === 1) return true;\n const extensions = (manifest as Record<string, unknown>).manifestExtensions;\n if (extensions === null || typeof extensions !== \"object\") return false;\n const ns = (extensions as Record<string, unknown>)[APPLICATION_NAMESPACE];\n if (ns === null || typeof ns !== \"object\") return false;\n return (ns as Record<string, unknown>).states !== undefined;\n}\n\n/** Navigate `properties` by mount-path segments; undefined when the subtree is absent. */\nfunction subtreeAt(schema: unknown, mountPath: string): unknown {\n let node: unknown = schema;\n for (const segment of mountPath.split(\".\")) {\n if (node === null || typeof node !== \"object\") return undefined;\n const properties = (node as Record<string, unknown>).properties;\n if (properties === null || typeof properties !== \"object\") return undefined;\n node = (properties as Record<string, unknown>)[segment];\n }\n return node;\n}\n\n/** JSON with object keys sorted at every level — the canonical form used for comparison. */\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortKeys(value));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n if (value !== null && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n out[key] = sortKeys((value as Record<string, unknown>)[key]);\n }\n return out;\n }\n return value;\n}\n\nexport type SchemaComparison =\n | { readonly kind: \"same\" }\n | { readonly kind: \"differs\"; readonly changes: readonly string[] }\n | { readonly kind: \"missing-state\" }\n | { readonly kind: \"v1-manifest\" }\n | { readonly kind: \"broken\"; readonly message: string };\n\n/**\n * Compare the schema generated from the type with the one stored in `manifestText`\n * (the whole tree, or the subtree at `mountPath`).\n * `changes` lists JSON pointers: `+ ptr` (only in generated), `- ptr` (only in\n * manifest), `~ ptr` (both, different value).\n */\nexport function compareStateSchema(manifestText: string, mountPath: string | null, generated: JsonSchemaNode): SchemaComparison {\n let parsed: unknown;\n try {\n parsed = JSON.parse(manifestText);\n } catch (e) {\n return { kind: \"broken\", message: (e as Error).message };\n }\n if (isV1Manifest(parsed)) return { kind: \"v1-manifest\" };\n let stored = readStateSchema(parsed);\n if (stored !== undefined && mountPath !== null) {\n stored = subtreeAt(stored, mountPath);\n }\n if (stored === undefined) return { kind: \"missing-state\" };\n if (stableStringify(stored) === stableStringify(generated)) return { kind: \"same\" };\n\n const a = flatten(generated);\n const b = flatten(stored);\n const changes: string[] = [];\n for (const key of [...new Set([...a.keys(), ...b.keys()])].sort()) {\n const inA = a.has(key);\n const inB = b.has(key);\n if (inA && !inB) changes.push(`+ ${key}`);\n else if (!inA && inB) changes.push(`- ${key}`);\n else if (a.get(key) !== b.get(key)) changes.push(`~ ${key}`);\n }\n return { kind: \"differs\", changes };\n}\n\n/** Leaf pointer → canonical JSON. Objects with children are not listed themselves; empty objects/arrays are leaves. */\nfunction flatten(value: unknown, pointer: string = \"\", out: Map<string, string> = new Map()): Map<string, string> {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n out.set(pointer || \"/\", \"{}\");\n return out;\n }\n for (const [key, child] of entries) {\n flatten(child, `${pointer}/${key.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")}`, out);\n }\n return out;\n }\n out.set(pointer || \"/\", stableStringify(value));\n return out;\n}\n","/**\n * schemaCore.ts — the validator core bundle (`dist/schema-core.cjs`, built from\n * packages/vscode-wcs by scripts/build-schema-core.mjs), loaded lazily.\n *\n * The bundle is a self-contained CJS file that requires neither `typescript` nor\n * `vscode`; it is located relative to the running module so the same loader\n * works from `dist/index.esm.js`, `dist/wcs-schema.mjs`, and the TypeScript\n * sources under vitest (`src/…` → `../dist`).\n */\n\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport interface WcsDiagnostic {\n readonly code: string;\n readonly start: number;\n readonly end: number;\n readonly message: string;\n readonly severity: \"error\" | \"warning\" | \"info\";\n}\n\nexport interface SchemaCore {\n validateManifestArtifact(artifact: { text: string; source: string }): WcsDiagnostic[];\n validateDocument(\n text: string,\n options?: {\n bindAttribute?: string;\n stateTagName?: string;\n locale?: string;\n fileReader?: (relativePath: string) => string | undefined;\n applicationStates?: ReadonlyMap<string, unknown>;\n },\n ): WcsDiagnostic[];\n ALLOWED_SCHEMA_KEYWORDS: ReadonlySet<string>;\n WcsDiagnosticCode: Readonly<Record<string, string>>;\n}\n\nconst BUNDLE = \"schema-core.cjs\";\n\n/** Candidate locations, nearest first: dist/ (built), ../dist (src/), ../../dist (src/cli/). */\nexport function schemaCoreCandidates(fromUrl: string = import.meta.url): string[] {\n const here = dirname(fileURLToPath(fromUrl));\n return [join(here, BUNDLE), join(here, \"..\", \"dist\", BUNDLE), join(here, \"..\", \"..\", \"dist\", BUNDLE)];\n}\n\nlet cached: SchemaCore | undefined;\n\nexport function loadSchemaCore(): SchemaCore {\n if (cached !== undefined) return cached;\n const candidates = schemaCoreCandidates();\n const found = candidates.find((p) => existsSync(p));\n /* v8 ignore next 5 -- tests run after `npm run build`, so the bundle is always present */\n if (found === undefined) {\n throw new Error(\n `${BUNDLE} not found — run \\`npm run build\\` in packages/typescript (looked in: ${candidates.join(\", \")})`,\n );\n }\n cached = createRequire(import.meta.url)(found) as SchemaCore;\n return cached;\n}\n","import pkg from \"../package.json\";\n\nexport const VERSION: string = pkg.version;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/program.ts","../../src/typeToSchema.ts","../../src/generate.ts","../../src/manifest.ts","../../src/schemaCore.ts","../../src/version.ts"],"sourcesContent":["/**\n * program.ts — open a state file with the TypeScript compiler API and locate the\n * type of its `export default`.\n *\n * `defineState(x)` is an identity function, so the exported type is `x`'s type —\n * but the call is unwrapped syntactically anyway: when `@wcstack/state` is not\n * resolvable from the state file (a CDN-only page, a fixture in a temp dir), the\n * call expression would type as `any` and every path would be lost, while the\n * argument literal still carries the full object type.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport ts from \"typescript\";\n\nexport interface LoadStateOptions {\n /** Explicit tsconfig.json path. Default: the nearest tsconfig.json above the state file, else built-in defaults. */\n readonly tsconfig?: string;\n}\n\nexport interface LoadedState {\n readonly program: ts.Program;\n readonly checker: ts.TypeChecker;\n readonly sourceFile: ts.SourceFile;\n /** The type of the default export (the `defineState(...)` argument when wrapped). */\n readonly type: ts.Type;\n /** Node to use as the location for `getTypeOfSymbolAtLocation`. */\n readonly location: ts.Node;\n /** Non-fatal notes for the caller (e.g. the state type resolved to `any`). */\n readonly warnings: readonly string[];\n /** A top-level spread brings in keys its type does not list: the state's schema is open (`{}`), whatever `type` says. */\n readonly open: boolean;\n}\n\n/** Defaults used when no tsconfig.json is found — enough to type a plain state file. */\nexport const DEFAULT_COMPILER_OPTIONS: ts.CompilerOptions = {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n lib: [\"lib.esnext.d.ts\", \"lib.dom.d.ts\", \"lib.dom.iterable.d.ts\"],\n strict: true,\n};\n\n/** The compiler API compares paths it attaches diagnostics to against `/`-separated ones; feed it those on Windows too. */\nfunction toPosix(path: string): string {\n return path.replace(/\\\\/g, \"/\");\n}\n\nexport function resolveCompilerOptions(stateFile: string, options: LoadStateOptions = {}): ts.CompilerOptions {\n const configPath = options.tsconfig !== undefined\n ? toPosix(resolve(options.tsconfig))\n : ts.findConfigFile(toPosix(dirname(stateFile)), ts.sys.fileExists, \"tsconfig.json\");\n let base: ts.CompilerOptions = { ...DEFAULT_COMPILER_OPTIONS };\n if (configPath !== undefined) {\n let parsedOptions: ts.CompilerOptions;\n try {\n const read = ts.readConfigFile(configPath, ts.sys.readFile);\n if (read.error !== undefined) {\n throw new Error(ts.flattenDiagnosticMessageText(read.error.messageText, \"\\n\"));\n }\n parsedOptions = ts.parseJsonConfigFileContent(read.config, ts.sys, toPosix(dirname(configPath)), undefined, configPath).options;\n } catch (e) {\n throw new Error(`cannot read ${configPath}: ${(e as Error).message}`);\n }\n base = { ...DEFAULT_COMPILER_OPTIONS, ...parsedOptions };\n }\n return {\n ...base,\n // The generator only reads types: never write, always accept JS (JSDoc types), keep it fast.\n noEmit: true,\n allowJs: true,\n checkJs: true,\n skipLibCheck: true,\n declaration: false,\n declarationMap: false,\n sourceMap: false,\n composite: false,\n incremental: false,\n tsBuildInfoFile: undefined,\n };\n}\n\n/** Unwrap `defineState(x)` (any callee whose last identifier is `defineState`) and `satisfies` / `as`-free wrappers. */\nfunction stateExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n if (ts.isCallExpression(current) && current.arguments.length > 0) {\n const callee = current.expression;\n const name = ts.isIdentifier(callee)\n ? callee.text\n : ts.isPropertyAccessExpression(callee)\n ? callee.name.text\n : undefined;\n if (name === \"defineState\") return current.arguments[0];\n }\n return current;\n}\n\nexport function loadStateFile(file: string, options: LoadStateOptions = {}): LoadedState {\n const abs = resolve(file);\n if (!existsSync(abs)) throw new Error(`cannot read ${file}: no such file`);\n // Read up front so an unreadable file fails with a plain message, not a compiler internals one.\n readFileSync(abs, \"utf8\");\n\n const compilerOptions = resolveCompilerOptions(abs, options);\n const program = ts.createProgram([abs], compilerOptions);\n const sourceFile = program.getSourceFile(abs);\n /* v8 ignore next -- the file exists and is a root name; the compiler always returns it */\n if (sourceFile === undefined) throw new Error(`cannot open ${file} as a TypeScript/JavaScript source`);\n\n const syntax = program.getSyntacticDiagnostics(sourceFile);\n if (syntax.length > 0) {\n const lines = syntax.map((d) => {\n // Syntactic diagnostics always carry their file and position; the fallback is type-level only.\n /* v8 ignore next 2 */\n const pos = d.file !== undefined && d.start !== undefined ? d.file.getLineAndCharacterOfPosition(d.start) : undefined;\n const where = pos !== undefined ? `${file}:${pos.line + 1}:${pos.character + 1}` : file;\n return `${where} ${ts.flattenDiagnosticMessageText(d.messageText, \"\\n\")}`;\n });\n throw new Error(`syntax error(s) in ${file}:\\n${lines.join(\"\\n\")}`);\n }\n\n const exportAssignment = sourceFile.statements.find(\n (s): s is ts.ExportAssignment => ts.isExportAssignment(s) && !s.isExportEquals,\n );\n if (exportAssignment === undefined) {\n throw new Error(`${file} has no \\`export default\\` — a wcstack state file exports its state object as the default export`);\n }\n\n const location = stateExpression(exportAssignment.expression);\n const checker = program.getTypeChecker();\n const warnings: string[] = [];\n // A spread whose type does not list its keys first: the type of the whole literal is not needed then (and is the\n // expensive one, below)\n const spread = openSpread(checker, sourceFile, location);\n if (spread !== null) {\n warnings.push(`the spread \\`${spread.text}\\` (${file}:${spread.line}) brings in keys its type does not list (\\`${spread.type}\\`); the generated stateSchema will be open ({}). Give that expression a type that lists them (a JSDoc @returns or @type)`);\n return { program, checker, sourceFile, type: checker.getAnyType(), location, warnings, open: true };\n }\n let type: ts.Type;\n try {\n type = checker.getTypeAtLocation(location);\n } catch (e) {\n /* v8 ignore next 2 -- the checker's own overflow, exercised against the built dist (stack.test.ts) */\n if (!(e instanceof RangeError)) throw e;\n throw new Error(`the TypeScript checker ran out of stack on ${file}: an \\`export default { … }\\` with a top-level spread makes it recurse once per getter that reads \\`this\\`. The wcs-schema command runs on a larger stack; from the API, call generateStateSchema() on a worker with a larger resourceLimits.stackSizeMb`);\n }\n if ((type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0) {\n warnings.push(`the default export of ${file} has type \\`${checker.typeToString(type)}\\`; the generated stateSchema will be open ({})`);\n }\n return { program, checker, sourceFile, type, location, warnings, open: false };\n}\n\n/**\n * A top-level spread of the state literal whose type does not list the keys it brings in — `any`, `unknown`, or an\n * index signature (`...sanitizeInputs({}).inputs` returning `Record<string, unknown>`). The compiler drops an\n * index signature from a spread, so the literal's type then lists only its own keys: a schema made from it would\n * call every key of the spread nonexistent (`wcs/path-nonexistent`, an error), where the validator knows nothing.\n * Found by an outside evaluation (a tax return draft whose 34 inputs come from such a spread).\n */\nfunction openSpread(checker: ts.TypeChecker, sourceFile: ts.SourceFile, location: ts.Expression): { text: string; line: number; type: string } | null {\n if (!ts.isObjectLiteralExpression(location)) return null;\n for (const property of location.properties) {\n if (!ts.isSpreadAssignment(property)) continue;\n const type = checker.getTypeAtLocation(property.expression);\n const open = (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0\n || (type.isUnion() ? type.types : [type]).some((t) => checker.getIndexInfosOfType(t).length > 0);\n if (!open) continue;\n return {\n text: property.getText(sourceFile),\n line: sourceFile.getLineAndCharacterOfPosition(property.getStart(sourceFile)).line + 1,\n type: checker.typeToString(type),\n };\n }\n return null;\n}\n","/**\n * typeToSchema.ts — TypeScript type → `stateSchema` (the JSON-Schema subset of\n * docs/wcstack-manifest-schema.md §4: type / properties / required / items /\n * enum / const / anyOf only).\n *\n * Rules (docs/app-testing-and-typescript-impl-plan.md §4-2-2):\n * - `$`-prefixed keys are dropped (runtime namespaces, never data paths).\n * - Members with call signatures (methods, function-valued properties) are dropped.\n * - Getters contribute their return type. Path getters (`get \"users.*.ageCategory\"()`)\n * are injected at the path they compute, so the validator sees them as members.\n * - Arrays → `items`; unions split `null` out into `anyOf`; literal unions → `enum`.\n * - Built-in / library object types (`Date`, `Map`, DOM types, …) become a **bare `{}`**\n * — never `{ \"type\": \"object\" }`: the validator treats a bare `{}` as *unknown*\n * (silent) and a typed object without the member as *nonexistent* (error).\n * - Nesting stops at `maxDepth` (default 5 = the validator's candidate budget) with a bare `{}`.\n * - An object type with an index signature (`{ [year: number]: Sale }`, `{ [key: string]: T }`) becomes a bare\n * `{}`: its keys are open, and the subset has no open-object form — a typed object would make every key\n * (`byYear.2024`) *nonexistent*.\n */\n\nimport ts from \"typescript\";\n\nexport interface JsonSchemaNode {\n type?: string;\n properties?: Record<string, JsonSchemaNode>;\n required?: string[];\n items?: JsonSchemaNode;\n enum?: unknown[];\n const?: unknown;\n anyOf?: JsonSchemaNode[];\n}\n\nexport const DEFAULT_MAX_DEPTH = 5;\n\nexport interface SchemaOptions {\n /** Object nesting depth at which a bare `{}` is emitted instead of descending. Default 5. */\n readonly maxDepth?: number;\n}\n\ninterface Context {\n readonly checker: ts.TypeChecker;\n readonly program: ts.Program;\n readonly location: ts.Node;\n readonly maxDepth: number;\n /** Object types currently being expanded (recursion guard). */\n readonly stack: Set<ts.Type>;\n /** Path getters found on the root object, injected after the tree is built. */\n readonly pathGetters: Array<{ segments: string[]; type: ts.Type }>;\n}\n\n/**\n * Convert the type of a state object into a `stateSchema` node.\n */\nexport function stateTypeToSchema(\n checker: ts.TypeChecker,\n program: ts.Program,\n type: ts.Type,\n location: ts.Node,\n options: SchemaOptions = {},\n): JsonSchemaNode {\n const ctx: Context = {\n checker,\n program,\n location,\n maxDepth: options.maxDepth ?? DEFAULT_MAX_DEPTH,\n stack: new Set(),\n pathGetters: [],\n };\n const root = convertType(type, 0, ctx, true);\n for (const getter of ctx.pathGetters) {\n injectPath(root, getter.segments, convertType(getter.type, getter.segments.length, ctx, false));\n }\n return root;\n}\n\nfunction convertType(type: ts.Type, depth: number, ctx: Context, isRoot: boolean): JsonSchemaNode {\n const flags = type.flags;\n if (flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.Never | ts.TypeFlags.TypeParameter | ts.TypeFlags.NonPrimitive)) {\n return {};\n }\n if (flags & ts.TypeFlags.Null) return { type: \"null\" };\n if (flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) return {};\n if (flags & ts.TypeFlags.Boolean) return { type: \"boolean\" };\n if (flags & ts.TypeFlags.BooleanLiteral) return { type: \"boolean\", const: literalValue(type, ctx) };\n if (flags & ts.TypeFlags.StringLiteral) return { type: \"string\", const: (type as ts.StringLiteralType).value };\n if (flags & ts.TypeFlags.NumberLiteral) return { type: \"number\", const: (type as ts.NumberLiteralType).value };\n if (flags & (ts.TypeFlags.BigInt | ts.TypeFlags.BigIntLiteral | ts.TypeFlags.ESSymbolLike)) return {};\n if (flags & ts.TypeFlags.String) return { type: \"string\" };\n if (flags & ts.TypeFlags.Number) return { type: \"number\" };\n if (type.isUnion()) return convertUnion(type, depth, ctx);\n\n if (ctx.checker.isArrayType(type) || ctx.checker.isTupleType(type)) {\n return convertArray(type as ts.TypeReference, depth, ctx);\n }\n\n const callable = type.getCallSignatures().length > 0 || type.getConstructSignatures().length > 0;\n if (callable && ctx.checker.getPropertiesOfType(type).length === 0) return {};\n\n const symbol = type.getSymbol() ?? type.aliasSymbol;\n if (symbol !== undefined && isLibrarySymbol(symbol, ctx)) return {};\n\n return convertObject(type, depth, ctx, isRoot);\n}\n\nfunction convertUnion(type: ts.UnionType, depth: number, ctx: Context): JsonSchemaNode {\n const members = type.types.filter((t) => (t.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) === 0);\n const hasNull = members.some((t) => (t.flags & ts.TypeFlags.Null) !== 0);\n const nonNull = members.filter((t) => (t.flags & ts.TypeFlags.Null) === 0);\n\n let node: JsonSchemaNode;\n if (nonNull.length === 0) {\n return { type: \"null\" };\n } else if (nonNull.every((t) => (t.flags & ts.TypeFlags.BooleanLiteral) !== 0) && nonNull.length === 2) {\n node = { type: \"boolean\" };\n } else if (nonNull.every((t) => t.isLiteral() || (t.flags & ts.TypeFlags.BooleanLiteral) !== 0)) {\n const values = nonNull.map((t) => literalValue(t, ctx));\n const kinds = [...new Set(values.map((v) => typeof v))];\n node = kinds.length === 1 && (kinds[0] === \"string\" || kinds[0] === \"number\" || kinds[0] === \"boolean\")\n ? { type: kinds[0], enum: values }\n : { enum: values };\n } else if (nonNull.length === 1) {\n node = convertType(nonNull[0], depth, ctx, false);\n } else {\n const converted = dedupeNodes(nonNull.map((t) => convertType(t, depth, ctx, false)));\n node = converted.length === 1 ? converted[0] : { anyOf: converted };\n }\n\n if (!hasNull) return node;\n if (node.type === \"null\") return node;\n return node.anyOf !== undefined ? { anyOf: [...node.anyOf, { type: \"null\" }] } : { anyOf: [node, { type: \"null\" }] };\n}\n\nfunction convertArray(type: ts.TypeReference, depth: number, ctx: Context): JsonSchemaNode {\n const args = ctx.checker.getTypeArguments(type);\n if (args.length === 0) return { type: \"array\", items: {} };\n if (ctx.checker.isTupleType(type)) {\n const converted = dedupeNodes(args.map((t) => convertType(t, depth, ctx, false)));\n return { type: \"array\", items: converted.length === 1 ? converted[0] : { anyOf: converted } };\n }\n return { type: \"array\", items: convertType(args[0], depth, ctx, false) };\n}\n\nfunction convertObject(type: ts.Type, depth: number, ctx: Context, isRoot: boolean): JsonSchemaNode {\n if (depth >= ctx.maxDepth) return {};\n if (ctx.stack.has(type)) return {};\n // Open keys (an index signature): unknown to the validator, not an object without members\n if (ctx.checker.getIndexInfosOfType(type).length > 0) return {};\n ctx.stack.add(type);\n try {\n const properties: Record<string, JsonSchemaNode> = {};\n const required: string[] = [];\n for (const prop of ctx.checker.getPropertiesOfType(type)) {\n const name = prop.getName();\n if (name.startsWith(\"$\")) continue;\n if (isMethodSymbol(prop)) continue;\n const propType = ctx.checker.getTypeOfSymbolAtLocation(prop, ctx.location);\n if (isFunctionValued(propType, ctx)) continue;\n if (isRoot && (name.includes(\".\") || name.includes(\"*\"))) {\n // A path getter declares a member at a nested position; inject it once the tree exists.\n ctx.pathGetters.push({ segments: name.split(\".\"), type: propType });\n continue;\n }\n properties[name] = convertType(propType, depth + 1, ctx, false);\n if (!isOptional(prop, propType)) required.push(name);\n }\n const node: JsonSchemaNode = { type: \"object\", properties };\n if (required.length > 0) node.required = required;\n return node;\n } finally {\n ctx.stack.delete(type);\n }\n}\n\n/** Walk `segments` (`*` = array items) into a definite object and add the leaf; unknown (`{}`) containers stay unknown. */\nfunction injectPath(root: JsonSchemaNode, segments: string[], leaf: JsonSchemaNode): void {\n const last = segments[segments.length - 1];\n if (last === \"*\" || last === \"\") return;\n let node: JsonSchemaNode | undefined = root;\n for (const segment of segments.slice(0, -1)) {\n node = segment === \"*\" ? node.items : descendObject(node)?.properties?.[segment];\n if (node === undefined) return;\n node = unwrapNullable(node);\n }\n const container = descendObject(node);\n if (container === undefined || container.properties === undefined) return;\n container.properties[last] = leaf;\n}\n\n/** For `anyOf: [object, null]` return the object member; otherwise the node itself. */\nfunction unwrapNullable(node: JsonSchemaNode): JsonSchemaNode {\n if (node.anyOf === undefined) return node;\n const objects = node.anyOf.filter((n) => n.properties !== undefined || n.items !== undefined);\n return objects.length === 1 ? objects[0] : node;\n}\n\nfunction descendObject(node: JsonSchemaNode | undefined): JsonSchemaNode | undefined {\n if (node === undefined) return undefined;\n const unwrapped = unwrapNullable(node);\n return unwrapped.properties !== undefined ? unwrapped : undefined;\n}\n\nfunction isMethodSymbol(symbol: ts.Symbol): boolean {\n if (symbol.flags & ts.SymbolFlags.Method) return true;\n return (symbol.declarations ?? []).some(\n (d) => ts.isMethodDeclaration(d) || ts.isMethodSignature(d) || ts.isFunctionDeclaration(d),\n );\n}\n\nfunction isFunctionValued(type: ts.Type, ctx: Context): boolean {\n const members = type.isUnion() ? type.types : [type];\n return members.some(\n (t) => t.getCallSignatures().length > 0 && ctx.checker.getPropertiesOfType(t).length === 0,\n );\n}\n\nfunction isOptional(symbol: ts.Symbol, type: ts.Type): boolean {\n if (symbol.flags & ts.SymbolFlags.Optional) return true;\n return type.isUnion() && type.types.some((t) => (t.flags & ts.TypeFlags.Undefined) !== 0);\n}\n\n/** Declared in a default lib (`lib.*.d.ts`) or under node_modules → opaque `{}` (Date, Map, DOM types, third-party classes). */\nfunction isLibrarySymbol(symbol: ts.Symbol, ctx: Context): boolean {\n const declarations = symbol.declarations ?? [];\n if (declarations.length === 0) return false;\n return declarations.every((d) => {\n const sf = d.getSourceFile();\n return ctx.program.isSourceFileDefaultLibrary(sf) || /[\\\\/]node_modules[\\\\/]/.test(sf.fileName);\n });\n}\n\nfunction literalValue(type: ts.Type, ctx: Context): unknown {\n if (type.flags & ts.TypeFlags.BooleanLiteral) return ctx.checker.typeToString(type) === \"true\";\n /* v8 ignore next 4 -- callers only pass literal types; the tail is the type-level fallback */\n if (type.isLiteral()) {\n const value = type.value;\n return typeof value === \"object\" ? Number(`${value.negative ? \"-\" : \"\"}${value.base10Value}`) : value;\n }\n return undefined;\n}\n\nfunction dedupeNodes(nodes: JsonSchemaNode[]): JsonSchemaNode[] {\n const seen = new Set<string>();\n const out: JsonSchemaNode[] = [];\n for (const n of nodes) {\n const key = JSON.stringify(n);\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(n);\n }\n return out;\n}\n","/**\n * generate.ts — one call from a state file to its `stateSchema`.\n */\n\nimport { loadStateFile, type LoadStateOptions } from \"./program.js\";\nimport { stateTypeToSchema, type JsonSchemaNode, type SchemaOptions } from \"./typeToSchema.js\";\n\nexport interface GenerateOptions extends LoadStateOptions, SchemaOptions {}\n\nexport interface GeneratedSchema {\n readonly schema: JsonSchemaNode;\n /** Non-fatal notes (e.g. the state type resolved to `any`). */\n readonly warnings: readonly string[];\n}\n\nexport function generateStateSchema(file: string, options: GenerateOptions = {}): GeneratedSchema {\n const loaded = loadStateFile(file, options);\n const schema = loaded.open ? {} : stateTypeToSchema(loaded.checker, loaded.program, loaded.type, loaded.location, options);\n return { schema, warnings: loaded.warnings };\n}\n","/**\n * manifest.ts — build / merge / compare the `application` sidecar artifact.\n *\n * The manifest is a **derived artifact** (D9): the TypeScript type is the source\n * of truth, `wcs-schema emit` writes the manifest, and `wcs-schema check`\n * detects drift between the two in CI.\n *\n * v2 (schemaVersion 2): the application namespace carries a **single**\n * `stateSchema` — one state tree per root, no name dimension\n * (docs/state-mount-design.md D15). A volume (`<wcs-state mount=\"path\">`)\n * contributes a **subtree**: `--mount=<path>` merges the module's schema under\n * that path inside the single `stateSchema`. `--merge` keeps everything else in\n * an existing manifest (filters, listContexts); a hand-written schema for the\n * same slot does not survive, by design: there is no implicit merge in the\n * sidecar spec (§5).\n */\n\nimport type { JsonSchemaNode } from \"./typeToSchema.js\";\n\nexport const APPLICATION_MANIFEST_FILENAME = \"wcstack.manifest.json\";\nexport const SCHEMA_VERSION = 2;\nexport const APPLICATION_NAMESPACE = \"wcstack.application\";\n\nexport interface ApplicationManifest {\n schemaVersion: number;\n kind: \"application\";\n manifestExtensions: {\n [APPLICATION_NAMESPACE]: {\n version: number;\n stateSchema?: JsonSchemaNode;\n [key: string]: unknown;\n };\n [namespace: string]: unknown;\n };\n [key: string]: unknown;\n}\n\n/**\n * Create the manifest object for the state tree, or graft into `existing`\n * (a parsed manifest object; envelope fields are normalized to v2 — a v1\n * manifest's `states` map does not survive, its replacement is exactly this\n * regeneration path).\n *\n * `mountPath === null` replaces the whole `stateSchema`; a mount path merges\n * the schema as a subtree at that path (intermediate object nodes are created).\n */\nexport function buildManifest(mountPath: string | null, schema: JsonSchemaNode, existing?: unknown): ApplicationManifest {\n const base: Record<string, unknown> =\n existing !== null && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n base.schemaVersion = SCHEMA_VERSION;\n base.kind = \"application\";\n const extensions =\n base.manifestExtensions !== null && typeof base.manifestExtensions === \"object\" && !Array.isArray(base.manifestExtensions)\n ? { ...(base.manifestExtensions as Record<string, unknown>) }\n : {};\n const nsRaw = extensions[APPLICATION_NAMESPACE];\n const ns: Record<string, unknown> =\n nsRaw !== null && typeof nsRaw === \"object\" && !Array.isArray(nsRaw) ? { ...(nsRaw as Record<string, unknown>) } : {};\n ns.version = SCHEMA_VERSION;\n // v1 leftovers: the name dimension is gone; regeneration does not carry it\n delete ns.states;\n if (mountPath === null) {\n ns.stateSchema = schema;\n } else {\n const rootRaw = ns.stateSchema;\n const root: Record<string, unknown> =\n rootRaw !== null && typeof rootRaw === \"object\" && !Array.isArray(rootRaw)\n ? { ...(rootRaw as Record<string, unknown>) }\n : { type: \"object\" };\n let node = root;\n const segments = mountPath.split(\".\");\n for (let i = 0; i < segments.length; i++) {\n const properties =\n node.properties !== null && typeof node.properties === \"object\" && !Array.isArray(node.properties)\n ? { ...(node.properties as Record<string, unknown>) }\n : {};\n node.properties = properties;\n if (i === segments.length - 1) {\n properties[segments[i]] = schema;\n break;\n }\n const childRaw = properties[segments[i]];\n const child: Record<string, unknown> =\n childRaw !== null && typeof childRaw === \"object\" && !Array.isArray(childRaw)\n ? { ...(childRaw as Record<string, unknown>) }\n : { type: \"object\" };\n properties[segments[i]] = child;\n node = child;\n }\n ns.stateSchema = root as unknown as JsonSchemaNode;\n }\n extensions[APPLICATION_NAMESPACE] = ns;\n base.manifestExtensions = extensions;\n return base as unknown as ApplicationManifest;\n}\n\n/** Read the single `stateSchema` from a parsed manifest object, or undefined. */\nexport function readStateSchema(manifest: unknown): unknown {\n if (manifest === null || typeof manifest !== \"object\") return undefined;\n const extensions = (manifest as Record<string, unknown>).manifestExtensions;\n if (extensions === null || typeof extensions !== \"object\") return undefined;\n const ns = (extensions as Record<string, unknown>)[APPLICATION_NAMESPACE];\n if (ns === null || typeof ns !== \"object\") return undefined;\n return (ns as Record<string, unknown>).stateSchema;\n}\n\n/**\n * True for a v1-shaped manifest (`schemaVersion: 1` or a `states` map in the\n * application namespace). `check` uses it to point at the regeneration path\n * instead of reporting a confusing \"missing stateSchema\".\n */\nexport function isV1Manifest(manifest: unknown): boolean {\n if (manifest === null || typeof manifest !== \"object\") return false;\n if ((manifest as Record<string, unknown>).schemaVersion === 1) return true;\n const extensions = (manifest as Record<string, unknown>).manifestExtensions;\n if (extensions === null || typeof extensions !== \"object\") return false;\n const ns = (extensions as Record<string, unknown>)[APPLICATION_NAMESPACE];\n if (ns === null || typeof ns !== \"object\") return false;\n return (ns as Record<string, unknown>).states !== undefined;\n}\n\n/** Navigate `properties` by mount-path segments; undefined when the subtree is absent. */\nfunction subtreeAt(schema: unknown, mountPath: string): unknown {\n let node: unknown = schema;\n for (const segment of mountPath.split(\".\")) {\n if (node === null || typeof node !== \"object\") return undefined;\n const properties = (node as Record<string, unknown>).properties;\n if (properties === null || typeof properties !== \"object\") return undefined;\n node = (properties as Record<string, unknown>)[segment];\n }\n return node;\n}\n\n/** JSON with object keys sorted at every level — the canonical form used for comparison. */\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortKeys(value));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n if (value !== null && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n out[key] = sortKeys((value as Record<string, unknown>)[key]);\n }\n return out;\n }\n return value;\n}\n\nexport type SchemaComparison =\n | { readonly kind: \"same\" }\n | { readonly kind: \"differs\"; readonly changes: readonly string[] }\n | { readonly kind: \"missing-state\" }\n | { readonly kind: \"v1-manifest\" }\n | { readonly kind: \"broken\"; readonly message: string };\n\n/**\n * Compare the schema generated from the type with the one stored in `manifestText`\n * (the whole tree, or the subtree at `mountPath`).\n * `changes` lists JSON pointers: `+ ptr` (only in generated), `- ptr` (only in\n * manifest), `~ ptr` (both, different value).\n */\nexport function compareStateSchema(manifestText: string, mountPath: string | null, generated: JsonSchemaNode): SchemaComparison {\n let parsed: unknown;\n try {\n parsed = JSON.parse(manifestText);\n } catch (e) {\n return { kind: \"broken\", message: (e as Error).message };\n }\n if (isV1Manifest(parsed)) return { kind: \"v1-manifest\" };\n let stored = readStateSchema(parsed);\n if (stored !== undefined && mountPath !== null) {\n stored = subtreeAt(stored, mountPath);\n }\n if (stored === undefined) return { kind: \"missing-state\" };\n if (stableStringify(stored) === stableStringify(generated)) return { kind: \"same\" };\n\n const a = flatten(generated);\n const b = flatten(stored);\n const changes: string[] = [];\n for (const key of [...new Set([...a.keys(), ...b.keys()])].sort()) {\n const inA = a.has(key);\n const inB = b.has(key);\n if (inA && !inB) changes.push(`+ ${key}`);\n else if (!inA && inB) changes.push(`- ${key}`);\n else if (a.get(key) !== b.get(key)) changes.push(`~ ${key}`);\n }\n return { kind: \"differs\", changes };\n}\n\n/** Leaf pointer → canonical JSON. Objects with children are not listed themselves; empty objects/arrays are leaves. */\nfunction flatten(value: unknown, pointer: string = \"\", out: Map<string, string> = new Map()): Map<string, string> {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n out.set(pointer || \"/\", \"{}\");\n return out;\n }\n for (const [key, child] of entries) {\n flatten(child, `${pointer}/${key.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")}`, out);\n }\n return out;\n }\n out.set(pointer || \"/\", stableStringify(value));\n return out;\n}\n","/**\n * schemaCore.ts — the validator core bundle (`dist/schema-core.cjs`, built from\n * packages/vscode-wcs by scripts/build-schema-core.mjs), loaded lazily.\n *\n * The bundle is a self-contained CJS file that requires neither `typescript` nor\n * `vscode`; it is located relative to the running module so the same loader\n * works from `dist/index.esm.js`, `dist/wcs-schema.mjs`, and the TypeScript\n * sources under vitest (`src/…` → `../dist`).\n */\n\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport interface WcsDiagnostic {\n readonly code: string;\n readonly start: number;\n readonly end: number;\n readonly message: string;\n readonly severity: \"error\" | \"warning\" | \"info\";\n}\n\nexport interface SchemaCore {\n validateManifestArtifact(artifact: { text: string; source: string }): WcsDiagnostic[];\n validateDocument(\n text: string,\n options?: {\n bindAttribute?: string;\n stateTagName?: string;\n locale?: string;\n fileReader?: (relativePath: string) => string | undefined;\n applicationStates?: ReadonlyMap<string, unknown>;\n },\n ): WcsDiagnostic[];\n ALLOWED_SCHEMA_KEYWORDS: ReadonlySet<string>;\n WcsDiagnosticCode: Readonly<Record<string, string>>;\n}\n\nconst BUNDLE = \"schema-core.cjs\";\n\n/** Candidate locations, nearest first: dist/ (built), ../dist (src/), ../../dist (src/cli/). */\nexport function schemaCoreCandidates(fromUrl: string = import.meta.url): string[] {\n const here = dirname(fileURLToPath(fromUrl));\n return [join(here, BUNDLE), join(here, \"..\", \"dist\", BUNDLE), join(here, \"..\", \"..\", \"dist\", BUNDLE)];\n}\n\nlet cached: SchemaCore | undefined;\n\nexport function loadSchemaCore(): SchemaCore {\n if (cached !== undefined) return cached;\n const candidates = schemaCoreCandidates();\n const found = candidates.find((p) => existsSync(p));\n /* v8 ignore next 5 -- tests run after `npm run build`, so the bundle is always present */\n if (found === undefined) {\n throw new Error(\n `${BUNDLE} not found — run \\`npm run build\\` in packages/typescript (looked in: ${candidates.join(\", \")})`,\n );\n }\n cached = createRequire(import.meta.url)(found) as SchemaCore;\n return cached;\n}\n","import pkg from \"../package.json\";\n\nexport const VERSION: string = pkg.version;\n"],"names":[],"mappings":"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"}