@kubb/ast 5.0.0-beta.76 → 5.0.0-beta.77
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/dist/{defineMacro-Zagno12u.js → defineMacro-CqX4m8Dq.js} +2 -2
- package/dist/{defineMacro-Zagno12u.js.map → defineMacro-CqX4m8Dq.js.map} +1 -1
- package/dist/{defineMacro-C58x6uaa.cjs → defineMacro-DmGR7vfu.cjs} +2 -2
- package/dist/{defineMacro-C58x6uaa.cjs.map → defineMacro-DmGR7vfu.cjs.map} +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +2 -2
- package/dist/macros.cjs +3 -3
- package/dist/macros.js +3 -3
- package/dist/{refs-DhraOHHv.cjs → refs-DNNvJ7jg.cjs} +2 -2
- package/dist/{refs-DhraOHHv.cjs.map → refs-DNNvJ7jg.cjs.map} +1 -1
- package/dist/{refs-DliAPaUa.js → refs-xm4Vltrw.js} +2 -2
- package/dist/{refs-DliAPaUa.js.map → refs-xm4Vltrw.js.map} +1 -1
- package/dist/utils.cjs +2 -2
- package/dist/utils.js +2 -2
- package/dist/{visitor-Ns-njjbG.js → visitor-Dk0DNLfC.js} +69 -49
- package/dist/visitor-Dk0DNLfC.js.map +1 -0
- package/dist/{visitor-CDa9Cn6x.cjs → visitor-h6dEM3vR.cjs} +69 -49
- package/dist/visitor-h6dEM3vR.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/visitor-CDa9Cn6x.cjs.map +0 -1
- package/dist/visitor-Ns-njjbG.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./rolldown-runtime-CNktS9qV.js";
|
|
2
|
-
import { X as visitorKeys, r as transform } from "./visitor-
|
|
2
|
+
import { X as visitorKeys, r as transform } from "./visitor-Dk0DNLfC.js";
|
|
3
3
|
//#region src/defineMacro.ts
|
|
4
4
|
/**
|
|
5
5
|
* Sort weight for an `enforce` hint. `pre` sorts before unmarked items and `post` after, so a plain
|
|
@@ -95,4 +95,4 @@ function applyMacros(root, macros, options) {
|
|
|
95
95
|
//#endregion
|
|
96
96
|
export { composeMacros as n, defineMacro as r, applyMacros as t };
|
|
97
97
|
|
|
98
|
-
//# sourceMappingURL=defineMacro-
|
|
98
|
+
//# sourceMappingURL=defineMacro-CqX4m8Dq.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineMacro-
|
|
1
|
+
{"version":3,"file":"defineMacro-CqX4m8Dq.js","names":[],"sources":["../src/defineMacro.ts"],"sourcesContent":["import type { VisitorDepth } from './constants.ts'\nimport type { VisitorKey } from './defineNode.ts'\nimport { visitorKeys } from './defineNode.ts'\nimport type { Node } from './nodes/index.ts'\nimport type { Visitor, VisitorContext } from './visitor.ts'\nimport { transform } from './visitor.ts'\n\n/**\n * Ordering hint shared by macros and plugins. `pre` runs before unmarked items, `post` after,\n * and `undefined` keeps declaration order.\n */\nexport type Enforce = 'pre' | 'post'\n\n/**\n * Sort weight for an `enforce` hint. `pre` sorts before unmarked items and `post` after, so a plain\n * list keeps its authored order.\n */\nfunction enforceWeight(enforce?: Enforce): number {\n if (enforce === 'pre') return 0\n if (enforce === 'post') return 2\n return 1\n}\n\n/**\n * A named, composable transform over the Kubb AST. It carries the same per-kind callbacks as a\n * {@link Visitor} (`schema`, `operation`, …), plus a `name`, an optional `enforce` order, and an\n * optional `when` gate. Macros run on the shared AST, so the same macro works across every adapter\n * and output target. Exports follow the `macro<Name>` convention, mirroring plugins (`pluginTs`).\n */\nexport type Macro = Visitor & {\n /**\n * Macro identifier used to tell macros apart, for example `'simplify-union'`.\n */\n name: string\n /**\n * Ordering hint. `pre` macros run before unmarked macros, `post` macros run after.\n * Ordering within a bucket follows list order.\n */\n enforce?: Enforce\n /**\n * Gate checked against the current node before any callback runs. When it returns `false`\n * the macro is skipped for that node.\n */\n when?: (node: Node) => boolean\n}\n\n/**\n * Types a macro for inference and a single construction site, mirroring `definePlugin`.\n * Adds no runtime behavior.\n *\n * @example\n * ```ts\n * const macroUntagged = defineMacro({\n * name: 'untagged',\n * operation(node) {\n * return node.tags?.length ? undefined : { ...node, tags: ['untagged'] }\n * },\n * })\n * ```\n */\nexport function defineMacro(macro: Macro): Macro {\n return macro\n}\n\ntype MacroCallback = (node: Node, context: VisitorContext) => Node | null | undefined\n\ntype ChainProps = {\n macros: ReadonlyArray<Macro>\n key: VisitorKey\n node: Node\n context: VisitorContext\n}\n\n/**\n * Runs every macro's callback for one node kind in order, chaining the result so each macro sees\n * the previous macro's output. Returns `undefined` when nothing changed, so `transform` keeps the\n * original reference (structural sharing).\n */\nfunction chain({ macros, key, node, context }: ChainProps): Node | undefined {\n let current = node\n\n for (const macro of macros) {\n const callback = macro[key] as MacroCallback | undefined\n if (!callback) continue\n if (macro.when && !macro.when(current)) continue\n\n const next = callback(current, context)\n if (next != null) current = next\n }\n\n return current === node ? undefined : current\n}\n\n/**\n * Folds an ordered list of macros into a single {@link Visitor} that `transform` (and the per-plugin\n * transform layer in `@kubb/core`) can run. Macros are stable-sorted by `enforce`, then applied\n * sequentially per node so later macros see earlier output. This differs from a plain visitor, which\n * has no names, ordering, or composition.\n *\n * @example\n * ```ts\n * const visitor = composeMacros([macroSimplifyUnion, macroDiscriminatorEnum])\n * const next = transform(root, visitor)\n * ```\n */\nexport function composeMacros(macros: ReadonlyArray<Macro>): Visitor {\n const ordered = [...macros].sort((a, b) => enforceWeight(a.enforce) - enforceWeight(b.enforce))\n\n const visitor: Visitor = {}\n for (const key of visitorKeys) {\n if (!ordered.some((macro) => typeof macro[key] === 'function')) continue\n\n const callback = (node: Node, context: VisitorContext) => chain({ macros: ordered, key, node, context })\n ;(visitor as Record<VisitorKey, MacroCallback>)[key] = callback\n }\n\n return visitor\n}\n\n/**\n * Runs a list of macros over a node tree and returns the rewritten tree. Keeps `transform`'s\n * structural sharing, so an empty or no-op macro list returns the same reference. Pass\n * `depth: 'shallow'` to rewrite the root node only.\n *\n * @example\n * ```ts\n * const next = applyMacros(root, [macroIntegerToString])\n * ```\n *\n * @example Apply to the root node only\n * ```ts\n * const named = applyMacros(node, [macroEnumName({ parentName, propName, enumSuffix })], { depth: 'shallow' })\n * ```\n */\nexport function applyMacros<TNode extends Node>(root: TNode, macros: ReadonlyArray<Macro>, options?: { depth?: VisitorDepth }): TNode {\n if (macros.length === 0) return root\n\n return transform(root, { ...composeMacros(macros), ...options }) as TNode\n}\n"],"mappings":";;;;;;;AAiBA,SAAS,cAAc,SAA2B;CAChD,IAAI,YAAY,OAAO,OAAO;CAC9B,IAAI,YAAY,QAAQ,OAAO;CAC/B,OAAO;AACT;;;;;;;;;;;;;;;AAuCA,SAAgB,YAAY,OAAqB;CAC/C,OAAO;AACT;;;;;;AAgBA,SAAS,MAAM,EAAE,QAAQ,KAAK,MAAM,WAAyC;CAC3E,IAAI,UAAU;CAEd,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,WAAW,MAAM;EACvB,IAAI,CAAC,UAAU;EACf,IAAI,MAAM,QAAQ,CAAC,MAAM,KAAK,OAAO,GAAG;EAExC,MAAM,OAAO,SAAS,SAAS,OAAO;EACtC,IAAI,QAAQ,MAAM,UAAU;CAC9B;CAEA,OAAO,YAAY,OAAO,KAAA,IAAY;AACxC;;;;;;;;;;;;;AAcA,SAAgB,cAAc,QAAuC;CACnE,MAAM,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,cAAc,EAAE,OAAO,IAAI,cAAc,EAAE,OAAO,CAAC;CAE9F,MAAM,UAAmB,CAAC;CAC1B,KAAK,MAAM,OAAO,aAAa;EAC7B,IAAI,CAAC,QAAQ,MAAM,UAAU,OAAO,MAAM,SAAS,UAAU,GAAG;EAEhE,MAAM,YAAY,MAAY,YAA4B,MAAM;GAAE,QAAQ;GAAS;GAAK;GAAM;EAAQ,CAAC;EACtG,QAA+C,OAAO;CACzD;CAEA,OAAO;AACT;;;;;;;;;;;;;;;;AAiBA,SAAgB,YAAgC,MAAa,QAA8B,SAA2C;CACpI,IAAI,OAAO,WAAW,GAAG,OAAO;CAEhC,OAAO,UAAU,MAAM;EAAE,GAAG,cAAc,MAAM;EAAG,GAAG;CAAQ,CAAC;AACjE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_visitor = require("./visitor-
|
|
1
|
+
const require_visitor = require("./visitor-h6dEM3vR.cjs");
|
|
2
2
|
//#region src/defineMacro.ts
|
|
3
3
|
/**
|
|
4
4
|
* Sort weight for an `enforce` hint. `pre` sorts before unmarked items and `post` after, so a plain
|
|
@@ -111,4 +111,4 @@ Object.defineProperty(exports, "defineMacro", {
|
|
|
111
111
|
}
|
|
112
112
|
});
|
|
113
113
|
|
|
114
|
-
//# sourceMappingURL=defineMacro-
|
|
114
|
+
//# sourceMappingURL=defineMacro-DmGR7vfu.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineMacro-
|
|
1
|
+
{"version":3,"file":"defineMacro-DmGR7vfu.cjs","names":["visitorKeys","transform"],"sources":["../src/defineMacro.ts"],"sourcesContent":["import type { VisitorDepth } from './constants.ts'\nimport type { VisitorKey } from './defineNode.ts'\nimport { visitorKeys } from './defineNode.ts'\nimport type { Node } from './nodes/index.ts'\nimport type { Visitor, VisitorContext } from './visitor.ts'\nimport { transform } from './visitor.ts'\n\n/**\n * Ordering hint shared by macros and plugins. `pre` runs before unmarked items, `post` after,\n * and `undefined` keeps declaration order.\n */\nexport type Enforce = 'pre' | 'post'\n\n/**\n * Sort weight for an `enforce` hint. `pre` sorts before unmarked items and `post` after, so a plain\n * list keeps its authored order.\n */\nfunction enforceWeight(enforce?: Enforce): number {\n if (enforce === 'pre') return 0\n if (enforce === 'post') return 2\n return 1\n}\n\n/**\n * A named, composable transform over the Kubb AST. It carries the same per-kind callbacks as a\n * {@link Visitor} (`schema`, `operation`, …), plus a `name`, an optional `enforce` order, and an\n * optional `when` gate. Macros run on the shared AST, so the same macro works across every adapter\n * and output target. Exports follow the `macro<Name>` convention, mirroring plugins (`pluginTs`).\n */\nexport type Macro = Visitor & {\n /**\n * Macro identifier used to tell macros apart, for example `'simplify-union'`.\n */\n name: string\n /**\n * Ordering hint. `pre` macros run before unmarked macros, `post` macros run after.\n * Ordering within a bucket follows list order.\n */\n enforce?: Enforce\n /**\n * Gate checked against the current node before any callback runs. When it returns `false`\n * the macro is skipped for that node.\n */\n when?: (node: Node) => boolean\n}\n\n/**\n * Types a macro for inference and a single construction site, mirroring `definePlugin`.\n * Adds no runtime behavior.\n *\n * @example\n * ```ts\n * const macroUntagged = defineMacro({\n * name: 'untagged',\n * operation(node) {\n * return node.tags?.length ? undefined : { ...node, tags: ['untagged'] }\n * },\n * })\n * ```\n */\nexport function defineMacro(macro: Macro): Macro {\n return macro\n}\n\ntype MacroCallback = (node: Node, context: VisitorContext) => Node | null | undefined\n\ntype ChainProps = {\n macros: ReadonlyArray<Macro>\n key: VisitorKey\n node: Node\n context: VisitorContext\n}\n\n/**\n * Runs every macro's callback for one node kind in order, chaining the result so each macro sees\n * the previous macro's output. Returns `undefined` when nothing changed, so `transform` keeps the\n * original reference (structural sharing).\n */\nfunction chain({ macros, key, node, context }: ChainProps): Node | undefined {\n let current = node\n\n for (const macro of macros) {\n const callback = macro[key] as MacroCallback | undefined\n if (!callback) continue\n if (macro.when && !macro.when(current)) continue\n\n const next = callback(current, context)\n if (next != null) current = next\n }\n\n return current === node ? undefined : current\n}\n\n/**\n * Folds an ordered list of macros into a single {@link Visitor} that `transform` (and the per-plugin\n * transform layer in `@kubb/core`) can run. Macros are stable-sorted by `enforce`, then applied\n * sequentially per node so later macros see earlier output. This differs from a plain visitor, which\n * has no names, ordering, or composition.\n *\n * @example\n * ```ts\n * const visitor = composeMacros([macroSimplifyUnion, macroDiscriminatorEnum])\n * const next = transform(root, visitor)\n * ```\n */\nexport function composeMacros(macros: ReadonlyArray<Macro>): Visitor {\n const ordered = [...macros].sort((a, b) => enforceWeight(a.enforce) - enforceWeight(b.enforce))\n\n const visitor: Visitor = {}\n for (const key of visitorKeys) {\n if (!ordered.some((macro) => typeof macro[key] === 'function')) continue\n\n const callback = (node: Node, context: VisitorContext) => chain({ macros: ordered, key, node, context })\n ;(visitor as Record<VisitorKey, MacroCallback>)[key] = callback\n }\n\n return visitor\n}\n\n/**\n * Runs a list of macros over a node tree and returns the rewritten tree. Keeps `transform`'s\n * structural sharing, so an empty or no-op macro list returns the same reference. Pass\n * `depth: 'shallow'` to rewrite the root node only.\n *\n * @example\n * ```ts\n * const next = applyMacros(root, [macroIntegerToString])\n * ```\n *\n * @example Apply to the root node only\n * ```ts\n * const named = applyMacros(node, [macroEnumName({ parentName, propName, enumSuffix })], { depth: 'shallow' })\n * ```\n */\nexport function applyMacros<TNode extends Node>(root: TNode, macros: ReadonlyArray<Macro>, options?: { depth?: VisitorDepth }): TNode {\n if (macros.length === 0) return root\n\n return transform(root, { ...composeMacros(macros), ...options }) as TNode\n}\n"],"mappings":";;;;;;AAiBA,SAAS,cAAc,SAA2B;CAChD,IAAI,YAAY,OAAO,OAAO;CAC9B,IAAI,YAAY,QAAQ,OAAO;CAC/B,OAAO;AACT;;;;;;;;;;;;;;;AAuCA,SAAgB,YAAY,OAAqB;CAC/C,OAAO;AACT;;;;;;AAgBA,SAAS,MAAM,EAAE,QAAQ,KAAK,MAAM,WAAyC;CAC3E,IAAI,UAAU;CAEd,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,WAAW,MAAM;EACvB,IAAI,CAAC,UAAU;EACf,IAAI,MAAM,QAAQ,CAAC,MAAM,KAAK,OAAO,GAAG;EAExC,MAAM,OAAO,SAAS,SAAS,OAAO;EACtC,IAAI,QAAQ,MAAM,UAAU;CAC9B;CAEA,OAAO,YAAY,OAAO,KAAA,IAAY;AACxC;;;;;;;;;;;;;AAcA,SAAgB,cAAc,QAAuC;CACnE,MAAM,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,cAAc,EAAE,OAAO,IAAI,cAAc,EAAE,OAAO,CAAC;CAE9F,MAAM,UAAmB,CAAC;CAC1B,KAAK,MAAM,OAAOA,gBAAAA,aAAa;EAC7B,IAAI,CAAC,QAAQ,MAAM,UAAU,OAAO,MAAM,SAAS,UAAU,GAAG;EAEhE,MAAM,YAAY,MAAY,YAA4B,MAAM;GAAE,QAAQ;GAAS;GAAK;GAAM;EAAQ,CAAC;EACtG,QAA+C,OAAO;CACzD;CAEA,OAAO;AACT;;;;;;;;;;;;;;;;AAiBA,SAAgB,YAAgC,MAAa,QAA8B,SAA2C;CACpI,IAAI,OAAO,WAAW,GAAG,OAAO;CAEhC,OAAOC,gBAAAA,UAAU,MAAM;EAAE,GAAG,cAAc,MAAM;EAAG,GAAG;CAAQ,CAAC;AACjE"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_visitor = require("./visitor-
|
|
3
|
-
const require_defineMacro = require("./defineMacro-
|
|
2
|
+
const require_visitor = require("./visitor-h6dEM3vR.cjs");
|
|
3
|
+
const require_defineMacro = require("./defineMacro-DmGR7vfu.cjs");
|
|
4
4
|
//#region src/defineDialect.ts
|
|
5
5
|
/**
|
|
6
6
|
* Types a {@link Dialect} for an adapter. Adds no runtime behavior and only pins the
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-CNktS9qV.js";
|
|
2
|
-
import { $ as schemaTypes, A as sourceDef, B as createConst, C as createExport, D as exportDef, E as createSource, F as arrowFunctionDef, G as functionDef, H as createJsx, I as breakDef, J as typeDef, K as jsxDef, L as constDef, N as contentDef, O as fileDef, P as createContent, Q as narrowSchema, R as createArrowFunction, S as inputDef, T as createImport, U as createText, V as createFunction, W as createType, Y as defineNode, Z as isHttpOperationNode, _ as createOperation, a as nodeDefs, b as requestBodyDef, c as createResponse, d as propertyDef, f as createParameter, g as outputDef, h as createOutput, i as walk, k as importDef, l as responseDef, m as optionality, o as createSchema, p as parameterDef, q as textDef, r as transform, s as schemaDef, t as collect, u as createProperty, v as operationDef, w as createFile, x as createInput, y as createRequestBody, z as createBreak } from "./visitor-
|
|
3
|
-
import { n as composeMacros, r as defineMacro, t as applyMacros } from "./defineMacro-
|
|
2
|
+
import { $ as schemaTypes, A as sourceDef, B as createConst, C as createExport, D as exportDef, E as createSource, F as arrowFunctionDef, G as functionDef, H as createJsx, I as breakDef, J as typeDef, K as jsxDef, L as constDef, N as contentDef, O as fileDef, P as createContent, Q as narrowSchema, R as createArrowFunction, S as inputDef, T as createImport, U as createText, V as createFunction, W as createType, Y as defineNode, Z as isHttpOperationNode, _ as createOperation, a as nodeDefs, b as requestBodyDef, c as createResponse, d as propertyDef, f as createParameter, g as outputDef, h as createOutput, i as walk, k as importDef, l as responseDef, m as optionality, o as createSchema, p as parameterDef, q as textDef, r as transform, s as schemaDef, t as collect, u as createProperty, v as operationDef, w as createFile, x as createInput, y as createRequestBody, z as createBreak } from "./visitor-Dk0DNLfC.js";
|
|
3
|
+
import { n as composeMacros, r as defineMacro, t as applyMacros } from "./defineMacro-CqX4m8Dq.js";
|
|
4
4
|
//#region src/defineDialect.ts
|
|
5
5
|
/**
|
|
6
6
|
* Types a {@link Dialect} for an adapter. Adds no runtime behavior and only pins the
|
package/dist/macros.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_visitor = require("./visitor-
|
|
3
|
-
const require_defineMacro = require("./defineMacro-
|
|
4
|
-
const require_refs = require("./refs-
|
|
2
|
+
const require_visitor = require("./visitor-h6dEM3vR.cjs");
|
|
3
|
+
const require_defineMacro = require("./defineMacro-DmGR7vfu.cjs");
|
|
4
|
+
const require_refs = require("./refs-DNNvJ7jg.cjs");
|
|
5
5
|
//#region src/macros/macroDiscriminatorEnum.ts
|
|
6
6
|
/**
|
|
7
7
|
* Builds a macro that replaces a discriminator property's schema with a string enum of the given
|
package/dist/macros.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./rolldown-runtime-CNktS9qV.js";
|
|
2
|
-
import { Q as narrowSchema, o as createSchema, u as createProperty } from "./visitor-
|
|
3
|
-
import { r as defineMacro } from "./defineMacro-
|
|
4
|
-
import { n as enumPropName } from "./refs-
|
|
2
|
+
import { Q as narrowSchema, o as createSchema, u as createProperty } from "./visitor-Dk0DNLfC.js";
|
|
3
|
+
import { r as defineMacro } from "./defineMacro-CqX4m8Dq.js";
|
|
4
|
+
import { n as enumPropName } from "./refs-xm4Vltrw.js";
|
|
5
5
|
//#region src/macros/macroDiscriminatorEnum.ts
|
|
6
6
|
/**
|
|
7
7
|
* Builds a macro that replaces a discriminator property's schema with a string enum of the given
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_visitor = require("./visitor-
|
|
1
|
+
const require_visitor = require("./visitor-h6dEM3vR.cjs");
|
|
2
2
|
//#region src/utils/refs.ts
|
|
3
3
|
const plainStringTypes = new Set([
|
|
4
4
|
"string",
|
|
@@ -132,4 +132,4 @@ Object.defineProperty(exports, "syncSchemaRef", {
|
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
134
|
|
|
135
|
-
//# sourceMappingURL=refs-
|
|
135
|
+
//# sourceMappingURL=refs-DNNvJ7jg.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refs-
|
|
1
|
+
{"version":3,"file":"refs-DNNvJ7jg.cjs","names":["pascalCase","narrowSchema","createSchema"],"sources":["../src/utils/refs.ts"],"sourcesContent":["import { pascalCase } from '@internals/utils'\nimport { narrowSchema } from '../guards.ts'\nimport type { SchemaNode } from '../nodes/index.ts'\nimport { createSchema, type SchemaType } from '../nodes/schema.ts'\n\nconst plainStringTypes = new Set<SchemaType>(['string', 'uuid', 'email', 'url', 'datetime'] as const)\n\n/**\n * Returns the last path segment of a reference string.\n *\n * @example\n * `extractRefName('#/components/schemas/Pet') // 'Pet'`\n */\nexport function extractRefName(ref: string): string {\n return ref.split('/').at(-1) ?? ref\n}\n\n/**\n * Resolves the schema name of a ref node. Uses the last segment of `ref` when set, otherwise falls\n * back to `name` then nested `schema.name`.\n *\n * Returns `null` for non-ref nodes or when no name resolves.\n *\n * @example\n * `resolveRefName({ kind: 'Schema', type: 'ref', ref: '#/components/schemas/Pet' }) // 'Pet'`\n */\nexport function resolveRefName(node: SchemaNode | undefined): string | null {\n if (!node || node.type !== 'ref') return null\n if (node.ref) return extractRefName(node.ref) ?? node.name ?? node.schema?.name ?? null\n\n return node.name ?? node.schema?.name ?? null\n}\n\n/**\n * Builds a PascalCase child schema name by joining a parent name and property name.\n * Returns `null` when there is no parent to nest under.\n *\n * @example Nested under a parent\n * `childName('Order', 'shipping_address') // 'OrderShippingAddress'`\n *\n * @example No parent\n * `childName(undefined, 'params') // null`\n */\nexport function childName(parentName: string | null | undefined, propName: string): string | null {\n return parentName ? pascalCase([parentName, propName].join(' ')) : null\n}\n\n/**\n * Builds a PascalCase enum name from the parent name, property name, and a suffix, skipping any\n * empty parts.\n *\n * @example\n * `enumPropName('Order', 'status', 'enum') // 'OrderStatusEnum'`\n */\nexport function enumPropName(parentName: string | null | undefined, propName: string, enumSuffix: string): string {\n return pascalCase([parentName, propName, enumSuffix].filter(Boolean).join(' '))\n}\n\n/**\n * Merges a ref node with its resolved schema, giving usage-site fields precedence.\n *\n * Every field set on the ref node except `kind`, `type`, `name`, `ref`, and `schema` overrides the\n * same field in the resolved `node.schema` (for example `description`, `nullable`, `readOnly`,\n * `deprecated`). Fields left `undefined` on the ref do not shadow the resolved schema. Non-ref\n * nodes and refs without a resolved `schema` are returned unchanged.\n *\n * @example\n * ```ts\n * const ref = createSchema({ type: 'ref', ref: '#/components/schemas/Pet', description: 'A cute pet' })\n * const merged = syncSchemaRef(ref) // merges with resolved Pet schema\n * ```\n */\nexport function syncSchemaRef(node: SchemaNode): SchemaNode {\n const ref = narrowSchema(node, 'ref')\n\n if (!ref) return node\n if (!ref.schema) return node\n\n const { kind: _kind, type: _type, name: _name, ref: _ref, schema: _schema, ...overrides } = ref\n\n // Filter out undefined override values so they don't shadow the resolved schema's fields.\n const definedOverrides = Object.fromEntries(Object.entries(overrides).filter(([, v]) => v !== undefined))\n\n return createSchema({ ...ref.schema, ...definedOverrides })\n}\n\n/**\n * Type guard that returns `true` when a schema emits as a plain `string` type.\n *\n * Covers `string`, `uuid`, `email`, `url`, and `datetime` types. For `date` and `time`\n * types, returns `true` only when `representation` is `'string'` rather than `'date'`.\n */\nexport function isStringType(node: SchemaNode): boolean {\n if (plainStringTypes.has(node.type)) {\n return true\n }\n\n const temporal = narrowSchema(node, 'date') ?? narrowSchema(node, 'time')\n if (temporal) {\n return temporal.representation !== 'date'\n }\n\n return false\n}\n"],"mappings":";;AAKA,MAAM,mBAAmB,IAAI,IAAgB;CAAC;CAAU;CAAQ;CAAS;CAAO;AAAU,CAAU;;;;;;;AAQpG,SAAgB,eAAe,KAAqB;CAClD,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK;AAClC;;;;;;;;;;AAWA,SAAgB,eAAe,MAA6C;CAC1E,IAAI,CAAC,QAAQ,KAAK,SAAS,OAAO,OAAO;CACzC,IAAI,KAAK,KAAK,OAAO,eAAe,KAAK,GAAG,KAAK,KAAK,QAAQ,KAAK,QAAQ,QAAQ;CAEnF,OAAO,KAAK,QAAQ,KAAK,QAAQ,QAAQ;AAC3C;;;;;;;;;;;AAYA,SAAgB,UAAU,YAAuC,UAAiC;CAChG,OAAO,aAAaA,gBAAAA,WAAW,CAAC,YAAY,QAAQ,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI;AACrE;;;;;;;;AASA,SAAgB,aAAa,YAAuC,UAAkB,YAA4B;CAChH,OAAOA,gBAAAA,WAAW;EAAC;EAAY;EAAU;CAAU,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC;AAChF;;;;;;;;;;;;;;;AAgBA,SAAgB,cAAc,MAA8B;CAC1D,MAAM,MAAMC,gBAAAA,aAAa,MAAM,KAAK;CAEpC,IAAI,CAAC,KAAK,OAAO;CACjB,IAAI,CAAC,IAAI,QAAQ,OAAO;CAExB,MAAM,EAAE,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,MAAM,QAAQ,SAAS,GAAG,cAAc;CAG5F,MAAM,mBAAmB,OAAO,YAAY,OAAO,QAAQ,SAAS,CAAC,CAAC,QAAQ,GAAG,OAAO,MAAM,KAAA,CAAS,CAAC;CAExG,OAAOC,gBAAAA,aAAa;EAAE,GAAG,IAAI;EAAQ,GAAG;CAAiB,CAAC;AAC5D;;;;;;;AAQA,SAAgB,aAAa,MAA2B;CACtD,IAAI,iBAAiB,IAAI,KAAK,IAAI,GAChC,OAAO;CAGT,MAAM,WAAWD,gBAAAA,aAAa,MAAM,MAAM,KAAKA,gBAAAA,aAAa,MAAM,MAAM;CACxE,IAAI,UACF,OAAO,SAAS,mBAAmB;CAGrC,OAAO;AACT"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./rolldown-runtime-CNktS9qV.js";
|
|
2
|
-
import { M as pascalCase, Q as narrowSchema, o as createSchema } from "./visitor-
|
|
2
|
+
import { M as pascalCase, Q as narrowSchema, o as createSchema } from "./visitor-Dk0DNLfC.js";
|
|
3
3
|
//#region src/utils/refs.ts
|
|
4
4
|
const plainStringTypes = new Set([
|
|
5
5
|
"string",
|
|
@@ -98,4 +98,4 @@ function isStringType(node) {
|
|
|
98
98
|
//#endregion
|
|
99
99
|
export { resolveRefName as a, isStringType as i, enumPropName as n, syncSchemaRef as o, extractRefName as r, childName as t };
|
|
100
100
|
|
|
101
|
-
//# sourceMappingURL=refs-
|
|
101
|
+
//# sourceMappingURL=refs-xm4Vltrw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refs-
|
|
1
|
+
{"version":3,"file":"refs-xm4Vltrw.js","names":[],"sources":["../src/utils/refs.ts"],"sourcesContent":["import { pascalCase } from '@internals/utils'\nimport { narrowSchema } from '../guards.ts'\nimport type { SchemaNode } from '../nodes/index.ts'\nimport { createSchema, type SchemaType } from '../nodes/schema.ts'\n\nconst plainStringTypes = new Set<SchemaType>(['string', 'uuid', 'email', 'url', 'datetime'] as const)\n\n/**\n * Returns the last path segment of a reference string.\n *\n * @example\n * `extractRefName('#/components/schemas/Pet') // 'Pet'`\n */\nexport function extractRefName(ref: string): string {\n return ref.split('/').at(-1) ?? ref\n}\n\n/**\n * Resolves the schema name of a ref node. Uses the last segment of `ref` when set, otherwise falls\n * back to `name` then nested `schema.name`.\n *\n * Returns `null` for non-ref nodes or when no name resolves.\n *\n * @example\n * `resolveRefName({ kind: 'Schema', type: 'ref', ref: '#/components/schemas/Pet' }) // 'Pet'`\n */\nexport function resolveRefName(node: SchemaNode | undefined): string | null {\n if (!node || node.type !== 'ref') return null\n if (node.ref) return extractRefName(node.ref) ?? node.name ?? node.schema?.name ?? null\n\n return node.name ?? node.schema?.name ?? null\n}\n\n/**\n * Builds a PascalCase child schema name by joining a parent name and property name.\n * Returns `null` when there is no parent to nest under.\n *\n * @example Nested under a parent\n * `childName('Order', 'shipping_address') // 'OrderShippingAddress'`\n *\n * @example No parent\n * `childName(undefined, 'params') // null`\n */\nexport function childName(parentName: string | null | undefined, propName: string): string | null {\n return parentName ? pascalCase([parentName, propName].join(' ')) : null\n}\n\n/**\n * Builds a PascalCase enum name from the parent name, property name, and a suffix, skipping any\n * empty parts.\n *\n * @example\n * `enumPropName('Order', 'status', 'enum') // 'OrderStatusEnum'`\n */\nexport function enumPropName(parentName: string | null | undefined, propName: string, enumSuffix: string): string {\n return pascalCase([parentName, propName, enumSuffix].filter(Boolean).join(' '))\n}\n\n/**\n * Merges a ref node with its resolved schema, giving usage-site fields precedence.\n *\n * Every field set on the ref node except `kind`, `type`, `name`, `ref`, and `schema` overrides the\n * same field in the resolved `node.schema` (for example `description`, `nullable`, `readOnly`,\n * `deprecated`). Fields left `undefined` on the ref do not shadow the resolved schema. Non-ref\n * nodes and refs without a resolved `schema` are returned unchanged.\n *\n * @example\n * ```ts\n * const ref = createSchema({ type: 'ref', ref: '#/components/schemas/Pet', description: 'A cute pet' })\n * const merged = syncSchemaRef(ref) // merges with resolved Pet schema\n * ```\n */\nexport function syncSchemaRef(node: SchemaNode): SchemaNode {\n const ref = narrowSchema(node, 'ref')\n\n if (!ref) return node\n if (!ref.schema) return node\n\n const { kind: _kind, type: _type, name: _name, ref: _ref, schema: _schema, ...overrides } = ref\n\n // Filter out undefined override values so they don't shadow the resolved schema's fields.\n const definedOverrides = Object.fromEntries(Object.entries(overrides).filter(([, v]) => v !== undefined))\n\n return createSchema({ ...ref.schema, ...definedOverrides })\n}\n\n/**\n * Type guard that returns `true` when a schema emits as a plain `string` type.\n *\n * Covers `string`, `uuid`, `email`, `url`, and `datetime` types. For `date` and `time`\n * types, returns `true` only when `representation` is `'string'` rather than `'date'`.\n */\nexport function isStringType(node: SchemaNode): boolean {\n if (plainStringTypes.has(node.type)) {\n return true\n }\n\n const temporal = narrowSchema(node, 'date') ?? narrowSchema(node, 'time')\n if (temporal) {\n return temporal.representation !== 'date'\n }\n\n return false\n}\n"],"mappings":";;;AAKA,MAAM,mBAAmB,IAAI,IAAgB;CAAC;CAAU;CAAQ;CAAS;CAAO;AAAU,CAAU;;;;;;;AAQpG,SAAgB,eAAe,KAAqB;CAClD,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK;AAClC;;;;;;;;;;AAWA,SAAgB,eAAe,MAA6C;CAC1E,IAAI,CAAC,QAAQ,KAAK,SAAS,OAAO,OAAO;CACzC,IAAI,KAAK,KAAK,OAAO,eAAe,KAAK,GAAG,KAAK,KAAK,QAAQ,KAAK,QAAQ,QAAQ;CAEnF,OAAO,KAAK,QAAQ,KAAK,QAAQ,QAAQ;AAC3C;;;;;;;;;;;AAYA,SAAgB,UAAU,YAAuC,UAAiC;CAChG,OAAO,aAAa,WAAW,CAAC,YAAY,QAAQ,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI;AACrE;;;;;;;;AASA,SAAgB,aAAa,YAAuC,UAAkB,YAA4B;CAChH,OAAO,WAAW;EAAC;EAAY;EAAU;CAAU,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC;AAChF;;;;;;;;;;;;;;;AAgBA,SAAgB,cAAc,MAA8B;CAC1D,MAAM,MAAM,aAAa,MAAM,KAAK;CAEpC,IAAI,CAAC,KAAK,OAAO;CACjB,IAAI,CAAC,IAAI,QAAQ,OAAO;CAExB,MAAM,EAAE,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,MAAM,QAAQ,SAAS,GAAG,cAAc;CAG5F,MAAM,mBAAmB,OAAO,YAAY,OAAO,QAAQ,SAAS,CAAC,CAAC,QAAQ,GAAG,OAAO,MAAM,KAAA,CAAS,CAAC;CAExG,OAAO,aAAa;EAAE,GAAG,IAAI;EAAQ,GAAG;CAAiB,CAAC;AAC5D;;;;;;;AAQA,SAAgB,aAAa,MAA2B;CACtD,IAAI,iBAAiB,IAAI,KAAK,IAAI,GAChC,OAAO;CAGT,MAAM,WAAW,aAAa,MAAM,MAAM,KAAK,aAAa,MAAM,MAAM;CACxE,IAAI,UACF,OAAO,SAAS,mBAAmB;CAGrC,OAAO;AACT"}
|
package/dist/utils.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_visitor = require("./visitor-
|
|
3
|
-
const require_refs = require("./refs-
|
|
2
|
+
const require_visitor = require("./visitor-h6dEM3vR.cjs");
|
|
3
|
+
const require_refs = require("./refs-DNNvJ7jg.cjs");
|
|
4
4
|
//#region ../../internals/utils/src/promise.ts
|
|
5
5
|
/**
|
|
6
6
|
* Wraps `factory` with a keyed cache backed by the provided store.
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./rolldown-runtime-CNktS9qV.js";
|
|
2
|
-
import { Q as narrowSchema, j as extractStringsFromNodes, n as collectLazy, o as createSchema, t as collect } from "./visitor-
|
|
3
|
-
import { a as resolveRefName, i as isStringType, n as enumPropName, o as syncSchemaRef, r as extractRefName, t as childName } from "./refs-
|
|
2
|
+
import { Q as narrowSchema, j as extractStringsFromNodes, n as collectLazy, o as createSchema, t as collect } from "./visitor-Dk0DNLfC.js";
|
|
3
|
+
import { a as resolveRefName, i as isStringType, n as enumPropName, o as syncSchemaRef, r as extractRefName, t as childName } from "./refs-xm4Vltrw.js";
|
|
4
4
|
//#region ../../internals/utils/src/promise.ts
|
|
5
5
|
/**
|
|
6
6
|
* Wraps `factory` with a keyed cache backed by the provided store.
|
|
@@ -190,11 +190,13 @@ function defineNode(config) {
|
|
|
190
190
|
const { kind, defaults, build, children, visitorKey } = config;
|
|
191
191
|
function create(input) {
|
|
192
192
|
const base = build ? build(input) : input;
|
|
193
|
-
|
|
193
|
+
const node = {
|
|
194
|
+
kind,
|
|
194
195
|
...defaults,
|
|
195
|
-
...base
|
|
196
|
-
kind
|
|
196
|
+
...base
|
|
197
197
|
};
|
|
198
|
+
node.kind = kind;
|
|
199
|
+
return node;
|
|
198
200
|
}
|
|
199
201
|
return {
|
|
200
202
|
kind,
|
|
@@ -382,11 +384,21 @@ function trimExtName(text) {
|
|
|
382
384
|
*/
|
|
383
385
|
function extractStringsFromNodes(nodes) {
|
|
384
386
|
if (!nodes?.length) return "";
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
if (node
|
|
388
|
-
|
|
389
|
-
|
|
387
|
+
const collected = [];
|
|
388
|
+
for (const node of nodes) {
|
|
389
|
+
if (typeof node === "string") {
|
|
390
|
+
if (node) collected.push(node);
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
if (node.kind === "Text") {
|
|
394
|
+
if (node.value) collected.push(node.value);
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
if (node.kind === "Break") continue;
|
|
398
|
+
if (node.kind === "Jsx") {
|
|
399
|
+
if (node.value) collected.push(node.value);
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
390
402
|
const parts = [];
|
|
391
403
|
if ("params" in node && node.params) parts.push(node.params);
|
|
392
404
|
if ("generics" in node && node.generics) parts.push(Array.isArray(node.generics) ? node.generics.join(", ") : node.generics);
|
|
@@ -394,8 +406,9 @@ function extractStringsFromNodes(nodes) {
|
|
|
394
406
|
if ("type" in node && typeof node.type === "string") parts.push(node.type);
|
|
395
407
|
const nested = extractStringsFromNodes(node.nodes);
|
|
396
408
|
if (nested) parts.push(nested);
|
|
397
|
-
|
|
398
|
-
}
|
|
409
|
+
if (parts.length) collected.push(parts.join("\n"));
|
|
410
|
+
}
|
|
411
|
+
return collected.join("\n");
|
|
399
412
|
}
|
|
400
413
|
//#endregion
|
|
401
414
|
//#region src/utils/fileMerge.ts
|
|
@@ -632,20 +645,23 @@ const createSource = sourceDef.create;
|
|
|
632
645
|
function createFile(input) {
|
|
633
646
|
const extname = path.extname(input.baseName) || (input.baseName.startsWith(".") ? input.baseName : "");
|
|
634
647
|
if (!extname) throw new Error(`No extname found for ${input.baseName}`);
|
|
635
|
-
const source = (input.sources ?? []).flatMap((item) => item.nodes ?? []).map((node) => extractStringsFromNodes([node])).filter(Boolean).join("\n\n");
|
|
636
648
|
const resolvedExports = input.exports?.length ? combineExports(input.exports) : [];
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
const
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
+
let resolvedImports = [];
|
|
650
|
+
if (input.imports?.length) {
|
|
651
|
+
const source = extractStringsFromNodes((input.sources ?? []).flatMap((item) => item.nodes ?? [])) || void 0;
|
|
652
|
+
const combinedImports = combineImports(input.imports, resolvedExports, source);
|
|
653
|
+
const localNames = new Set((input.sources ?? []).map((item) => item.name).filter((name) => Boolean(name)));
|
|
654
|
+
const nameOf = (item) => typeof item === "string" ? item : item.name ?? item.propertyName;
|
|
655
|
+
resolvedImports = combinedImports.filter((imp) => imp.path !== input.path).flatMap((imp) => {
|
|
656
|
+
if (!Array.isArray(imp.name)) return typeof imp.name === "string" && localNames.has(imp.name) ? [] : [imp];
|
|
657
|
+
const kept = imp.name.filter((item) => !localNames.has(nameOf(item)));
|
|
658
|
+
if (!kept.length) return [];
|
|
659
|
+
return [kept.length === imp.name.length ? imp : {
|
|
660
|
+
...imp,
|
|
661
|
+
name: kept
|
|
662
|
+
}];
|
|
663
|
+
});
|
|
664
|
+
}
|
|
649
665
|
const resolvedSources = input.sources?.length ? combineSources(input.sources) : [];
|
|
650
666
|
return {
|
|
651
667
|
kind: "File",
|
|
@@ -1022,7 +1038,7 @@ const visitorKeysByKind = VISITOR_KEYS;
|
|
|
1022
1038
|
* Returns `true` when `value` is an AST node (an object carrying a `kind`).
|
|
1023
1039
|
*/
|
|
1024
1040
|
function isNode(value) {
|
|
1025
|
-
return typeof value === "object" && value !== null &&
|
|
1041
|
+
return typeof value === "object" && value !== null && typeof value.kind === "string";
|
|
1026
1042
|
}
|
|
1027
1043
|
/**
|
|
1028
1044
|
* Returns the immediate traversable children of `node` based on {@link VISITOR_KEYS}.
|
|
@@ -1089,44 +1105,49 @@ async function walk(node, options) {
|
|
|
1089
1105
|
}
|
|
1090
1106
|
async function _walk(node, visitor, recurse, limit, parent) {
|
|
1091
1107
|
await limit(() => applyVisitor(node, visitor, parent));
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
await Promise.all(
|
|
1108
|
+
let pending;
|
|
1109
|
+
for (const child of getChildren(node, recurse)) (pending ??= []).push(_walk(child, visitor, recurse, limit, node));
|
|
1110
|
+
if (pending) await Promise.all(pending);
|
|
1095
1111
|
}
|
|
1096
1112
|
function transform(node, options) {
|
|
1097
1113
|
const { depth, parent, ...visitor } = options;
|
|
1098
|
-
|
|
1099
|
-
|
|
1114
|
+
return transformNode(node, visitor, (depth ?? visitorDepths.deep) === visitorDepths.deep, parent);
|
|
1115
|
+
}
|
|
1116
|
+
/**
|
|
1117
|
+
* Visits a single node, then immutably rebuilds its children. Returns the original
|
|
1118
|
+
* reference when neither the visitor nor the child rebuild changed anything, so callers
|
|
1119
|
+
* can detect "nothing changed" by identity and ancestors avoid reallocating.
|
|
1120
|
+
*/
|
|
1121
|
+
function transformNode(node, visitor, recurse, parent) {
|
|
1122
|
+
return transformChildren(applyVisitor(node, visitor, parent) ?? node, visitor, recurse);
|
|
1100
1123
|
}
|
|
1101
1124
|
/**
|
|
1102
1125
|
* Immutably rebuilds a node's children using {@link VISITOR_KEYS}, transforming
|
|
1103
1126
|
* each child node and leaving non-node values (e.g. `additionalProperties: true`) intact.
|
|
1104
1127
|
* `Schema` children are skipped in shallow mode.
|
|
1105
1128
|
*/
|
|
1106
|
-
function transformChildren(node,
|
|
1129
|
+
function transformChildren(node, visitor, recurse) {
|
|
1107
1130
|
if (node.kind === "Schema" && !recurse) return node;
|
|
1108
1131
|
const keys = visitorKeysByKind[node.kind];
|
|
1109
1132
|
if (!keys) return node;
|
|
1110
1133
|
const record = node;
|
|
1111
|
-
const childOptions = {
|
|
1112
|
-
...options,
|
|
1113
|
-
parent: node
|
|
1114
|
-
};
|
|
1115
1134
|
let updates;
|
|
1116
1135
|
for (const key of keys) {
|
|
1117
1136
|
if (!(key in record)) continue;
|
|
1118
1137
|
const value = record[key];
|
|
1119
1138
|
if (Array.isArray(value)) {
|
|
1120
|
-
let
|
|
1121
|
-
const
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1139
|
+
let mapped;
|
|
1140
|
+
for (const [i, item] of value.entries()) {
|
|
1141
|
+
const next = isNode(item) ? transformNode(item, visitor, recurse, node) : item;
|
|
1142
|
+
if (mapped) {
|
|
1143
|
+
mapped.push(next);
|
|
1144
|
+
continue;
|
|
1145
|
+
}
|
|
1146
|
+
if (next !== item) mapped = [...value.slice(0, i), next];
|
|
1147
|
+
}
|
|
1148
|
+
if (mapped) (updates ??= {})[key] = mapped;
|
|
1128
1149
|
} else if (isNode(value)) {
|
|
1129
|
-
const next =
|
|
1150
|
+
const next = transformNode(value, visitor, recurse, node);
|
|
1130
1151
|
if (next !== value) (updates ??= {})[key] = next;
|
|
1131
1152
|
}
|
|
1132
1153
|
}
|
|
@@ -1153,13 +1174,12 @@ function transformChildren(node, options, recurse) {
|
|
|
1153
1174
|
*/
|
|
1154
1175
|
function* collectLazy(node, options) {
|
|
1155
1176
|
const { depth, parent, ...visitor } = options;
|
|
1156
|
-
|
|
1177
|
+
yield* collectNode(node, visitor, (depth ?? visitorDepths.deep) === visitorDepths.deep, parent);
|
|
1178
|
+
}
|
|
1179
|
+
function* collectNode(node, visitor, recurse, parent) {
|
|
1157
1180
|
const v = applyVisitor(node, visitor, parent);
|
|
1158
1181
|
if (v != null) yield v;
|
|
1159
|
-
for (const child of getChildren(node, recurse)) yield*
|
|
1160
|
-
...options,
|
|
1161
|
-
parent: node
|
|
1162
|
-
});
|
|
1182
|
+
for (const child of getChildren(node, recurse)) yield* collectNode(child, visitor, recurse, node);
|
|
1163
1183
|
}
|
|
1164
1184
|
/**
|
|
1165
1185
|
* Eager depth-first collection pass. Gathers every non-null value the visitor
|
|
@@ -1180,4 +1200,4 @@ function collect(node, options) {
|
|
|
1180
1200
|
//#endregion
|
|
1181
1201
|
export { schemaTypes as $, sourceDef as A, createConst as B, createExport as C, exportDef as D, createSource as E, arrowFunctionDef as F, functionDef as G, createJsx as H, breakDef as I, typeDef as J, jsxDef as K, constDef as L, pascalCase as M, contentDef as N, fileDef as O, createContent as P, narrowSchema as Q, createArrowFunction as R, inputDef as S, createImport as T, createText as U, createFunction as V, createType as W, visitorKeys as X, defineNode as Y, isHttpOperationNode as Z, createOperation as _, nodeDefs as a, requestBodyDef as b, createResponse as c, propertyDef as d, createParameter as f, outputDef as g, createOutput as h, walk as i, extractStringsFromNodes as j, importDef as k, responseDef as l, optionality as m, collectLazy as n, createSchema as o, parameterDef as p, textDef as q, transform as r, schemaDef as s, collect as t, createProperty as u, operationDef as v, createFile as w, createInput as x, createRequestBody as y, createBreak as z };
|
|
1182
1202
|
|
|
1183
|
-
//# sourceMappingURL=visitor-
|
|
1203
|
+
//# sourceMappingURL=visitor-Dk0DNLfC.js.map
|