langium-zod 0.4.0 → 0.5.1
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.md +41 -0
- package/dist/api.d.ts +1 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +57 -5
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +128 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +26 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/conformance.d.ts +17 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +100 -0
- package/dist/conformance.js.map +1 -0
- package/dist/extractor.d.ts.map +1 -1
- package/dist/extractor.js +25 -3
- package/dist/extractor.js.map +1 -1
- package/dist/generator.d.ts +9 -1
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +143 -27
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/projection.d.ts +20 -0
- package/dist/projection.d.ts.map +1 -0
- package/dist/projection.js +104 -0
- package/dist/projection.js.map +1 -0
- package/dist/ref-utils.d.ts +3 -0
- package/dist/ref-utils.d.ts.map +1 -0
- package/dist/ref-utils.js +14 -0
- package/dist/ref-utils.js.map +1 -0
- package/dist/type-mapper.d.ts.map +1 -1
- package/dist/type-mapper.js +13 -4
- package/dist/type-mapper.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -16,6 +16,46 @@ import { generateZodSchemas } from 'langium-zod';
|
|
|
16
16
|
const source = generateZodSchemas({ grammar, services });
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
### Programmatic options
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
generateZodSchemas({
|
|
23
|
+
grammar,
|
|
24
|
+
outputPath: 'src/generated/zod-schemas.ts',
|
|
25
|
+
include: ['Greeting', 'Tag'],
|
|
26
|
+
exclude: ['InternalNode'],
|
|
27
|
+
stripInternals: true,
|
|
28
|
+
projection: {
|
|
29
|
+
defaults: { strip: ['$container', '$document'] },
|
|
30
|
+
types: {
|
|
31
|
+
Greeting: { fields: ['name', 'tags'] }
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
conformance: {
|
|
35
|
+
astTypesPath: 'src/generated/ast.ts'
|
|
36
|
+
},
|
|
37
|
+
crossRefValidation: true
|
|
38
|
+
});
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### CLI options
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
langium-zod generate \
|
|
45
|
+
--config langium-config.json \
|
|
46
|
+
--out src/generated/zod-schemas.ts \
|
|
47
|
+
--include Greeting,Tag \
|
|
48
|
+
--exclude InternalNode \
|
|
49
|
+
--projection projection.json \
|
|
50
|
+
--strip-internals \
|
|
51
|
+
--conformance \
|
|
52
|
+
--ast-types src/generated/ast.ts \
|
|
53
|
+
--conformance-out src/generated/zod-schemas.conformance.ts \
|
|
54
|
+
--cross-ref-validation
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`zRef` is exported from the package for manual schema customization in runtime-aware validation flows.
|
|
58
|
+
|
|
19
59
|
Generated output uses Zod 4 and exports named schemas like `<TypeName>Schema`.
|
|
20
60
|
|
|
21
61
|
## Requirements
|
|
@@ -23,3 +63,4 @@ Generated output uses Zod 4 and exports named schemas like `<TypeName>Schema`.
|
|
|
23
63
|
- Node.js >= 20
|
|
24
64
|
- Langium 4.x
|
|
25
65
|
- Zod 4.x
|
|
66
|
+
|
package/dist/api.d.ts
CHANGED
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAStD,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAS1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAgGrE"}
|
package/dist/api.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { dirname } from 'node:path';
|
|
3
3
|
import { collectAst } from 'langium/grammar';
|
|
4
|
+
import { generateConformanceSource, inferConformanceOutputPath } from './conformance.js';
|
|
4
5
|
import { ZodGeneratorError } from './errors.js';
|
|
5
6
|
import { extractTypeDescriptors } from './extractor.js';
|
|
6
7
|
import { generateZodCode } from './generator.js';
|
|
8
|
+
import { applyProjectionToDescriptors, resolveEffectiveStripFields } from './projection.js';
|
|
7
9
|
import { detectRecursiveTypes } from './recursion-detector.js';
|
|
8
10
|
function resolveAstTypes(astTypes) {
|
|
9
11
|
return {
|
|
@@ -25,10 +27,7 @@ export function generateZodSchemas(config) {
|
|
|
25
27
|
});
|
|
26
28
|
}
|
|
27
29
|
const astTypes = resolveAstTypes(rawAstTypes);
|
|
28
|
-
const rawDescriptors =
|
|
29
|
-
include: config.include,
|
|
30
|
-
exclude: config.exclude
|
|
31
|
-
});
|
|
30
|
+
const rawDescriptors = buildDescriptorPipeline(astTypes, config);
|
|
32
31
|
// Apply regexOverrides: upgrade primitive-alias schemas to regex-enum for types
|
|
33
32
|
// whose Langium grammar rule is too complex for automatic regex derivation.
|
|
34
33
|
const overrides = config.regexOverrides ?? {};
|
|
@@ -45,11 +44,64 @@ export function generateZodSchemas(config) {
|
|
|
45
44
|
return d;
|
|
46
45
|
});
|
|
47
46
|
const recursiveTypes = detectRecursiveTypes(descriptors);
|
|
48
|
-
const
|
|
47
|
+
const surfaceDescriptors = applyProjectionToDescriptors(descriptors, {
|
|
48
|
+
projection: config.projection,
|
|
49
|
+
stripInternals: config.stripInternals
|
|
50
|
+
});
|
|
51
|
+
const source = generateZodCode(descriptors, recursiveTypes, {
|
|
52
|
+
projection: config.projection,
|
|
53
|
+
stripInternals: config.stripInternals,
|
|
54
|
+
crossRefValidation: config.crossRefValidation,
|
|
55
|
+
formMetadata: config.formMetadata,
|
|
56
|
+
objectStyle: config.objectStyle
|
|
57
|
+
});
|
|
49
58
|
if (config.outputPath) {
|
|
50
59
|
mkdirSync(dirname(config.outputPath), { recursive: true });
|
|
51
60
|
writeFileSync(config.outputPath, source, 'utf8');
|
|
52
61
|
}
|
|
62
|
+
if (config.conformance) {
|
|
63
|
+
if (!config.outputPath) {
|
|
64
|
+
throw new ZodGeneratorError('Conformance generation requires outputPath', {
|
|
65
|
+
suggestion: 'Provide outputPath when conformance generation is enabled'
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (!config.conformance.astTypesPath) {
|
|
69
|
+
throw new ZodGeneratorError('Conformance generation requires astTypesPath', {
|
|
70
|
+
suggestion: 'Provide conformance.astTypesPath or use CLI --ast-types/auto-resolution'
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const schemaTypeNames = surfaceDescriptors
|
|
74
|
+
.filter((descriptor) => descriptor.kind === 'object')
|
|
75
|
+
.map((descriptor) => descriptor.name);
|
|
76
|
+
if (schemaTypeNames.length === 0) {
|
|
77
|
+
console.warn('Warning: Conformance generation skipped because no schemas remain after filtering.');
|
|
78
|
+
return source;
|
|
79
|
+
}
|
|
80
|
+
const conformanceOutputPath = inferConformanceOutputPath(config.outputPath, config.conformance.outputPath);
|
|
81
|
+
const conformance = generateConformanceSource({
|
|
82
|
+
schemaOutputPath: config.outputPath,
|
|
83
|
+
conformanceOutputPath,
|
|
84
|
+
astTypesPath: config.conformance.astTypesPath,
|
|
85
|
+
schemaTypeNames,
|
|
86
|
+
stripFields: resolveEffectiveStripFields({
|
|
87
|
+
projection: config.projection,
|
|
88
|
+
stripInternals: config.stripInternals
|
|
89
|
+
}),
|
|
90
|
+
projection: config.projection
|
|
91
|
+
});
|
|
92
|
+
for (const missingType of conformance.missingAstTypes) {
|
|
93
|
+
console.warn(`Warning: Missing AST export for conformance type ${missingType}; skipping.`);
|
|
94
|
+
}
|
|
95
|
+
mkdirSync(dirname(conformanceOutputPath), { recursive: true });
|
|
96
|
+
writeFileSync(conformanceOutputPath, conformance.source, 'utf8');
|
|
97
|
+
}
|
|
53
98
|
return source;
|
|
54
99
|
}
|
|
100
|
+
function buildDescriptorPipeline(astTypes, config) {
|
|
101
|
+
const descriptors = extractTypeDescriptors(astTypes, {
|
|
102
|
+
include: config.include,
|
|
103
|
+
exclude: config.exclude
|
|
104
|
+
});
|
|
105
|
+
return descriptors;
|
|
106
|
+
}
|
|
55
107
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface LangiumZodConfig extends Omit<ZodGeneratorConfig, 'grammar' | '
|
|
|
10
10
|
/** Explicit output path. Overrides derived path from langium-config.json `out` field. */
|
|
11
11
|
outputPath?: string;
|
|
12
12
|
}
|
|
13
|
+
export declare function resolveFilterOverrides(base: Pick<LangiumZodConfig, 'include' | 'exclude'>, includeArg?: string, excludeArg?: string): Pick<LangiumZodConfig, 'include' | 'exclude'>;
|
|
14
|
+
export declare function getUnknownFilterNames(requested: string[] | undefined, availableTypeNames: string[]): string[];
|
|
13
15
|
export interface GenerateOptions {
|
|
14
16
|
/** Absolute path to langium-config.json */
|
|
15
17
|
langiumConfigPath: string;
|
|
@@ -17,4 +19,5 @@ export interface GenerateOptions {
|
|
|
17
19
|
config?: LangiumZodConfig;
|
|
18
20
|
}
|
|
19
21
|
export declare function generate(opts: GenerateOptions): Promise<void>;
|
|
22
|
+
export declare function main(): Promise<void>;
|
|
20
23
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAgBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAQtD,kEAAkE;AAClE,MAAM,WAAW,gBAChB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IACrE;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAuCD,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,SAAS,CAAC,EACnD,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GACjB,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,SAAS,CAAC,CAc/C;AAoBD,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,EAC/B,kBAAkB,EAAE,MAAM,EAAE,GAC1B,MAAM,EAAE,CAOV;AAyED,MAAM,WAAW,eAAe;IAC/B,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FnE;AAMD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAmG1C"}
|
package/dist/cli.js
CHANGED
|
@@ -13,6 +13,61 @@ import { URI } from 'langium';
|
|
|
13
13
|
import { createLangiumGrammarServices, resolveImportUri } from 'langium/grammar';
|
|
14
14
|
import { NodeFileSystem } from 'langium/node';
|
|
15
15
|
import { generateZodSchemas } from './api.js';
|
|
16
|
+
import { resolveAstTypesPath } from './conformance.js';
|
|
17
|
+
import { loadProjectionConfig } from './projection.js';
|
|
18
|
+
function parseCsvList(value) {
|
|
19
|
+
const seen = new Set();
|
|
20
|
+
const parsed = [];
|
|
21
|
+
for (const entry of value.split(',')) {
|
|
22
|
+
const normalized = entry.trim();
|
|
23
|
+
if (!normalized || seen.has(normalized)) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
seen.add(normalized);
|
|
27
|
+
parsed.push(normalized);
|
|
28
|
+
}
|
|
29
|
+
return parsed;
|
|
30
|
+
}
|
|
31
|
+
function getArgValue(args, flag) {
|
|
32
|
+
const idx = args.indexOf(flag);
|
|
33
|
+
if (idx < 0) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const value = args[idx + 1];
|
|
37
|
+
if (value == null || value.startsWith('--')) {
|
|
38
|
+
throw new Error(`Missing value for ${flag}`);
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
export function resolveFilterOverrides(base, includeArg, excludeArg) {
|
|
43
|
+
const includeFromCli = includeArg === undefined ? undefined : parseCsvList(includeArg);
|
|
44
|
+
const excludeFromCli = excludeArg === undefined ? undefined : parseCsvList(excludeArg);
|
|
45
|
+
const includeSource = includeFromCli ?? base.include ?? [];
|
|
46
|
+
const excludeSource = excludeFromCli ?? base.exclude ?? [];
|
|
47
|
+
const excludeSet = new Set(excludeSource);
|
|
48
|
+
const include = includeSource.filter((name) => !excludeSet.has(name));
|
|
49
|
+
return {
|
|
50
|
+
include,
|
|
51
|
+
exclude: excludeSource
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function warnUnknownFilterNames(filterName, requested, availableTypeNames) {
|
|
55
|
+
const unknown = getUnknownFilterNames(requested, availableTypeNames);
|
|
56
|
+
if (unknown.length === 0) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const availableList = availableTypeNames.length > 0
|
|
60
|
+
? availableTypeNames.join(', ')
|
|
61
|
+
: '(none)';
|
|
62
|
+
console.warn(`Warning: Unknown ${filterName} type name(s): ${unknown.join(', ')}. Available types: ${availableList}`);
|
|
63
|
+
}
|
|
64
|
+
export function getUnknownFilterNames(requested, availableTypeNames) {
|
|
65
|
+
if (!requested || requested.length === 0) {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
const available = new Set(availableTypeNames);
|
|
69
|
+
return requested.filter((name) => !available.has(name));
|
|
70
|
+
}
|
|
16
71
|
// ────────────────────────────────────────────────────────────────────────────
|
|
17
72
|
// Helpers
|
|
18
73
|
// ────────────────────────────────────────────────────────────────────────────
|
|
@@ -26,6 +81,14 @@ USAGE
|
|
|
26
81
|
OPTIONS
|
|
27
82
|
--config <path> Path to langium-config.json (default: langium-config.json)
|
|
28
83
|
--out <path> Output file path (default: <out>/zod-schemas.ts)
|
|
84
|
+
--include <csv> Comma-separated type allowlist
|
|
85
|
+
--exclude <csv> Comma-separated type blocklist
|
|
86
|
+
--projection <file> Projection config JSON file
|
|
87
|
+
--strip-internals Strip internal Langium metadata fields
|
|
88
|
+
--conformance Generate conformance artifact
|
|
89
|
+
--ast-types <path> Path to generated AST declarations (ast.ts)
|
|
90
|
+
--conformance-out <path> Output path for conformance artifact
|
|
91
|
+
--cross-ref-validation Emit runtime cross-reference schema factories
|
|
29
92
|
--help Show this help message
|
|
30
93
|
|
|
31
94
|
CONFIGURATION
|
|
@@ -88,6 +151,21 @@ export async function generate(opts) {
|
|
|
88
151
|
? resolve(configDir, langiumConfig.out)
|
|
89
152
|
: resolve(configDir, 'src/generated');
|
|
90
153
|
const outputPath = userConfig.outputPath ?? join(outDir, 'zod-schemas.ts');
|
|
154
|
+
const conformanceConfig = userConfig.conformance;
|
|
155
|
+
if (conformanceConfig) {
|
|
156
|
+
const resolvedAstTypesPath = conformanceConfig.astTypesPath
|
|
157
|
+
? resolve(configDir, conformanceConfig.astTypesPath)
|
|
158
|
+
: langiumConfig.astTypes
|
|
159
|
+
? resolve(configDir, langiumConfig.astTypes)
|
|
160
|
+
: resolveAstTypesPath(configDir, outDir);
|
|
161
|
+
if (!existsSync(resolvedAstTypesPath)) {
|
|
162
|
+
throw new Error(`Unable to resolve ast types path for conformance: ${resolvedAstTypesPath}`);
|
|
163
|
+
}
|
|
164
|
+
userConfig.conformance = {
|
|
165
|
+
astTypesPath: resolvedAstTypesPath,
|
|
166
|
+
outputPath: conformanceConfig.outputPath
|
|
167
|
+
};
|
|
168
|
+
}
|
|
91
169
|
// ── 3. Parse grammar using Langium services ──────────────────────────────
|
|
92
170
|
const { shared, grammar: grammarServices } = createLangiumGrammarServices(NodeFileSystem);
|
|
93
171
|
void grammarServices; // used only for type-checking if needed later
|
|
@@ -102,6 +180,14 @@ export async function generate(opts) {
|
|
|
102
180
|
validation: false,
|
|
103
181
|
});
|
|
104
182
|
const grammar = entryDocument.parseResult.value;
|
|
183
|
+
const availableTypeNames = [
|
|
184
|
+
...(grammar.interfaces ?? []).map((entry) => entry.name),
|
|
185
|
+
...(grammar.types ?? []).map((entry) => entry.name)
|
|
186
|
+
]
|
|
187
|
+
.filter((name) => typeof name === 'string')
|
|
188
|
+
.sort((left, right) => left.localeCompare(right));
|
|
189
|
+
warnUnknownFilterNames('include', userConfig.include, availableTypeNames);
|
|
190
|
+
warnUnknownFilterNames('exclude', userConfig.exclude, availableTypeNames);
|
|
105
191
|
// ── 4. Generate schemas ──────────────────────────────────────────────────
|
|
106
192
|
const { langiumConfig: _ignored, outputPath: _op, ...restConfig } = userConfig;
|
|
107
193
|
generateZodSchemas({
|
|
@@ -114,7 +200,7 @@ export async function generate(opts) {
|
|
|
114
200
|
// ────────────────────────────────────────────────────────────────────────────
|
|
115
201
|
// CLI entry point
|
|
116
202
|
// ────────────────────────────────────────────────────────────────────────────
|
|
117
|
-
async function main() {
|
|
203
|
+
export async function main() {
|
|
118
204
|
const args = process.argv.slice(2);
|
|
119
205
|
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
|
120
206
|
printHelp();
|
|
@@ -131,6 +217,14 @@ async function main() {
|
|
|
131
217
|
const configFlagValue = configFlagIdx >= 0 ? args[configFlagIdx + 1] : undefined;
|
|
132
218
|
const outFlagIdx = args.indexOf('--out');
|
|
133
219
|
const outFlagValue = outFlagIdx >= 0 ? args[outFlagIdx + 1] : undefined;
|
|
220
|
+
const includeFlagValue = getArgValue(args, '--include');
|
|
221
|
+
const excludeFlagValue = getArgValue(args, '--exclude');
|
|
222
|
+
const projectionFlagValue = getArgValue(args, '--projection');
|
|
223
|
+
const astTypesFlagValue = getArgValue(args, '--ast-types');
|
|
224
|
+
const conformanceOutFlagValue = getArgValue(args, '--conformance-out');
|
|
225
|
+
const stripInternalsEnabled = args.includes('--strip-internals');
|
|
226
|
+
const conformanceEnabled = args.includes('--conformance');
|
|
227
|
+
const crossRefValidationEnabled = args.includes('--cross-ref-validation');
|
|
134
228
|
// ── Locate langium-config.json ───────────────────────────────────────────
|
|
135
229
|
const configFileName = configFlagValue ?? 'langium-config.json';
|
|
136
230
|
const langiumConfigPath = resolve(process.cwd(), configFileName);
|
|
@@ -152,6 +246,39 @@ async function main() {
|
|
|
152
246
|
if (outFlagValue) {
|
|
153
247
|
userConfig = { ...userConfig, outputPath: resolve(process.cwd(), outFlagValue) };
|
|
154
248
|
}
|
|
249
|
+
const filterOverrides = resolveFilterOverrides(userConfig, includeFlagValue, excludeFlagValue);
|
|
250
|
+
userConfig = {
|
|
251
|
+
...userConfig,
|
|
252
|
+
...filterOverrides
|
|
253
|
+
};
|
|
254
|
+
if (projectionFlagValue) {
|
|
255
|
+
const projectionPath = resolve(process.cwd(), projectionFlagValue);
|
|
256
|
+
userConfig = {
|
|
257
|
+
...userConfig,
|
|
258
|
+
projection: loadProjectionConfig(projectionPath)
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
if (stripInternalsEnabled) {
|
|
262
|
+
userConfig = {
|
|
263
|
+
...userConfig,
|
|
264
|
+
stripInternals: true
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
if (conformanceEnabled) {
|
|
268
|
+
userConfig = {
|
|
269
|
+
...userConfig,
|
|
270
|
+
conformance: {
|
|
271
|
+
astTypesPath: astTypesFlagValue ? resolve(process.cwd(), astTypesFlagValue) : undefined,
|
|
272
|
+
outputPath: conformanceOutFlagValue ? resolve(process.cwd(), conformanceOutFlagValue) : undefined
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
if (crossRefValidationEnabled) {
|
|
277
|
+
userConfig = {
|
|
278
|
+
...userConfig,
|
|
279
|
+
crossRefValidation: true
|
|
280
|
+
};
|
|
281
|
+
}
|
|
155
282
|
try {
|
|
156
283
|
await generate({ langiumConfigPath, config: userConfig });
|
|
157
284
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Grammar, LangiumCoreServices } from 'langium';
|
|
2
2
|
import type { AstTypesLike } from './types.js';
|
|
3
|
+
import type { ProjectionConfig } from './projection.js';
|
|
3
4
|
export interface FilterConfig {
|
|
4
5
|
include?: string[];
|
|
5
6
|
exclude?: string[];
|
|
@@ -9,6 +10,13 @@ export interface ZodGeneratorConfig extends FilterConfig {
|
|
|
9
10
|
services?: LangiumCoreServices;
|
|
10
11
|
outputPath?: string;
|
|
11
12
|
astTypes?: AstTypesLike;
|
|
13
|
+
projection?: ProjectionConfig;
|
|
14
|
+
stripInternals?: boolean;
|
|
15
|
+
crossRefValidation?: boolean;
|
|
16
|
+
conformance?: {
|
|
17
|
+
astTypesPath?: string;
|
|
18
|
+
outputPath?: string;
|
|
19
|
+
};
|
|
12
20
|
/**
|
|
13
21
|
* Override the generated schema for specific type names.
|
|
14
22
|
*
|
|
@@ -26,6 +34,24 @@ export interface ZodGeneratorConfig extends FilterConfig {
|
|
|
26
34
|
* ```
|
|
27
35
|
*/
|
|
28
36
|
regexOverrides?: Record<string, string>;
|
|
37
|
+
/**
|
|
38
|
+
* When `true`, emit `.meta({ title, description? })` on generated Zod schemas
|
|
39
|
+
* using humanized property/type names as `title` and JSDoc comments from the grammar
|
|
40
|
+
* as `description`. The `description` field is only included when a JSDoc/grammar
|
|
41
|
+
* comment exists for the corresponding type or property. Useful for zod-to-forms
|
|
42
|
+
* integrations that derive field labels from metadata.
|
|
43
|
+
*/
|
|
44
|
+
formMetadata?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Controls how object schemas are emitted.
|
|
47
|
+
* - `'loose'` (default): emits `z.looseObject(...)` which allows extra properties to
|
|
48
|
+
* pass through unchanged.
|
|
49
|
+
* - `'strict'`: emits `z.object(...)` (the standard Zod object). This strips unknown
|
|
50
|
+
* properties by default instead of rejecting them with a validation error. Consumers
|
|
51
|
+
* can call `.strict()` on the emitted schema if they need hard rejection of unknown
|
|
52
|
+
* properties.
|
|
53
|
+
*/
|
|
54
|
+
objectStyle?: 'loose' | 'strict';
|
|
29
55
|
}
|
|
30
56
|
export declare const DEFAULT_OUTPUT_PATH = "src/generated/zod-schemas.ts";
|
|
31
57
|
export declare function normalizeFilterConfig(config?: FilterConfig): Required<FilterConfig>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,YAAY;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;;;;;;;;;;;;;OAeG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACjC;AAED,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAElE,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAKnF"}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA0DA,MAAM,CAAC,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAElE,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IAC1D,OAAO;QACN,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;QAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;KAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ProjectionConfig } from './projection.js';
|
|
2
|
+
export interface ConformanceGenerationOptions {
|
|
3
|
+
schemaOutputPath: string;
|
|
4
|
+
conformanceOutputPath?: string;
|
|
5
|
+
astTypesPath: string;
|
|
6
|
+
schemaTypeNames: string[];
|
|
7
|
+
stripFields: string[];
|
|
8
|
+
projection?: ProjectionConfig;
|
|
9
|
+
}
|
|
10
|
+
export declare function inferConformanceOutputPath(schemaOutputPath: string, overridePath?: string): string;
|
|
11
|
+
export declare function collectAstExportNames(astTypesPath: string): Set<string>;
|
|
12
|
+
export declare function generateConformanceSource(options: ConformanceGenerationOptions): {
|
|
13
|
+
source: string;
|
|
14
|
+
missingAstTypes: string[];
|
|
15
|
+
};
|
|
16
|
+
export declare function resolveAstTypesPath(configDir: string, langiumOutDir: string, explicitAstTypesPath?: string): string;
|
|
17
|
+
//# sourceMappingURL=conformance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAuBD,wBAAgB,0BAA0B,CACzC,gBAAgB,EAAE,MAAM,EACxB,YAAY,CAAC,EAAE,MAAM,GACnB,MAAM,CASR;AAED,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAevE;AAED,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,4BAA4B,GACnC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CA2D/C;AAED,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,oBAAoB,CAAC,EAAE,MAAM,GAC3B,MAAM,CAKR"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { dirname, extname, relative, resolve } from 'node:path';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
function toPosixPath(path) {
|
|
4
|
+
return path.split('\\').join('/');
|
|
5
|
+
}
|
|
6
|
+
function ensureImportPath(path) {
|
|
7
|
+
if (path.startsWith('.')) {
|
|
8
|
+
return path;
|
|
9
|
+
}
|
|
10
|
+
return `./${path}`;
|
|
11
|
+
}
|
|
12
|
+
function replaceWithJsExtension(path) {
|
|
13
|
+
if (path.endsWith('.ts')) {
|
|
14
|
+
return `${path.slice(0, -3)}.js`;
|
|
15
|
+
}
|
|
16
|
+
if (!extname(path)) {
|
|
17
|
+
return `${path}.js`;
|
|
18
|
+
}
|
|
19
|
+
return path;
|
|
20
|
+
}
|
|
21
|
+
export function inferConformanceOutputPath(schemaOutputPath, overridePath) {
|
|
22
|
+
if (overridePath) {
|
|
23
|
+
return overridePath;
|
|
24
|
+
}
|
|
25
|
+
if (schemaOutputPath.endsWith('.ts')) {
|
|
26
|
+
return `${schemaOutputPath.slice(0, -3)}.conformance.ts`;
|
|
27
|
+
}
|
|
28
|
+
return `${schemaOutputPath}.conformance.ts`;
|
|
29
|
+
}
|
|
30
|
+
export function collectAstExportNames(astTypesPath) {
|
|
31
|
+
const source = readFileSync(astTypesPath, 'utf8');
|
|
32
|
+
const names = new Set();
|
|
33
|
+
const re = /export\s+(?:interface|type)\s+([A-Za-z_$][A-Za-z0-9_$]*)/g;
|
|
34
|
+
let match = re.exec(source);
|
|
35
|
+
while (match) {
|
|
36
|
+
const name = match[1];
|
|
37
|
+
if (name) {
|
|
38
|
+
names.add(name);
|
|
39
|
+
}
|
|
40
|
+
match = re.exec(source);
|
|
41
|
+
}
|
|
42
|
+
return names;
|
|
43
|
+
}
|
|
44
|
+
export function generateConformanceSource(options) {
|
|
45
|
+
const conformanceDir = dirname(options.conformanceOutputPath ?? options.schemaOutputPath);
|
|
46
|
+
const astImport = ensureImportPath(toPosixPath(replaceWithJsExtension(relative(conformanceDir, options.astTypesPath))));
|
|
47
|
+
const schemaImport = ensureImportPath(toPosixPath(replaceWithJsExtension(relative(conformanceDir, options.schemaOutputPath))));
|
|
48
|
+
const astExports = collectAstExportNames(options.astTypesPath);
|
|
49
|
+
const matchedSchemaNames = [];
|
|
50
|
+
const missingAstTypes = [];
|
|
51
|
+
for (const typeName of options.schemaTypeNames) {
|
|
52
|
+
if (astExports.has(typeName)) {
|
|
53
|
+
matchedSchemaNames.push(typeName);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
missingAstTypes.push(typeName);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const stripUnion = options.stripFields.length > 0
|
|
60
|
+
? options.stripFields.map((field) => JSON.stringify(field)).join(' | ')
|
|
61
|
+
: 'never';
|
|
62
|
+
const schemaImports = matchedSchemaNames.map((name) => `${name}Schema`).join(', ');
|
|
63
|
+
const lines = [
|
|
64
|
+
'// generated conformance file',
|
|
65
|
+
"import type { z } from 'zod';",
|
|
66
|
+
`import type * as AST from ${JSON.stringify(astImport)};`
|
|
67
|
+
];
|
|
68
|
+
if (schemaImports.length > 0) {
|
|
69
|
+
lines.push(`import { ${schemaImports} } from ${JSON.stringify(schemaImport)};`);
|
|
70
|
+
}
|
|
71
|
+
lines.push('');
|
|
72
|
+
lines.push(`type _Internals = ${stripUnion};`);
|
|
73
|
+
lines.push('type _Surface<T> = _Internals extends never ? T : Omit<T, _Internals>;');
|
|
74
|
+
lines.push('');
|
|
75
|
+
for (const typeName of matchedSchemaNames) {
|
|
76
|
+
const projectedFields = options.projection?.types?.[typeName]?.fields;
|
|
77
|
+
let surfaceType;
|
|
78
|
+
if (Array.isArray(projectedFields)) {
|
|
79
|
+
const allowlist = ['$type', ...projectedFields].map((f) => JSON.stringify(f)).join(' | ');
|
|
80
|
+
surfaceType = `Pick<_Surface<AST.${typeName}>, ${allowlist}>`;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
surfaceType = `_Surface<AST.${typeName}>`;
|
|
84
|
+
}
|
|
85
|
+
lines.push(`type _Fwd_${typeName} = z.infer<typeof ${typeName}Schema> extends ${surfaceType} ? true : never;`);
|
|
86
|
+
lines.push(`type _Rev_${typeName} = ${surfaceType} extends z.infer<typeof ${typeName}Schema> ? true : never;`);
|
|
87
|
+
lines.push('');
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
source: `${lines.join('\n').trim()}\n`,
|
|
91
|
+
missingAstTypes
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function resolveAstTypesPath(configDir, langiumOutDir, explicitAstTypesPath) {
|
|
95
|
+
if (explicitAstTypesPath) {
|
|
96
|
+
return resolve(configDir, explicitAstTypesPath);
|
|
97
|
+
}
|
|
98
|
+
return resolve(langiumOutDir, 'ast.ts');
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=conformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
|
package/dist/extractor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,YAAY,EAKZ,iBAAiB,EAEjB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,YAAY,EAKZ,iBAAiB,EAEjB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAqShD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,iBAAiB,EAAE,CAwKzG"}
|