@formspec/build 0.1.0-alpha.37 → 0.1.0-alpha.39
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 +74 -0
- package/dist/analyzer/program.d.ts +13 -0
- package/dist/analyzer/program.d.ts.map +1 -1
- package/dist/analyzer/tsdoc-parser.d.ts.map +1 -1
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/build-alpha.d.ts +268 -5
- package/dist/build-beta.d.ts +268 -5
- package/dist/build-internal.d.ts +268 -5
- package/dist/build.d.ts +268 -5
- package/dist/cli.cjs +302 -48
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +302 -48
- package/dist/cli.js.map +1 -1
- package/dist/generators/class-schema.d.ts +184 -5
- package/dist/generators/class-schema.d.ts.map +1 -1
- package/dist/generators/discovered-schema.d.ts +9 -0
- package/dist/generators/discovered-schema.d.ts.map +1 -1
- package/dist/index.cjs +303 -48
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +299 -48
- package/dist/index.js.map +1 -1
- package/dist/internals.cjs +157 -34
- package/dist/internals.cjs.map +1 -1
- package/dist/internals.d.ts +4 -3
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +155 -34
- package/dist/internals.js.map +1 -1
- package/dist/validate/constraint-validator.d.ts +64 -2
- package/dist/validate/constraint-validator.d.ts.map +1 -1
- package/dist/validate/index.d.ts +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -35,15 +35,19 @@ export type { JSONSchema7, JSONSchemaType, ExtendedJSONSchema7, FormSpecSchemaEx
|
|
|
35
35
|
export { createExtensionRegistry } from "./extensions/index.js";
|
|
36
36
|
export type { ExtensionRegistry } from "./extensions/index.js";
|
|
37
37
|
export type { UISchema, UISchemaElement, UISchemaElementBase, UISchemaElementType, ControlElement, VerticalLayout, HorizontalLayout, GroupLayout, Categorization, Category, LabelElement, Rule, RuleEffect, RuleConditionSchema, SchemaBasedCondition, } from "./ui-schema/types.js";
|
|
38
|
-
export type { DiscriminatorResolutionOptions, GenerateFromClassOptions, GenerateFromClassResult, GenerateSchemasOptions, GenerateSchemasFromProgramOptions, StaticSchemaGenerationOptions, } from "./generators/class-schema.js";
|
|
38
|
+
export type { DetailedClassSchemasResult, DetailedSchemaGenerationTargetResult, DiscriminatorResolutionOptions, GenerateFromClassOptions, GenerateFromClassResult, GenerateSchemasOptions, GenerateSchemasBatchFromProgramOptions, GenerateSchemasBatchOptions, GenerateSchemasFromProgramOptions, SchemaGenerationTarget, StaticSchemaGenerationOptions, } from "./generators/class-schema.js";
|
|
39
39
|
export type { StaticBuildContext } from "./static-build.js";
|
|
40
|
+
export type { ValidateIROptions, ValidationDiagnostic, ValidationDiagnosticLocation, ValidationDiagnosticSeverity, ValidationResult, } from "./validate/index.js";
|
|
40
41
|
export type { DiscoveredTypeSchemas, GenerateSchemasFromDeclarationOptions, GenerateSchemasFromParameterOptions, GenerateSchemasFromReturnTypeOptions, GenerateSchemasFromTypeOptions, SchemaSourceDeclaration, } from "./generators/discovered-schema.js";
|
|
41
42
|
export type { BuildMixedAuthoringSchemasOptions, MixedAuthoringSchemas, } from "./generators/mixed-authoring.js";
|
|
42
43
|
export { jsonSchema7Schema } from "./json-schema/schema.js";
|
|
43
44
|
export { uiSchema as uiSchemaSchema } from "./ui-schema/schema.js";
|
|
44
45
|
export { generateJsonSchema } from "./json-schema/generator.js";
|
|
45
46
|
export { generateUiSchema } from "./ui-schema/generator.js";
|
|
46
|
-
export {
|
|
47
|
+
export { generateSchemasBatch, generateSchemasBatchFromProgram, generateSchemasFromClass, } from "./generators/class-schema.js";
|
|
48
|
+
export { generateSchemas } from "./generators/class-schema.js";
|
|
49
|
+
export { generateSchemasFromProgram } from "./generators/class-schema.js";
|
|
50
|
+
export { generateSchemasDetailed, generateSchemasFromProgramDetailed, } from "./generators/class-schema.js";
|
|
47
51
|
export { createStaticBuildContext, createStaticBuildContextFromProgram, resolveModuleExport, resolveModuleExportDeclaration, } from "./static-build.js";
|
|
48
52
|
export { generateSchemasFromDeclaration, generateSchemasFromParameter, generateSchemasFromReturnType, generateSchemasFromType, } from "./generators/discovered-schema.js";
|
|
49
53
|
export { buildMixedAuthoringSchemas } from "./generators/mixed-authoring.js";
|
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;AAC5D,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQrD,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,YAAY,EACV,uCAAuC,EACvC,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,YAAY,EACV,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,iCAAiC,EACjC,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,qBAAqB,EACrB,qCAAqC,EACrC,mCAAmC,EACnC,oCAAoC,EACpC,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,wBAAwB,
|
|
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;AAC5D,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQrD,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,YAAY,EACV,uCAAuC,EACvC,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,YAAY,EACV,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,0BAA0B,EAC1B,oCAAoC,EACpC,8BAA8B,EAC9B,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,sCAAsC,EACtC,2BAA2B,EAC3B,iCAAiC,EACjC,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,EAC5B,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,qBAAqB,EACrB,qCAAqC,EACrC,mCAAmC,EACnC,oCAAoC,EACpC,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EACL,uBAAuB,EACvB,kCAAkC,GACnC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,wBAAwB,EACxB,mCAAmC,EACnC,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,uBACf,SAAQ,yBAAyB,EAAE,uBAAuB;CAAG;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,WAAW,EAAE,EAC/D,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,OAAO,CAAC,EAAE,uBAAuB,GAChC,WAAW,CAKb;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,WAAW,EAAE,EAC3D,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CAsBpB"}
|
package/dist/index.js
CHANGED
|
@@ -1971,7 +1971,7 @@ var jsonSchema7Schema = z3.lazy(
|
|
|
1971
1971
|
);
|
|
1972
1972
|
|
|
1973
1973
|
// src/generators/class-schema.ts
|
|
1974
|
-
import "typescript";
|
|
1974
|
+
import * as ts5 from "typescript";
|
|
1975
1975
|
|
|
1976
1976
|
// src/analyzer/program.ts
|
|
1977
1977
|
import * as ts4 from "typescript";
|
|
@@ -2147,6 +2147,16 @@ function buildSupportingDeclarations(sourceFile, extensionTypeNames) {
|
|
|
2147
2147
|
return true;
|
|
2148
2148
|
}).map((statement) => statement.getText(sourceFile));
|
|
2149
2149
|
}
|
|
2150
|
+
function pushUniqueCompilerDiagnostics(target, additions) {
|
|
2151
|
+
for (const diagnostic of additions) {
|
|
2152
|
+
if ((diagnostic.code === "UNSUPPORTED_CUSTOM_TYPE_OVERRIDE" || diagnostic.code === "SYNTHETIC_SETUP_FAILURE") && target.some(
|
|
2153
|
+
(existing) => existing.code === diagnostic.code && existing.message === diagnostic.message
|
|
2154
|
+
)) {
|
|
2155
|
+
continue;
|
|
2156
|
+
}
|
|
2157
|
+
target.push(diagnostic);
|
|
2158
|
+
}
|
|
2159
|
+
}
|
|
2150
2160
|
function renderSyntheticArgumentExpression(valueKind, argumentText) {
|
|
2151
2161
|
const trimmed = argumentText.trim();
|
|
2152
2162
|
if (trimmed === "") {
|
|
@@ -2413,6 +2423,16 @@ function buildCompilerBackedConstraintDiagnostics(node, sourceFile, tagName, par
|
|
|
2413
2423
|
if (result.diagnostics.length === 0) {
|
|
2414
2424
|
return [];
|
|
2415
2425
|
}
|
|
2426
|
+
const setupDiagnostic = result.diagnostics.find((diagnostic) => diagnostic.kind !== "typescript");
|
|
2427
|
+
if (setupDiagnostic !== void 0) {
|
|
2428
|
+
return [
|
|
2429
|
+
makeDiagnostic(
|
|
2430
|
+
setupDiagnostic.kind === "unsupported-custom-type-override" ? "UNSUPPORTED_CUSTOM_TYPE_OVERRIDE" : "SYNTHETIC_SETUP_FAILURE",
|
|
2431
|
+
setupDiagnostic.message,
|
|
2432
|
+
provenance
|
|
2433
|
+
)
|
|
2434
|
+
];
|
|
2435
|
+
}
|
|
2416
2436
|
const expectedLabel = definition.valueKind === null ? "compatible argument" : capabilityLabel(definition.valueKind);
|
|
2417
2437
|
return [
|
|
2418
2438
|
makeDiagnostic(
|
|
@@ -2578,7 +2598,7 @@ function parseTSDocTags(node, file = "", options) {
|
|
|
2578
2598
|
options
|
|
2579
2599
|
);
|
|
2580
2600
|
if (compilerDiagnostics.length > 0) {
|
|
2581
|
-
diagnostics
|
|
2601
|
+
pushUniqueCompilerDiagnostics(diagnostics, compilerDiagnostics);
|
|
2582
2602
|
continue;
|
|
2583
2603
|
}
|
|
2584
2604
|
const constraintNode = parseConstraintTagValue(
|
|
@@ -2665,7 +2685,7 @@ function parseTSDocTags(node, file = "", options) {
|
|
|
2665
2685
|
options
|
|
2666
2686
|
);
|
|
2667
2687
|
if (compilerDiagnostics.length > 0) {
|
|
2668
|
-
diagnostics
|
|
2688
|
+
pushUniqueCompilerDiagnostics(diagnostics, compilerDiagnostics);
|
|
2669
2689
|
continue;
|
|
2670
2690
|
}
|
|
2671
2691
|
const constraintNode = parseConstraintTagValue(
|
|
@@ -2699,7 +2719,7 @@ function parseTSDocTags(node, file = "", options) {
|
|
|
2699
2719
|
options
|
|
2700
2720
|
);
|
|
2701
2721
|
if (compilerDiagnostics.length > 0) {
|
|
2702
|
-
diagnostics
|
|
2722
|
+
pushUniqueCompilerDiagnostics(diagnostics, compilerDiagnostics);
|
|
2703
2723
|
continue;
|
|
2704
2724
|
}
|
|
2705
2725
|
const constraintNode = parseConstraintTagValue(
|
|
@@ -5123,29 +5143,35 @@ function analyzeNamedTypeToIR(filePath, typeName, extensionRegistry, metadataPol
|
|
|
5123
5143
|
discriminatorOptions
|
|
5124
5144
|
);
|
|
5125
5145
|
}
|
|
5126
|
-
function
|
|
5146
|
+
function analyzeNamedTypeToIRFromProgramContextDetailed(ctx, filePath, typeName, extensionRegistry, metadataPolicy, discriminatorOptions) {
|
|
5127
5147
|
const analysisFilePath = path.resolve(filePath);
|
|
5128
5148
|
const classDecl = findClassByName(ctx.sourceFile, typeName);
|
|
5129
5149
|
if (classDecl !== null) {
|
|
5130
|
-
return
|
|
5131
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5150
|
+
return {
|
|
5151
|
+
ok: true,
|
|
5152
|
+
analysis: analyzeClassToIR(
|
|
5153
|
+
classDecl,
|
|
5154
|
+
ctx.checker,
|
|
5155
|
+
analysisFilePath,
|
|
5156
|
+
extensionRegistry,
|
|
5157
|
+
metadataPolicy,
|
|
5158
|
+
discriminatorOptions
|
|
5159
|
+
)
|
|
5160
|
+
};
|
|
5138
5161
|
}
|
|
5139
5162
|
const interfaceDecl = findInterfaceByName(ctx.sourceFile, typeName);
|
|
5140
5163
|
if (interfaceDecl !== null) {
|
|
5141
|
-
return
|
|
5142
|
-
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
|
|
5147
|
-
|
|
5148
|
-
|
|
5164
|
+
return {
|
|
5165
|
+
ok: true,
|
|
5166
|
+
analysis: analyzeInterfaceToIR(
|
|
5167
|
+
interfaceDecl,
|
|
5168
|
+
ctx.checker,
|
|
5169
|
+
analysisFilePath,
|
|
5170
|
+
extensionRegistry,
|
|
5171
|
+
metadataPolicy,
|
|
5172
|
+
discriminatorOptions
|
|
5173
|
+
)
|
|
5174
|
+
};
|
|
5149
5175
|
}
|
|
5150
5176
|
const typeAlias = findTypeAliasByName(ctx.sourceFile, typeName);
|
|
5151
5177
|
if (typeAlias !== null) {
|
|
@@ -5158,11 +5184,20 @@ function analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensi
|
|
|
5158
5184
|
discriminatorOptions
|
|
5159
5185
|
);
|
|
5160
5186
|
if (result.ok) {
|
|
5161
|
-
return result.analysis;
|
|
5187
|
+
return { ok: true, analysis: result.analysis };
|
|
5162
5188
|
}
|
|
5163
5189
|
const fallbackEligible = result.kind === "not-object-like" && isResolvableObjectLikeAliasTypeNode(typeAlias.type) && containsTypeReferenceInObjectLikeAlias(typeAlias.type);
|
|
5164
5190
|
if (!fallbackEligible) {
|
|
5165
|
-
|
|
5191
|
+
return {
|
|
5192
|
+
ok: false,
|
|
5193
|
+
diagnostics: [
|
|
5194
|
+
makeProgramDiagnostic(
|
|
5195
|
+
result.kind === "duplicate-properties" ? "DUPLICATE_ROOT_PROPERTIES" : "UNSUPPORTED_ROOT_TYPE",
|
|
5196
|
+
result.error,
|
|
5197
|
+
makeNodeProvenance(typeAlias, analysisFilePath)
|
|
5198
|
+
)
|
|
5199
|
+
]
|
|
5200
|
+
};
|
|
5166
5201
|
}
|
|
5167
5202
|
const duplicatePropertyNames = findFallbackAliasDuplicatePropertyNames(
|
|
5168
5203
|
typeAlias.type,
|
|
@@ -5171,9 +5206,16 @@ function analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensi
|
|
|
5171
5206
|
if (duplicatePropertyNames.length > 0) {
|
|
5172
5207
|
const sourceFile = typeAlias.getSourceFile();
|
|
5173
5208
|
const { line } = sourceFile.getLineAndCharacterOfPosition(typeAlias.getStart());
|
|
5174
|
-
|
|
5175
|
-
|
|
5176
|
-
|
|
5209
|
+
return {
|
|
5210
|
+
ok: false,
|
|
5211
|
+
diagnostics: [
|
|
5212
|
+
makeProgramDiagnostic(
|
|
5213
|
+
"DUPLICATE_ROOT_PROPERTIES",
|
|
5214
|
+
`Type alias "${typeAlias.name.text}" at line ${String(line + 1)} contains duplicate property names across object-like members: ${duplicatePropertyNames.join(", ")}`,
|
|
5215
|
+
makeNodeProvenance(typeAlias, analysisFilePath)
|
|
5216
|
+
)
|
|
5217
|
+
]
|
|
5218
|
+
};
|
|
5177
5219
|
}
|
|
5178
5220
|
const rootInfo = analyzeDeclarationRootInfo(
|
|
5179
5221
|
typeAlias,
|
|
@@ -5203,13 +5245,71 @@ function analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensi
|
|
|
5203
5245
|
diagnostics
|
|
5204
5246
|
);
|
|
5205
5247
|
if (fallbackAnalysis !== null) {
|
|
5206
|
-
return fallbackAnalysis;
|
|
5248
|
+
return { ok: true, analysis: fallbackAnalysis };
|
|
5207
5249
|
}
|
|
5208
|
-
|
|
5250
|
+
return {
|
|
5251
|
+
ok: false,
|
|
5252
|
+
diagnostics: [
|
|
5253
|
+
makeProgramDiagnostic(
|
|
5254
|
+
"UNSUPPORTED_ROOT_TYPE",
|
|
5255
|
+
result.error,
|
|
5256
|
+
makeNodeProvenance(typeAlias, analysisFilePath)
|
|
5257
|
+
)
|
|
5258
|
+
]
|
|
5259
|
+
};
|
|
5209
5260
|
}
|
|
5210
|
-
|
|
5211
|
-
|
|
5261
|
+
return {
|
|
5262
|
+
ok: false,
|
|
5263
|
+
diagnostics: [
|
|
5264
|
+
makeProgramDiagnostic(
|
|
5265
|
+
"TYPE_NOT_FOUND",
|
|
5266
|
+
`Type "${typeName}" not found as a class, interface, or type alias in ${analysisFilePath}`,
|
|
5267
|
+
makeFileProvenance(analysisFilePath)
|
|
5268
|
+
)
|
|
5269
|
+
]
|
|
5270
|
+
};
|
|
5271
|
+
}
|
|
5272
|
+
function analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensionRegistry, metadataPolicy, discriminatorOptions) {
|
|
5273
|
+
const result = analyzeNamedTypeToIRFromProgramContextDetailed(
|
|
5274
|
+
ctx,
|
|
5275
|
+
filePath,
|
|
5276
|
+
typeName,
|
|
5277
|
+
extensionRegistry,
|
|
5278
|
+
metadataPolicy,
|
|
5279
|
+
discriminatorOptions
|
|
5212
5280
|
);
|
|
5281
|
+
if (result.ok) {
|
|
5282
|
+
return result.analysis;
|
|
5283
|
+
}
|
|
5284
|
+
throw new Error(result.diagnostics.map((diagnostic) => diagnostic.message).join("\n"));
|
|
5285
|
+
}
|
|
5286
|
+
function makeProgramDiagnostic(code, message, primaryLocation) {
|
|
5287
|
+
return {
|
|
5288
|
+
code,
|
|
5289
|
+
message,
|
|
5290
|
+
severity: "error",
|
|
5291
|
+
primaryLocation,
|
|
5292
|
+
relatedLocations: []
|
|
5293
|
+
};
|
|
5294
|
+
}
|
|
5295
|
+
function makeNodeProvenance(node, filePath) {
|
|
5296
|
+
const sourceFile = node.getSourceFile();
|
|
5297
|
+
const position = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
5298
|
+
return {
|
|
5299
|
+
surface: "tsdoc",
|
|
5300
|
+
file: filePath,
|
|
5301
|
+
line: position.line + 1,
|
|
5302
|
+
column: position.character,
|
|
5303
|
+
length: node.getWidth()
|
|
5304
|
+
};
|
|
5305
|
+
}
|
|
5306
|
+
function makeFileProvenance(filePath) {
|
|
5307
|
+
return {
|
|
5308
|
+
surface: "tsdoc",
|
|
5309
|
+
file: filePath,
|
|
5310
|
+
line: 1,
|
|
5311
|
+
column: 0
|
|
5312
|
+
};
|
|
5213
5313
|
}
|
|
5214
5314
|
|
|
5215
5315
|
// src/validate/constraint-validator.ts
|
|
@@ -5289,11 +5389,25 @@ function validateIR(ir, options) {
|
|
|
5289
5389
|
|
|
5290
5390
|
// src/generators/class-schema.ts
|
|
5291
5391
|
function generateClassSchemas(analysis, source, options) {
|
|
5292
|
-
const
|
|
5392
|
+
const result = generateClassSchemasDetailed(analysis, source, options);
|
|
5393
|
+
if (!result.ok || result.jsonSchema === void 0 || result.uiSchema === void 0) {
|
|
5394
|
+
throw new Error(formatValidationError(result.diagnostics));
|
|
5395
|
+
}
|
|
5396
|
+
return {
|
|
5397
|
+
jsonSchema: result.jsonSchema,
|
|
5398
|
+
uiSchema: result.uiSchema
|
|
5399
|
+
};
|
|
5400
|
+
}
|
|
5401
|
+
function generateClassSchemasDetailed(analysis, source, options) {
|
|
5402
|
+
const analysisDiagnostics = analysis.diagnostics ?? [];
|
|
5403
|
+
const errorDiagnostics = analysisDiagnostics.filter(
|
|
5293
5404
|
(diagnostic) => diagnostic.severity === "error"
|
|
5294
5405
|
);
|
|
5295
|
-
if (errorDiagnostics
|
|
5296
|
-
|
|
5406
|
+
if (errorDiagnostics.length > 0) {
|
|
5407
|
+
return {
|
|
5408
|
+
ok: false,
|
|
5409
|
+
diagnostics: analysisDiagnostics
|
|
5410
|
+
};
|
|
5297
5411
|
}
|
|
5298
5412
|
const ir = canonicalizeTSDoc(
|
|
5299
5413
|
analysis,
|
|
@@ -5307,9 +5421,14 @@ function generateClassSchemas(analysis, source, options) {
|
|
|
5307
5421
|
...options?.vendorPrefix !== void 0 && { vendorPrefix: options.vendorPrefix }
|
|
5308
5422
|
});
|
|
5309
5423
|
if (!validationResult.valid) {
|
|
5310
|
-
|
|
5424
|
+
return {
|
|
5425
|
+
ok: false,
|
|
5426
|
+
diagnostics: [...analysisDiagnostics, ...validationResult.diagnostics]
|
|
5427
|
+
};
|
|
5311
5428
|
}
|
|
5312
5429
|
return {
|
|
5430
|
+
ok: true,
|
|
5431
|
+
diagnostics: [...analysisDiagnostics, ...validationResult.diagnostics],
|
|
5313
5432
|
jsonSchema: generateJsonSchemaFromIR(ir, options),
|
|
5314
5433
|
uiSchema: generateUiSchemaFromIR(ir)
|
|
5315
5434
|
};
|
|
@@ -5351,25 +5470,127 @@ function generateSchemasFromClass(options) {
|
|
|
5351
5470
|
);
|
|
5352
5471
|
}
|
|
5353
5472
|
function generateSchemas(options) {
|
|
5354
|
-
const
|
|
5473
|
+
const result = generateSchemasDetailedInternal(options);
|
|
5474
|
+
if (options.errorReporting === "diagnostics") {
|
|
5475
|
+
return result;
|
|
5476
|
+
}
|
|
5477
|
+
if (!result.ok || result.jsonSchema === void 0 || result.uiSchema === void 0) {
|
|
5478
|
+
throw new Error(formatValidationError(result.diagnostics));
|
|
5479
|
+
}
|
|
5480
|
+
return {
|
|
5481
|
+
jsonSchema: result.jsonSchema,
|
|
5482
|
+
uiSchema: result.uiSchema
|
|
5483
|
+
};
|
|
5484
|
+
}
|
|
5485
|
+
function generateSchemasFromProgram(options) {
|
|
5486
|
+
const result = generateSchemasFromProgramDetailedInternal(options);
|
|
5487
|
+
if (options.errorReporting === "diagnostics") {
|
|
5488
|
+
return result;
|
|
5489
|
+
}
|
|
5490
|
+
if (!result.ok || result.jsonSchema === void 0 || result.uiSchema === void 0) {
|
|
5491
|
+
throw new Error(formatValidationError(result.diagnostics));
|
|
5492
|
+
}
|
|
5493
|
+
return {
|
|
5494
|
+
jsonSchema: result.jsonSchema,
|
|
5495
|
+
uiSchema: result.uiSchema
|
|
5496
|
+
};
|
|
5497
|
+
}
|
|
5498
|
+
function generateSchemasDetailed(options) {
|
|
5499
|
+
return generateSchemas({
|
|
5500
|
+
...options,
|
|
5501
|
+
errorReporting: "diagnostics"
|
|
5502
|
+
});
|
|
5503
|
+
}
|
|
5504
|
+
function generateSchemasDetailedInternal(options) {
|
|
5505
|
+
let ctx;
|
|
5506
|
+
try {
|
|
5507
|
+
ctx = createProgramContext(options.filePath);
|
|
5508
|
+
} catch (error) {
|
|
5509
|
+
return {
|
|
5510
|
+
ok: false,
|
|
5511
|
+
diagnostics: [createProgramContextFailureDiagnostic(options.filePath, error)]
|
|
5512
|
+
};
|
|
5513
|
+
}
|
|
5514
|
+
return generateSchemasFromDetailedProgramContext(ctx, options.filePath, options.typeName, options);
|
|
5515
|
+
}
|
|
5516
|
+
function generateSchemasFromProgramDetailed(options) {
|
|
5355
5517
|
return generateSchemasFromProgram({
|
|
5356
5518
|
...options,
|
|
5357
|
-
|
|
5519
|
+
errorReporting: "diagnostics"
|
|
5358
5520
|
});
|
|
5359
5521
|
}
|
|
5360
|
-
function
|
|
5361
|
-
|
|
5362
|
-
|
|
5522
|
+
function generateSchemasFromProgramDetailedInternal(options) {
|
|
5523
|
+
let ctx;
|
|
5524
|
+
try {
|
|
5525
|
+
ctx = createProgramContextFromProgram(options.program, options.filePath);
|
|
5526
|
+
} catch (error) {
|
|
5527
|
+
return {
|
|
5528
|
+
ok: false,
|
|
5529
|
+
diagnostics: [createProgramContextFailureDiagnostic(options.filePath, error)]
|
|
5530
|
+
};
|
|
5531
|
+
}
|
|
5532
|
+
return generateSchemasFromDetailedProgramContext(ctx, options.filePath, options.typeName, options);
|
|
5533
|
+
}
|
|
5534
|
+
function generateSchemasBatch(options) {
|
|
5535
|
+
const contextCache = /* @__PURE__ */ new Map();
|
|
5536
|
+
return options.targets.map((target) => {
|
|
5537
|
+
let ctx;
|
|
5538
|
+
try {
|
|
5539
|
+
const cacheKey = ts5.sys.useCaseSensitiveFileNames ? target.filePath : target.filePath.toLowerCase();
|
|
5540
|
+
const cachedContext = contextCache.get(cacheKey);
|
|
5541
|
+
if (cachedContext === void 0) {
|
|
5542
|
+
ctx = createProgramContext(target.filePath);
|
|
5543
|
+
contextCache.set(cacheKey, ctx);
|
|
5544
|
+
} else {
|
|
5545
|
+
ctx = cachedContext;
|
|
5546
|
+
}
|
|
5547
|
+
} catch (error) {
|
|
5548
|
+
return withTarget(target, {
|
|
5549
|
+
ok: false,
|
|
5550
|
+
diagnostics: [createProgramContextFailureDiagnostic(target.filePath, error)]
|
|
5551
|
+
});
|
|
5552
|
+
}
|
|
5553
|
+
return withTarget(
|
|
5554
|
+
target,
|
|
5555
|
+
generateSchemasFromDetailedProgramContext(ctx, target.filePath, target.typeName, options)
|
|
5556
|
+
);
|
|
5557
|
+
});
|
|
5558
|
+
}
|
|
5559
|
+
function generateSchemasBatchFromProgram(options) {
|
|
5560
|
+
return options.targets.map((target) => {
|
|
5561
|
+
let ctx;
|
|
5562
|
+
try {
|
|
5563
|
+
ctx = createProgramContextFromProgram(options.program, target.filePath);
|
|
5564
|
+
} catch (error) {
|
|
5565
|
+
return withTarget(target, {
|
|
5566
|
+
ok: false,
|
|
5567
|
+
diagnostics: [createProgramContextFailureDiagnostic(target.filePath, error)]
|
|
5568
|
+
});
|
|
5569
|
+
}
|
|
5570
|
+
return withTarget(
|
|
5571
|
+
target,
|
|
5572
|
+
generateSchemasFromDetailedProgramContext(ctx, target.filePath, target.typeName, options)
|
|
5573
|
+
);
|
|
5574
|
+
});
|
|
5575
|
+
}
|
|
5576
|
+
function generateSchemasFromDetailedProgramContext(ctx, filePath, typeName, options) {
|
|
5577
|
+
const analysisResult = analyzeNamedTypeToIRFromProgramContextDetailed(
|
|
5363
5578
|
ctx,
|
|
5364
|
-
|
|
5365
|
-
|
|
5579
|
+
filePath,
|
|
5580
|
+
typeName,
|
|
5366
5581
|
options.extensionRegistry,
|
|
5367
5582
|
options.metadata,
|
|
5368
5583
|
options.discriminator
|
|
5369
5584
|
);
|
|
5370
|
-
|
|
5371
|
-
|
|
5372
|
-
|
|
5585
|
+
if (!analysisResult.ok) {
|
|
5586
|
+
return {
|
|
5587
|
+
ok: false,
|
|
5588
|
+
diagnostics: analysisResult.diagnostics
|
|
5589
|
+
};
|
|
5590
|
+
}
|
|
5591
|
+
return generateClassSchemasDetailed(
|
|
5592
|
+
analysisResult.analysis,
|
|
5593
|
+
{ file: filePath },
|
|
5373
5594
|
{
|
|
5374
5595
|
extensionRegistry: options.extensionRegistry,
|
|
5375
5596
|
metadata: options.metadata,
|
|
@@ -5377,6 +5598,27 @@ function generateSchemasFromProgram(options) {
|
|
|
5377
5598
|
}
|
|
5378
5599
|
);
|
|
5379
5600
|
}
|
|
5601
|
+
function withTarget(target, result) {
|
|
5602
|
+
return {
|
|
5603
|
+
filePath: target.filePath,
|
|
5604
|
+
typeName: target.typeName,
|
|
5605
|
+
...result
|
|
5606
|
+
};
|
|
5607
|
+
}
|
|
5608
|
+
function createProgramContextFailureDiagnostic(filePath, error) {
|
|
5609
|
+
return {
|
|
5610
|
+
code: "PROGRAM_CONTEXT_FAILURE",
|
|
5611
|
+
message: error instanceof Error ? error.message : String(error),
|
|
5612
|
+
severity: "error",
|
|
5613
|
+
primaryLocation: {
|
|
5614
|
+
surface: "tsdoc",
|
|
5615
|
+
file: filePath,
|
|
5616
|
+
line: 1,
|
|
5617
|
+
column: 0
|
|
5618
|
+
},
|
|
5619
|
+
relatedLocations: []
|
|
5620
|
+
};
|
|
5621
|
+
}
|
|
5380
5622
|
|
|
5381
5623
|
// src/static-build.ts
|
|
5382
5624
|
import * as ts6 from "typescript";
|
|
@@ -5414,8 +5656,11 @@ function resolveModuleExportDeclaration(context, exportName = "default") {
|
|
|
5414
5656
|
// src/generators/discovered-schema.ts
|
|
5415
5657
|
import * as ts7 from "typescript";
|
|
5416
5658
|
import { IR_VERSION as IR_VERSION3 } from "@formspec/core/internals";
|
|
5417
|
-
function toDiscoveredTypeSchemas(result) {
|
|
5418
|
-
return
|
|
5659
|
+
function toDiscoveredTypeSchemas(result, resolvedMetadata) {
|
|
5660
|
+
return {
|
|
5661
|
+
...result,
|
|
5662
|
+
...resolvedMetadata !== void 0 && { resolvedMetadata }
|
|
5663
|
+
};
|
|
5419
5664
|
}
|
|
5420
5665
|
function isNamedTypeDeclaration(declaration) {
|
|
5421
5666
|
return ts7.isClassDeclaration(declaration) || ts7.isInterfaceDeclaration(declaration) || ts7.isTypeAliasDeclaration(declaration);
|
|
@@ -5563,7 +5808,8 @@ function generateSchemasFromAnalysis(analysis, filePath, options) {
|
|
|
5563
5808
|
metadata: options?.metadata,
|
|
5564
5809
|
vendorPrefix: options?.vendorPrefix
|
|
5565
5810
|
}
|
|
5566
|
-
)
|
|
5811
|
+
),
|
|
5812
|
+
analysis.metadata
|
|
5567
5813
|
);
|
|
5568
5814
|
}
|
|
5569
5815
|
function generateSchemasFromResolvedType(options, skipNamedDeclaration = false, rootOverride) {
|
|
@@ -5621,7 +5867,8 @@ function generateSchemasFromResolvedType(options, skipNamedDeclaration = false,
|
|
|
5621
5867
|
}
|
|
5622
5868
|
return {
|
|
5623
5869
|
jsonSchema: toStandaloneJsonSchema(root, typeRegistry, options),
|
|
5624
|
-
uiSchema: null
|
|
5870
|
+
uiSchema: null,
|
|
5871
|
+
...root.metadata !== void 0 && { resolvedMetadata: root.metadata }
|
|
5625
5872
|
};
|
|
5626
5873
|
}
|
|
5627
5874
|
function generateSchemasFromDeclaration(options) {
|
|
@@ -5960,10 +6207,14 @@ export {
|
|
|
5960
6207
|
createStaticBuildContextFromProgram,
|
|
5961
6208
|
generateJsonSchema,
|
|
5962
6209
|
generateSchemas,
|
|
6210
|
+
generateSchemasBatch,
|
|
6211
|
+
generateSchemasBatchFromProgram,
|
|
6212
|
+
generateSchemasDetailed,
|
|
5963
6213
|
generateSchemasFromClass,
|
|
5964
6214
|
generateSchemasFromDeclaration,
|
|
5965
6215
|
generateSchemasFromParameter,
|
|
5966
6216
|
generateSchemasFromProgram,
|
|
6217
|
+
generateSchemasFromProgramDetailed,
|
|
5967
6218
|
generateSchemasFromReturnType,
|
|
5968
6219
|
generateSchemasFromType,
|
|
5969
6220
|
generateUiSchema,
|