@formspec/build 0.1.0-alpha.38 → 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 +41 -2
- package/dist/analyzer/program.d.ts +13 -0
- package/dist/analyzer/program.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 +279 -45
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +279 -45
- 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 +280 -45
- 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 +276 -45
- package/dist/index.js.map +1 -1
- package/dist/internals.cjs +134 -31
- 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 +132 -31
- 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 +1 -1
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":"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"}
|
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";
|
|
@@ -5143,29 +5143,35 @@ function analyzeNamedTypeToIR(filePath, typeName, extensionRegistry, metadataPol
|
|
|
5143
5143
|
discriminatorOptions
|
|
5144
5144
|
);
|
|
5145
5145
|
}
|
|
5146
|
-
function
|
|
5146
|
+
function analyzeNamedTypeToIRFromProgramContextDetailed(ctx, filePath, typeName, extensionRegistry, metadataPolicy, discriminatorOptions) {
|
|
5147
5147
|
const analysisFilePath = path.resolve(filePath);
|
|
5148
5148
|
const classDecl = findClassByName(ctx.sourceFile, typeName);
|
|
5149
5149
|
if (classDecl !== null) {
|
|
5150
|
-
return
|
|
5151
|
-
|
|
5152
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
|
|
5156
|
-
|
|
5157
|
-
|
|
5150
|
+
return {
|
|
5151
|
+
ok: true,
|
|
5152
|
+
analysis: analyzeClassToIR(
|
|
5153
|
+
classDecl,
|
|
5154
|
+
ctx.checker,
|
|
5155
|
+
analysisFilePath,
|
|
5156
|
+
extensionRegistry,
|
|
5157
|
+
metadataPolicy,
|
|
5158
|
+
discriminatorOptions
|
|
5159
|
+
)
|
|
5160
|
+
};
|
|
5158
5161
|
}
|
|
5159
5162
|
const interfaceDecl = findInterfaceByName(ctx.sourceFile, typeName);
|
|
5160
5163
|
if (interfaceDecl !== null) {
|
|
5161
|
-
return
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5166
|
-
|
|
5167
|
-
|
|
5168
|
-
|
|
5164
|
+
return {
|
|
5165
|
+
ok: true,
|
|
5166
|
+
analysis: analyzeInterfaceToIR(
|
|
5167
|
+
interfaceDecl,
|
|
5168
|
+
ctx.checker,
|
|
5169
|
+
analysisFilePath,
|
|
5170
|
+
extensionRegistry,
|
|
5171
|
+
metadataPolicy,
|
|
5172
|
+
discriminatorOptions
|
|
5173
|
+
)
|
|
5174
|
+
};
|
|
5169
5175
|
}
|
|
5170
5176
|
const typeAlias = findTypeAliasByName(ctx.sourceFile, typeName);
|
|
5171
5177
|
if (typeAlias !== null) {
|
|
@@ -5178,11 +5184,20 @@ function analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensi
|
|
|
5178
5184
|
discriminatorOptions
|
|
5179
5185
|
);
|
|
5180
5186
|
if (result.ok) {
|
|
5181
|
-
return result.analysis;
|
|
5187
|
+
return { ok: true, analysis: result.analysis };
|
|
5182
5188
|
}
|
|
5183
5189
|
const fallbackEligible = result.kind === "not-object-like" && isResolvableObjectLikeAliasTypeNode(typeAlias.type) && containsTypeReferenceInObjectLikeAlias(typeAlias.type);
|
|
5184
5190
|
if (!fallbackEligible) {
|
|
5185
|
-
|
|
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
|
+
};
|
|
5186
5201
|
}
|
|
5187
5202
|
const duplicatePropertyNames = findFallbackAliasDuplicatePropertyNames(
|
|
5188
5203
|
typeAlias.type,
|
|
@@ -5191,9 +5206,16 @@ function analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensi
|
|
|
5191
5206
|
if (duplicatePropertyNames.length > 0) {
|
|
5192
5207
|
const sourceFile = typeAlias.getSourceFile();
|
|
5193
5208
|
const { line } = sourceFile.getLineAndCharacterOfPosition(typeAlias.getStart());
|
|
5194
|
-
|
|
5195
|
-
|
|
5196
|
-
|
|
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
|
+
};
|
|
5197
5219
|
}
|
|
5198
5220
|
const rootInfo = analyzeDeclarationRootInfo(
|
|
5199
5221
|
typeAlias,
|
|
@@ -5223,13 +5245,71 @@ function analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensi
|
|
|
5223
5245
|
diagnostics
|
|
5224
5246
|
);
|
|
5225
5247
|
if (fallbackAnalysis !== null) {
|
|
5226
|
-
return fallbackAnalysis;
|
|
5248
|
+
return { ok: true, analysis: fallbackAnalysis };
|
|
5227
5249
|
}
|
|
5228
|
-
|
|
5250
|
+
return {
|
|
5251
|
+
ok: false,
|
|
5252
|
+
diagnostics: [
|
|
5253
|
+
makeProgramDiagnostic(
|
|
5254
|
+
"UNSUPPORTED_ROOT_TYPE",
|
|
5255
|
+
result.error,
|
|
5256
|
+
makeNodeProvenance(typeAlias, analysisFilePath)
|
|
5257
|
+
)
|
|
5258
|
+
]
|
|
5259
|
+
};
|
|
5229
5260
|
}
|
|
5230
|
-
|
|
5231
|
-
|
|
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
|
|
5232
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
|
+
};
|
|
5233
5313
|
}
|
|
5234
5314
|
|
|
5235
5315
|
// src/validate/constraint-validator.ts
|
|
@@ -5309,11 +5389,25 @@ function validateIR(ir, options) {
|
|
|
5309
5389
|
|
|
5310
5390
|
// src/generators/class-schema.ts
|
|
5311
5391
|
function generateClassSchemas(analysis, source, options) {
|
|
5312
|
-
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(
|
|
5313
5404
|
(diagnostic) => diagnostic.severity === "error"
|
|
5314
5405
|
);
|
|
5315
|
-
if (errorDiagnostics
|
|
5316
|
-
|
|
5406
|
+
if (errorDiagnostics.length > 0) {
|
|
5407
|
+
return {
|
|
5408
|
+
ok: false,
|
|
5409
|
+
diagnostics: analysisDiagnostics
|
|
5410
|
+
};
|
|
5317
5411
|
}
|
|
5318
5412
|
const ir = canonicalizeTSDoc(
|
|
5319
5413
|
analysis,
|
|
@@ -5327,9 +5421,14 @@ function generateClassSchemas(analysis, source, options) {
|
|
|
5327
5421
|
...options?.vendorPrefix !== void 0 && { vendorPrefix: options.vendorPrefix }
|
|
5328
5422
|
});
|
|
5329
5423
|
if (!validationResult.valid) {
|
|
5330
|
-
|
|
5424
|
+
return {
|
|
5425
|
+
ok: false,
|
|
5426
|
+
diagnostics: [...analysisDiagnostics, ...validationResult.diagnostics]
|
|
5427
|
+
};
|
|
5331
5428
|
}
|
|
5332
5429
|
return {
|
|
5430
|
+
ok: true,
|
|
5431
|
+
diagnostics: [...analysisDiagnostics, ...validationResult.diagnostics],
|
|
5333
5432
|
jsonSchema: generateJsonSchemaFromIR(ir, options),
|
|
5334
5433
|
uiSchema: generateUiSchemaFromIR(ir)
|
|
5335
5434
|
};
|
|
@@ -5371,25 +5470,127 @@ function generateSchemasFromClass(options) {
|
|
|
5371
5470
|
);
|
|
5372
5471
|
}
|
|
5373
5472
|
function generateSchemas(options) {
|
|
5374
|
-
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) {
|
|
5375
5517
|
return generateSchemasFromProgram({
|
|
5376
5518
|
...options,
|
|
5377
|
-
|
|
5519
|
+
errorReporting: "diagnostics"
|
|
5378
5520
|
});
|
|
5379
5521
|
}
|
|
5380
|
-
function
|
|
5381
|
-
|
|
5382
|
-
|
|
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(
|
|
5383
5578
|
ctx,
|
|
5384
|
-
|
|
5385
|
-
|
|
5579
|
+
filePath,
|
|
5580
|
+
typeName,
|
|
5386
5581
|
options.extensionRegistry,
|
|
5387
5582
|
options.metadata,
|
|
5388
5583
|
options.discriminator
|
|
5389
5584
|
);
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5585
|
+
if (!analysisResult.ok) {
|
|
5586
|
+
return {
|
|
5587
|
+
ok: false,
|
|
5588
|
+
diagnostics: analysisResult.diagnostics
|
|
5589
|
+
};
|
|
5590
|
+
}
|
|
5591
|
+
return generateClassSchemasDetailed(
|
|
5592
|
+
analysisResult.analysis,
|
|
5593
|
+
{ file: filePath },
|
|
5393
5594
|
{
|
|
5394
5595
|
extensionRegistry: options.extensionRegistry,
|
|
5395
5596
|
metadata: options.metadata,
|
|
@@ -5397,6 +5598,27 @@ function generateSchemasFromProgram(options) {
|
|
|
5397
5598
|
}
|
|
5398
5599
|
);
|
|
5399
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
|
+
}
|
|
5400
5622
|
|
|
5401
5623
|
// src/static-build.ts
|
|
5402
5624
|
import * as ts6 from "typescript";
|
|
@@ -5434,8 +5656,11 @@ function resolveModuleExportDeclaration(context, exportName = "default") {
|
|
|
5434
5656
|
// src/generators/discovered-schema.ts
|
|
5435
5657
|
import * as ts7 from "typescript";
|
|
5436
5658
|
import { IR_VERSION as IR_VERSION3 } from "@formspec/core/internals";
|
|
5437
|
-
function toDiscoveredTypeSchemas(result) {
|
|
5438
|
-
return
|
|
5659
|
+
function toDiscoveredTypeSchemas(result, resolvedMetadata) {
|
|
5660
|
+
return {
|
|
5661
|
+
...result,
|
|
5662
|
+
...resolvedMetadata !== void 0 && { resolvedMetadata }
|
|
5663
|
+
};
|
|
5439
5664
|
}
|
|
5440
5665
|
function isNamedTypeDeclaration(declaration) {
|
|
5441
5666
|
return ts7.isClassDeclaration(declaration) || ts7.isInterfaceDeclaration(declaration) || ts7.isTypeAliasDeclaration(declaration);
|
|
@@ -5583,7 +5808,8 @@ function generateSchemasFromAnalysis(analysis, filePath, options) {
|
|
|
5583
5808
|
metadata: options?.metadata,
|
|
5584
5809
|
vendorPrefix: options?.vendorPrefix
|
|
5585
5810
|
}
|
|
5586
|
-
)
|
|
5811
|
+
),
|
|
5812
|
+
analysis.metadata
|
|
5587
5813
|
);
|
|
5588
5814
|
}
|
|
5589
5815
|
function generateSchemasFromResolvedType(options, skipNamedDeclaration = false, rootOverride) {
|
|
@@ -5641,7 +5867,8 @@ function generateSchemasFromResolvedType(options, skipNamedDeclaration = false,
|
|
|
5641
5867
|
}
|
|
5642
5868
|
return {
|
|
5643
5869
|
jsonSchema: toStandaloneJsonSchema(root, typeRegistry, options),
|
|
5644
|
-
uiSchema: null
|
|
5870
|
+
uiSchema: null,
|
|
5871
|
+
...root.metadata !== void 0 && { resolvedMetadata: root.metadata }
|
|
5645
5872
|
};
|
|
5646
5873
|
}
|
|
5647
5874
|
function generateSchemasFromDeclaration(options) {
|
|
@@ -5980,10 +6207,14 @@ export {
|
|
|
5980
6207
|
createStaticBuildContextFromProgram,
|
|
5981
6208
|
generateJsonSchema,
|
|
5982
6209
|
generateSchemas,
|
|
6210
|
+
generateSchemasBatch,
|
|
6211
|
+
generateSchemasBatchFromProgram,
|
|
6212
|
+
generateSchemasDetailed,
|
|
5983
6213
|
generateSchemasFromClass,
|
|
5984
6214
|
generateSchemasFromDeclaration,
|
|
5985
6215
|
generateSchemasFromParameter,
|
|
5986
6216
|
generateSchemasFromProgram,
|
|
6217
|
+
generateSchemasFromProgramDetailed,
|
|
5987
6218
|
generateSchemasFromReturnType,
|
|
5988
6219
|
generateSchemasFromType,
|
|
5989
6220
|
generateUiSchema,
|