@formspec/build 0.1.0-alpha.24 → 0.1.0-alpha.27
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/program.d.ts +12 -0
- package/dist/analyzer/program.d.ts.map +1 -1
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.ts +1 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/build-alpha.d.ts +167 -22
- package/dist/build-beta.d.ts +167 -22
- package/dist/build-internal.d.ts +167 -22
- package/dist/build.d.ts +239 -21
- package/dist/cli.cjs +118 -6
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +117 -6
- package/dist/cli.js.map +1 -1
- package/dist/generators/class-schema.d.ts +27 -0
- package/dist/generators/class-schema.d.ts.map +1 -1
- package/dist/generators/mixed-authoring.d.ts.map +1 -1
- package/dist/index.cjs +114 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +111 -6
- package/dist/index.js.map +1 -1
- package/dist/internals.cjs +46 -0
- package/dist/internals.cjs.map +1 -1
- package/dist/internals.d.ts +1 -1
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +44 -0
- package/dist/internals.js.map +1 -1
- package/dist/json-schema/ir-generator.d.ts +30 -0
- package/dist/json-schema/ir-generator.d.ts.map +1 -1
- package/dist/json-schema/schema.d.ts +2 -2
- package/dist/json-schema/types.d.ts +35 -4
- package/dist/json-schema/types.d.ts.map +1 -1
- package/dist/ui-schema/schema.d.ts +2 -7
- package/dist/ui-schema/schema.d.ts.map +1 -1
- package/dist/ui-schema/types.d.ts +58 -0
- package/dist/ui-schema/types.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -28,16 +28,18 @@ import { type JsonSchema2020 } from "./json-schema/ir-generator.js";
|
|
|
28
28
|
import type { UISchema } from "./ui-schema/types.js";
|
|
29
29
|
export type { JsonSchema2020 } from "./json-schema/ir-generator.js";
|
|
30
30
|
export type { GenerateJsonSchemaOptions } from "./json-schema/generator.js";
|
|
31
|
-
export type {
|
|
31
|
+
export type { BuiltinConstraintBroadeningRegistration, ConstraintTagRegistration, CustomAnnotationRegistration, CustomConstraintRegistration, CustomTypeRegistration, ExtensionDefinition, AnyField, ArrayField, BooleanField, Conditional, DynamicEnumField, DynamicSchemaField, EnumOption, EnumOptionValue, FormElement, FormSpec, Group, NumberField, ObjectField, StaticEnumField, TextField, } from "@formspec/core";
|
|
32
32
|
export type { JSONSchema7, JSONSchemaType, ExtendedJSONSchema7, FormSpecSchemaExtensions, } from "./json-schema/types.js";
|
|
33
33
|
export { createExtensionRegistry } from "./extensions/index.js";
|
|
34
34
|
export type { ExtensionRegistry } from "./extensions/index.js";
|
|
35
35
|
export type { UISchema, UISchemaElement, UISchemaElementBase, UISchemaElementType, ControlElement, VerticalLayout, HorizontalLayout, GroupLayout, Categorization, Category, LabelElement, Rule, RuleEffect, RuleConditionSchema, SchemaBasedCondition, } from "./ui-schema/types.js";
|
|
36
|
-
export type {
|
|
36
|
+
export type { GenerateFromClassOptions, GenerateFromClassResult, GenerateSchemasOptions, GenerateSchemasFromProgramOptions, StaticSchemaGenerationOptions, } from "./generators/class-schema.js";
|
|
37
37
|
export type { BuildMixedAuthoringSchemasOptions, MixedAuthoringSchemas, } from "./generators/mixed-authoring.js";
|
|
38
|
+
export { jsonSchema7Schema } from "./json-schema/schema.js";
|
|
39
|
+
export { uiSchema as uiSchemaSchema } from "./ui-schema/schema.js";
|
|
38
40
|
export { generateJsonSchema } from "./json-schema/generator.js";
|
|
39
41
|
export { generateUiSchema } from "./ui-schema/generator.js";
|
|
40
|
-
export { generateSchemasFromClass, generateSchemas } from "./generators/class-schema.js";
|
|
42
|
+
export { generateSchemasFromClass, generateSchemas, generateSchemasFromProgram, } from "./generators/class-schema.js";
|
|
41
43
|
export { buildMixedAuthoringSchemas } from "./generators/mixed-authoring.js";
|
|
42
44
|
/**
|
|
43
45
|
* Result of building form schemas.
|
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;AAEhG,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,EACV,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1141,6 +1141,71 @@ function createExtensionRegistry(extensions) {
|
|
|
1141
1141
|
};
|
|
1142
1142
|
}
|
|
1143
1143
|
|
|
1144
|
+
// src/json-schema/schema.ts
|
|
1145
|
+
import { z as z3 } from "zod";
|
|
1146
|
+
var jsonSchemaTypeSchema = z3.enum([
|
|
1147
|
+
"string",
|
|
1148
|
+
"number",
|
|
1149
|
+
"integer",
|
|
1150
|
+
"boolean",
|
|
1151
|
+
"object",
|
|
1152
|
+
"array",
|
|
1153
|
+
"null"
|
|
1154
|
+
]);
|
|
1155
|
+
var jsonSchema7Schema = z3.lazy(
|
|
1156
|
+
() => z3.object({
|
|
1157
|
+
$schema: z3.string().optional(),
|
|
1158
|
+
$id: z3.string().optional(),
|
|
1159
|
+
$ref: z3.string().optional(),
|
|
1160
|
+
// Metadata
|
|
1161
|
+
title: z3.string().optional(),
|
|
1162
|
+
description: z3.string().optional(),
|
|
1163
|
+
deprecated: z3.boolean().optional(),
|
|
1164
|
+
// Type
|
|
1165
|
+
type: z3.union([jsonSchemaTypeSchema, z3.array(jsonSchemaTypeSchema)]).optional(),
|
|
1166
|
+
// String validation
|
|
1167
|
+
minLength: z3.number().optional(),
|
|
1168
|
+
maxLength: z3.number().optional(),
|
|
1169
|
+
pattern: z3.string().optional(),
|
|
1170
|
+
// Number validation
|
|
1171
|
+
minimum: z3.number().optional(),
|
|
1172
|
+
maximum: z3.number().optional(),
|
|
1173
|
+
exclusiveMinimum: z3.number().optional(),
|
|
1174
|
+
exclusiveMaximum: z3.number().optional(),
|
|
1175
|
+
// Enum
|
|
1176
|
+
enum: z3.array(z3.union([z3.string(), z3.number(), z3.boolean(), z3.null()])).readonly().optional(),
|
|
1177
|
+
const: z3.union([z3.string(), z3.number(), z3.boolean(), z3.null()]).optional(),
|
|
1178
|
+
// Object
|
|
1179
|
+
properties: z3.record(z3.string(), jsonSchema7Schema).optional(),
|
|
1180
|
+
required: z3.array(z3.string()).optional(),
|
|
1181
|
+
additionalProperties: z3.union([z3.boolean(), jsonSchema7Schema]).optional(),
|
|
1182
|
+
// Array
|
|
1183
|
+
items: z3.union([jsonSchema7Schema, z3.array(jsonSchema7Schema)]).optional(),
|
|
1184
|
+
minItems: z3.number().optional(),
|
|
1185
|
+
maxItems: z3.number().optional(),
|
|
1186
|
+
// Composition
|
|
1187
|
+
allOf: z3.array(jsonSchema7Schema).optional(),
|
|
1188
|
+
anyOf: z3.array(jsonSchema7Schema).optional(),
|
|
1189
|
+
oneOf: z3.array(jsonSchema7Schema).optional(),
|
|
1190
|
+
not: jsonSchema7Schema.optional(),
|
|
1191
|
+
// Conditional
|
|
1192
|
+
if: jsonSchema7Schema.optional(),
|
|
1193
|
+
then: jsonSchema7Schema.optional(),
|
|
1194
|
+
else: jsonSchema7Schema.optional(),
|
|
1195
|
+
// Format
|
|
1196
|
+
format: z3.string().optional(),
|
|
1197
|
+
// Default
|
|
1198
|
+
default: z3.unknown().optional(),
|
|
1199
|
+
// FormSpec extensions
|
|
1200
|
+
"x-formspec-source": z3.string().optional(),
|
|
1201
|
+
"x-formspec-params": z3.array(z3.string()).readonly().optional(),
|
|
1202
|
+
"x-formspec-schemaSource": z3.string().optional()
|
|
1203
|
+
}).passthrough()
|
|
1204
|
+
);
|
|
1205
|
+
|
|
1206
|
+
// src/generators/class-schema.ts
|
|
1207
|
+
import "typescript";
|
|
1208
|
+
|
|
1144
1209
|
// src/analyzer/program.ts
|
|
1145
1210
|
import * as ts4 from "typescript";
|
|
1146
1211
|
import * as path from "path";
|
|
@@ -3122,6 +3187,18 @@ function detectFormSpecReference(typeNode) {
|
|
|
3122
3187
|
}
|
|
3123
3188
|
|
|
3124
3189
|
// src/analyzer/program.ts
|
|
3190
|
+
function createProgramContextFromProgram(program, filePath) {
|
|
3191
|
+
const absolutePath = path.resolve(filePath);
|
|
3192
|
+
const sourceFile = program.getSourceFile(absolutePath) ?? program.getSourceFile(filePath);
|
|
3193
|
+
if (!sourceFile) {
|
|
3194
|
+
throw new Error(`Could not find source file in provided program: ${absolutePath}`);
|
|
3195
|
+
}
|
|
3196
|
+
return {
|
|
3197
|
+
program,
|
|
3198
|
+
checker: program.getTypeChecker(),
|
|
3199
|
+
sourceFile
|
|
3200
|
+
};
|
|
3201
|
+
}
|
|
3125
3202
|
function createProgramContext(filePath) {
|
|
3126
3203
|
const absolutePath = path.resolve(filePath);
|
|
3127
3204
|
const fileDir = path.dirname(absolutePath);
|
|
@@ -3192,24 +3269,33 @@ function findTypeAliasByName(sourceFile, aliasName) {
|
|
|
3192
3269
|
}
|
|
3193
3270
|
function analyzeNamedTypeToIR(filePath, typeName, extensionRegistry) {
|
|
3194
3271
|
const ctx = createProgramContext(filePath);
|
|
3272
|
+
return analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensionRegistry);
|
|
3273
|
+
}
|
|
3274
|
+
function analyzeNamedTypeToIRFromProgramContext(ctx, filePath, typeName, extensionRegistry) {
|
|
3275
|
+
const analysisFilePath = path.resolve(filePath);
|
|
3195
3276
|
const classDecl = findClassByName(ctx.sourceFile, typeName);
|
|
3196
3277
|
if (classDecl !== null) {
|
|
3197
|
-
return analyzeClassToIR(classDecl, ctx.checker,
|
|
3278
|
+
return analyzeClassToIR(classDecl, ctx.checker, analysisFilePath, extensionRegistry);
|
|
3198
3279
|
}
|
|
3199
3280
|
const interfaceDecl = findInterfaceByName(ctx.sourceFile, typeName);
|
|
3200
3281
|
if (interfaceDecl !== null) {
|
|
3201
|
-
return analyzeInterfaceToIR(interfaceDecl, ctx.checker,
|
|
3282
|
+
return analyzeInterfaceToIR(interfaceDecl, ctx.checker, analysisFilePath, extensionRegistry);
|
|
3202
3283
|
}
|
|
3203
3284
|
const typeAlias = findTypeAliasByName(ctx.sourceFile, typeName);
|
|
3204
3285
|
if (typeAlias !== null) {
|
|
3205
|
-
const result = analyzeTypeAliasToIR(
|
|
3286
|
+
const result = analyzeTypeAliasToIR(
|
|
3287
|
+
typeAlias,
|
|
3288
|
+
ctx.checker,
|
|
3289
|
+
analysisFilePath,
|
|
3290
|
+
extensionRegistry
|
|
3291
|
+
);
|
|
3206
3292
|
if (result.ok) {
|
|
3207
3293
|
return result.analysis;
|
|
3208
3294
|
}
|
|
3209
3295
|
throw new Error(result.error);
|
|
3210
3296
|
}
|
|
3211
3297
|
throw new Error(
|
|
3212
|
-
`Type "${typeName}" not found as a class, interface, or type alias in ${
|
|
3298
|
+
`Type "${typeName}" not found as a class, interface, or type alias in ${analysisFilePath}`
|
|
3213
3299
|
);
|
|
3214
3300
|
}
|
|
3215
3301
|
|
|
@@ -3345,12 +3431,28 @@ function generateSchemasFromClass(options) {
|
|
|
3345
3431
|
);
|
|
3346
3432
|
}
|
|
3347
3433
|
function generateSchemas(options) {
|
|
3348
|
-
const
|
|
3434
|
+
const ctx = createProgramContext(options.filePath);
|
|
3435
|
+
return generateSchemasFromProgram({
|
|
3436
|
+
...options,
|
|
3437
|
+
program: ctx.program
|
|
3438
|
+
});
|
|
3439
|
+
}
|
|
3440
|
+
function generateSchemasFromProgram(options) {
|
|
3441
|
+
const ctx = createProgramContextFromProgram(options.program, options.filePath);
|
|
3442
|
+
const analysis = analyzeNamedTypeToIRFromProgramContext(
|
|
3443
|
+
ctx,
|
|
3349
3444
|
options.filePath,
|
|
3350
3445
|
options.typeName,
|
|
3351
3446
|
options.extensionRegistry
|
|
3352
3447
|
);
|
|
3353
|
-
return generateClassSchemas(
|
|
3448
|
+
return generateClassSchemas(
|
|
3449
|
+
analysis,
|
|
3450
|
+
{ file: options.filePath },
|
|
3451
|
+
{
|
|
3452
|
+
extensionRegistry: options.extensionRegistry,
|
|
3453
|
+
vendorPrefix: options.vendorPrefix
|
|
3454
|
+
}
|
|
3455
|
+
);
|
|
3354
3456
|
}
|
|
3355
3457
|
|
|
3356
3458
|
// src/generators/mixed-authoring.ts
|
|
@@ -3556,7 +3658,10 @@ export {
|
|
|
3556
3658
|
generateJsonSchema,
|
|
3557
3659
|
generateSchemas,
|
|
3558
3660
|
generateSchemasFromClass,
|
|
3661
|
+
generateSchemasFromProgram,
|
|
3559
3662
|
generateUiSchema,
|
|
3663
|
+
jsonSchema7Schema,
|
|
3664
|
+
uiSchema as uiSchemaSchema,
|
|
3560
3665
|
writeSchemas
|
|
3561
3666
|
};
|
|
3562
3667
|
//# sourceMappingURL=index.js.map
|