@formspec/build 0.1.0-alpha.52 → 0.1.0-alpha.53
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/analyzer/tsdoc-parser.d.ts.map +1 -1
- package/dist/browser.cjs +17 -0
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.ts +8 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +19 -0
- package/dist/browser.js.map +1 -1
- package/dist/build-alpha.d.ts +21 -0
- package/dist/build-beta.d.ts +21 -0
- package/dist/build-internal.d.ts +21 -0
- package/dist/build.d.ts +21 -0
- package/dist/cli/logger.d.ts +22 -0
- package/dist/cli/logger.d.ts.map +1 -0
- package/dist/cli.cjs +123 -21
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +119 -20
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +88 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -20
- package/dist/index.js.map +1 -1
- package/dist/internals.cjs +63 -17
- package/dist/internals.cjs.map +1 -1
- package/dist/internals.js +63 -17
- package/dist/internals.js.map +1 -1
- package/dist/json-schema/generator.d.ts +6 -1
- package/dist/json-schema/generator.d.ts.map +1 -1
- package/dist/ui-schema/generator.d.ts +6 -1
- package/dist/ui-schema/generator.d.ts.map +1 -1
- package/package.json +11 -5
package/dist/index.d.ts
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* @packageDocumentation
|
|
24
24
|
*/
|
|
25
|
-
import type { FormElement, FormSpec } from "@formspec/core";
|
|
25
|
+
import type { FormElement, FormSpec, LoggerLike } from "@formspec/core";
|
|
26
26
|
import { type GenerateJsonSchemaOptions } from "./json-schema/generator.js";
|
|
27
27
|
import { type GenerateUiSchemaOptions } from "./ui-schema/generator.js";
|
|
28
28
|
import { type JsonSchema2020 } from "./json-schema/ir-generator.js";
|
|
@@ -72,6 +72,11 @@ export interface BuildResult {
|
|
|
72
72
|
* @public
|
|
73
73
|
*/
|
|
74
74
|
export interface BuildFormSchemasOptions extends GenerateJsonSchemaOptions, GenerateUiSchemaOptions {
|
|
75
|
+
/**
|
|
76
|
+
* Optional logger for diagnostic output. Defaults to a no-op logger so
|
|
77
|
+
* existing callers produce no output.
|
|
78
|
+
*/
|
|
79
|
+
readonly logger?: LoggerLike | undefined;
|
|
75
80
|
}
|
|
76
81
|
/**
|
|
77
82
|
* Builds both JSON Schema and UI Schema from a FormSpec.
|
|
@@ -115,6 +120,11 @@ export interface WriteSchemasOptions extends GenerateJsonSchemaOptions {
|
|
|
115
120
|
readonly name?: string;
|
|
116
121
|
/** Number of spaces for JSON indentation. Defaults to 2 */
|
|
117
122
|
readonly indent?: number;
|
|
123
|
+
/**
|
|
124
|
+
* Optional logger for diagnostic output. Defaults to a no-op logger so
|
|
125
|
+
* existing callers produce no output.
|
|
126
|
+
*/
|
|
127
|
+
readonly logger?: LoggerLike | undefined;
|
|
118
128
|
}
|
|
119
129
|
/**
|
|
120
130
|
* Result of writing schemas to disk.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { noopLogger as noopLogger3 } from "@formspec/core";
|
|
3
|
+
|
|
4
|
+
// src/json-schema/generator.ts
|
|
5
|
+
import { noopLogger } from "@formspec/core";
|
|
6
|
+
|
|
1
7
|
// src/canonicalize/chain-dsl-canonicalizer.ts
|
|
2
8
|
import { IR_VERSION, _getFormSpecMetadataPolicy } from "@formspec/core/internals";
|
|
3
9
|
|
|
@@ -1654,10 +1660,14 @@ function assignVendorPrefixedExtensionKeywords(schema, extensionSchema, vendorPr
|
|
|
1654
1660
|
|
|
1655
1661
|
// src/json-schema/generator.ts
|
|
1656
1662
|
function generateJsonSchema(form, options) {
|
|
1663
|
+
const logger = (options?.logger ?? noopLogger).child({ stage: "ir" });
|
|
1657
1664
|
const metadata = options?.metadata;
|
|
1658
1665
|
const vendorPrefix = options?.vendorPrefix;
|
|
1659
1666
|
const enumSerialization = options?.enumSerialization;
|
|
1667
|
+
logger.debug("canonicalizing chain DSL to IR");
|
|
1660
1668
|
const ir = canonicalizeChainDSL(form, metadata !== void 0 ? { metadata } : void 0);
|
|
1669
|
+
const schemaLogger = (options?.logger ?? noopLogger).child({ stage: "schema" });
|
|
1670
|
+
schemaLogger.debug("generating JSON Schema from IR");
|
|
1661
1671
|
const internalOptions = vendorPrefix === void 0 && enumSerialization === void 0 ? void 0 : {
|
|
1662
1672
|
...vendorPrefix !== void 0 && { vendorPrefix },
|
|
1663
1673
|
...enumSerialization !== void 0 && { enumSerialization }
|
|
@@ -1665,6 +1675,9 @@ function generateJsonSchema(form, options) {
|
|
|
1665
1675
|
return generateJsonSchemaFromIR(ir, internalOptions);
|
|
1666
1676
|
}
|
|
1667
1677
|
|
|
1678
|
+
// src/ui-schema/generator.ts
|
|
1679
|
+
import { noopLogger as noopLogger2 } from "@formspec/core";
|
|
1680
|
+
|
|
1668
1681
|
// src/ui-schema/schema.ts
|
|
1669
1682
|
import { z } from "zod";
|
|
1670
1683
|
var jsonPointerSchema = z.string();
|
|
@@ -1924,10 +1937,14 @@ function collectFieldNameMap(elements) {
|
|
|
1924
1937
|
|
|
1925
1938
|
// src/ui-schema/generator.ts
|
|
1926
1939
|
function generateUiSchema(form, options) {
|
|
1940
|
+
const logger = (options?.logger ?? noopLogger2).child({ stage: "ir" });
|
|
1941
|
+
logger.debug("canonicalizing chain DSL to IR for UI Schema generation");
|
|
1927
1942
|
const ir = canonicalizeChainDSL(
|
|
1928
1943
|
form,
|
|
1929
1944
|
options?.metadata !== void 0 ? { metadata: options.metadata } : void 0
|
|
1930
1945
|
);
|
|
1946
|
+
const schemaLogger = (options?.logger ?? noopLogger2).child({ stage: "schema" });
|
|
1947
|
+
schemaLogger.debug("generating UI Schema from IR");
|
|
1931
1948
|
return generateUiSchemaFromIR(ir);
|
|
1932
1949
|
}
|
|
1933
1950
|
|
|
@@ -2388,39 +2405,85 @@ function isNonReferenceIdentifier(node) {
|
|
|
2388
2405
|
}
|
|
2389
2406
|
return false;
|
|
2390
2407
|
}
|
|
2391
|
-
function
|
|
2408
|
+
function astReferencesImportedName(root, importedNames) {
|
|
2392
2409
|
if (importedNames.size === 0) {
|
|
2393
2410
|
return false;
|
|
2394
2411
|
}
|
|
2395
|
-
let
|
|
2412
|
+
let found = false;
|
|
2396
2413
|
const visit = (node) => {
|
|
2397
|
-
if (
|
|
2398
|
-
return;
|
|
2399
|
-
}
|
|
2414
|
+
if (found) return;
|
|
2400
2415
|
if (ts4.isIdentifier(node) && importedNames.has(node.text) && !isNonReferenceIdentifier(node)) {
|
|
2401
|
-
|
|
2416
|
+
found = true;
|
|
2402
2417
|
return;
|
|
2403
2418
|
}
|
|
2404
2419
|
ts4.forEachChild(node, visit);
|
|
2405
2420
|
};
|
|
2406
|
-
visit(
|
|
2407
|
-
return
|
|
2421
|
+
visit(root);
|
|
2422
|
+
return found;
|
|
2423
|
+
}
|
|
2424
|
+
function getObjectMembers(statement) {
|
|
2425
|
+
if (ts4.isInterfaceDeclaration(statement)) {
|
|
2426
|
+
return statement.members;
|
|
2427
|
+
}
|
|
2428
|
+
if (ts4.isTypeLiteralNode(statement.type)) {
|
|
2429
|
+
return statement.type.members;
|
|
2430
|
+
}
|
|
2431
|
+
return void 0;
|
|
2432
|
+
}
|
|
2433
|
+
function rewriteImportedMemberTypes(statement, sourceFile, importedNames) {
|
|
2434
|
+
const members = getObjectMembers(statement);
|
|
2435
|
+
if (members === void 0) {
|
|
2436
|
+
return null;
|
|
2437
|
+
}
|
|
2438
|
+
const replacements = [];
|
|
2439
|
+
for (const member of members) {
|
|
2440
|
+
if (!ts4.isPropertySignature(member)) {
|
|
2441
|
+
if (astReferencesImportedName(member, importedNames)) {
|
|
2442
|
+
return null;
|
|
2443
|
+
}
|
|
2444
|
+
continue;
|
|
2445
|
+
}
|
|
2446
|
+
const typeAnnotation = member.type;
|
|
2447
|
+
if (typeAnnotation === void 0) continue;
|
|
2448
|
+
if (astReferencesImportedName(typeAnnotation, importedNames)) {
|
|
2449
|
+
replacements.push({
|
|
2450
|
+
start: typeAnnotation.getStart(sourceFile),
|
|
2451
|
+
end: typeAnnotation.getEnd()
|
|
2452
|
+
});
|
|
2453
|
+
}
|
|
2454
|
+
}
|
|
2455
|
+
if (replacements.length === 0) {
|
|
2456
|
+
return statement.getText(sourceFile);
|
|
2457
|
+
}
|
|
2458
|
+
const stmtStart = statement.getStart(sourceFile);
|
|
2459
|
+
let result = statement.getText(sourceFile);
|
|
2460
|
+
for (const { start, end } of [...replacements].reverse()) {
|
|
2461
|
+
result = result.slice(0, start - stmtStart) + "unknown" + result.slice(end - stmtStart);
|
|
2462
|
+
}
|
|
2463
|
+
return result;
|
|
2408
2464
|
}
|
|
2409
2465
|
function buildSupportingDeclarations(sourceFile, extensionTypeNames) {
|
|
2410
2466
|
const importedNames = collectImportedNames(sourceFile);
|
|
2411
2467
|
const importedNamesToSkip = new Set(
|
|
2412
2468
|
[...importedNames].filter((name) => !extensionTypeNames.has(name))
|
|
2413
2469
|
);
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
if (ts4.
|
|
2417
|
-
if (ts4.
|
|
2418
|
-
|
|
2419
|
-
if (
|
|
2420
|
-
|
|
2470
|
+
const result = [];
|
|
2471
|
+
for (const statement of sourceFile.statements) {
|
|
2472
|
+
if (ts4.isImportDeclaration(statement)) continue;
|
|
2473
|
+
if (ts4.isImportEqualsDeclaration(statement)) continue;
|
|
2474
|
+
if (ts4.isExportDeclaration(statement) && statement.moduleSpecifier !== void 0) continue;
|
|
2475
|
+
if (!astReferencesImportedName(statement, importedNamesToSkip)) {
|
|
2476
|
+
result.push(statement.getText(sourceFile));
|
|
2477
|
+
continue;
|
|
2421
2478
|
}
|
|
2422
|
-
|
|
2423
|
-
|
|
2479
|
+
if (ts4.isInterfaceDeclaration(statement) || ts4.isTypeAliasDeclaration(statement)) {
|
|
2480
|
+
const rewritten = rewriteImportedMemberTypes(statement, sourceFile, importedNamesToSkip);
|
|
2481
|
+
if (rewritten !== null) {
|
|
2482
|
+
result.push(rewritten);
|
|
2483
|
+
}
|
|
2484
|
+
}
|
|
2485
|
+
}
|
|
2486
|
+
return result;
|
|
2424
2487
|
}
|
|
2425
2488
|
function pushUniqueCompilerDiagnostics(target, additions) {
|
|
2426
2489
|
for (const diagnostic of additions) {
|
|
@@ -6697,6 +6760,8 @@ function annotationKey(annotation) {
|
|
|
6697
6760
|
|
|
6698
6761
|
// src/index.ts
|
|
6699
6762
|
function buildFormSchemas(form, options) {
|
|
6763
|
+
const logger = options?.logger ?? noopLogger3;
|
|
6764
|
+
logger.debug("buildFormSchemas: starting schema generation");
|
|
6700
6765
|
return {
|
|
6701
6766
|
jsonSchema: generateJsonSchema(form, options),
|
|
6702
6767
|
uiSchema: generateUiSchema(form, options)
|
|
@@ -6709,12 +6774,15 @@ function writeSchemas(form, options) {
|
|
|
6709
6774
|
indent = 2,
|
|
6710
6775
|
vendorPrefix,
|
|
6711
6776
|
enumSerialization,
|
|
6712
|
-
metadata
|
|
6777
|
+
metadata,
|
|
6778
|
+
logger: rawLogger
|
|
6713
6779
|
} = options;
|
|
6714
|
-
const
|
|
6780
|
+
const logger = (rawLogger ?? noopLogger3).child({ stage: "write" });
|
|
6781
|
+
const buildOptions = vendorPrefix === void 0 && enumSerialization === void 0 && metadata === void 0 ? { logger: rawLogger } : {
|
|
6715
6782
|
...vendorPrefix !== void 0 && { vendorPrefix },
|
|
6716
6783
|
...enumSerialization !== void 0 && { enumSerialization },
|
|
6717
|
-
...metadata !== void 0 && { metadata }
|
|
6784
|
+
...metadata !== void 0 && { metadata },
|
|
6785
|
+
logger: rawLogger
|
|
6718
6786
|
};
|
|
6719
6787
|
const { jsonSchema, uiSchema: uiSchema2 } = buildFormSchemas(form, buildOptions);
|
|
6720
6788
|
if (!fs.existsSync(outDir)) {
|
|
@@ -6722,7 +6790,9 @@ function writeSchemas(form, options) {
|
|
|
6722
6790
|
}
|
|
6723
6791
|
const jsonSchemaPath = path3.join(outDir, `${name}-schema.json`);
|
|
6724
6792
|
const uiSchemaPath = path3.join(outDir, `${name}-uischema.json`);
|
|
6793
|
+
logger.debug("writing JSON Schema", { path: jsonSchemaPath });
|
|
6725
6794
|
fs.writeFileSync(jsonSchemaPath, JSON.stringify(jsonSchema, null, indent));
|
|
6795
|
+
logger.debug("writing UI Schema", { path: uiSchemaPath });
|
|
6726
6796
|
fs.writeFileSync(uiSchemaPath, JSON.stringify(uiSchema2, null, indent));
|
|
6727
6797
|
return { jsonSchemaPath, uiSchemaPath };
|
|
6728
6798
|
}
|