apify-schema-tools 3.0.0 → 3.2.0
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/.cspell/custom-dictionary.txt +1 -0
- package/.node-version +1 -1
- package/CHANGELOG.md +13 -1
- package/biome.json +24 -18
- package/check-samples.sh +4 -0
- package/dist/apify-schema-tools.js +16 -21
- package/dist/apify-schema-tools.js.map +1 -1
- package/dist/apify.d.ts +1 -1
- package/dist/apify.d.ts.map +1 -1
- package/dist/apify.js +22 -8
- package/dist/apify.js.map +1 -1
- package/dist/cli/check.d.ts +5 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +86 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/init.d.ts +5 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +92 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/sync.d.ts +5 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +112 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/configuration.d.ts +16 -5
- package/dist/configuration.d.ts.map +1 -1
- package/dist/configuration.js +19 -7
- package/dist/configuration.js.map +1 -1
- package/dist/json-schema-conflicts.js +3 -3
- package/dist/json-schema-conflicts.js.map +1 -1
- package/dist/json-schemas.d.ts +1 -1
- package/dist/json-schemas.d.ts.map +1 -1
- package/dist/json-schemas.js +1 -1
- package/dist/json-schemas.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +19 -0
- package/dist/main.js.map +1 -0
- package/dist/middle-schema/compare-schemas.d.ts +3 -0
- package/dist/middle-schema/compare-schemas.d.ts.map +1 -0
- package/dist/middle-schema/compare-schemas.js +90 -0
- package/dist/middle-schema/compare-schemas.js.map +1 -0
- package/dist/middle-schema/generate-typescript.d.ts +7 -0
- package/dist/middle-schema/generate-typescript.d.ts.map +1 -0
- package/dist/middle-schema/generate-typescript.js +70 -0
- package/dist/middle-schema/generate-typescript.js.map +1 -0
- package/dist/middle-schema/parse-json-schema.d.ts +4 -0
- package/dist/middle-schema/parse-json-schema.d.ts.map +1 -0
- package/dist/middle-schema/parse-json-schema.js +65 -0
- package/dist/middle-schema/parse-json-schema.js.map +1 -0
- package/dist/middle-schema/parse-typescript.d.ts +4 -0
- package/dist/middle-schema/parse-typescript.d.ts.map +1 -0
- package/dist/middle-schema/parse-typescript.js +199 -0
- package/dist/middle-schema/parse-typescript.js.map +1 -0
- package/dist/middle-schema/schema-types.d.ts +24 -0
- package/dist/middle-schema/schema-types.d.ts.map +1 -0
- package/dist/middle-schema/schema-types.js +14 -0
- package/dist/middle-schema/schema-types.js.map +1 -0
- package/dist/middle-schema/schema.d.ts +24 -0
- package/dist/middle-schema/schema.d.ts.map +1 -0
- package/dist/middle-schema/schema.js +14 -0
- package/dist/middle-schema/schema.js.map +1 -0
- package/dist/schema/entities/abstract-entity.d.ts +5 -0
- package/dist/schema/entities/abstract-entity.d.ts.map +1 -0
- package/dist/schema/entities/abstract-entity.js +3 -0
- package/dist/schema/entities/abstract-entity.js.map +1 -0
- package/dist/schema/entities/primitive-union.d.ts +12 -0
- package/dist/schema/entities/primitive-union.d.ts.map +1 -0
- package/dist/schema/entities/primitive-union.js +74 -0
- package/dist/schema/entities/primitive-union.js.map +1 -0
- package/dist/schema/entities/primitive.d.ts +15 -0
- package/dist/schema/entities/primitive.d.ts.map +1 -0
- package/dist/schema/entities/primitive.js +54 -0
- package/dist/schema/entities/primitive.js.map +1 -0
- package/dist/schema/parsers/json-schema.d.ts +4 -0
- package/dist/schema/parsers/json-schema.d.ts.map +1 -0
- package/dist/schema/parsers/json-schema.js +12 -0
- package/dist/schema/parsers/json-schema.js.map +1 -0
- package/dist/schema/parsers/typescript.d.ts +3 -0
- package/dist/schema/parsers/typescript.d.ts.map +1 -0
- package/dist/schema/parsers/typescript.js +24 -0
- package/dist/schema/parsers/typescript.js.map +1 -0
- package/dist/schemas/input.d.ts +840 -0
- package/dist/schemas/input.d.ts.map +1 -0
- package/dist/schemas/input.js +349 -0
- package/dist/schemas/input.js.map +1 -0
- package/dist/utils/filesystem.d.ts +8 -0
- package/dist/utils/filesystem.d.ts.map +1 -0
- package/dist/utils/filesystem.js +16 -0
- package/dist/utils/filesystem.js.map +1 -0
- package/dist/utils/json-schemas-interactive-conflict.d.ts +16 -0
- package/dist/utils/json-schemas-interactive-conflict.d.ts.map +1 -0
- package/dist/utils/json-schemas-interactive-conflict.js +165 -0
- package/dist/utils/json-schemas-interactive-conflict.js.map +1 -0
- package/dist/utils/json-schemas.d.ts +42 -0
- package/dist/utils/json-schemas.d.ts.map +1 -0
- package/dist/utils/json-schemas.js +162 -0
- package/dist/utils/json-schemas.js.map +1 -0
- package/dist/zod/schemas/input.d.ts +840 -0
- package/dist/zod/schemas/input.d.ts.map +1 -0
- package/dist/zod/schemas/input.js +393 -0
- package/dist/zod/schemas/input.js.map +1 -0
- package/package.json +12 -12
- package/samples/all-defaults/.actor/input_schema.json +32 -3
- package/samples/all-defaults/src-schemas/input.json +2 -1
- package/samples/deep-merged-schemas/.actor/input_schema.json +36 -3
- package/samples/merged-schemas/.actor/input_schema.json +27 -3
- package/samples/package-json-config/.actor/input_schema.json +32 -3
- package/samples/package-json-config-merged/.actor/actor.json +15 -0
- package/samples/package-json-config-merged/.actor/dataset_schema.json +32 -0
- package/samples/package-json-config-merged/.actor/input_schema.json +91 -0
- package/samples/package-json-config-merged/custom-add-schemas/add-input.json +21 -0
- package/samples/package-json-config-merged/custom-src-schemas/dataset-item.json +28 -0
- package/samples/package-json-config-merged/custom-src-schemas/input.json +89 -0
- package/samples/package-json-config-merged/package.json +19 -0
- package/samples/package-json-config-merged/src/custom-generated/dataset.ts +25 -0
- package/samples/package-json-config-merged/src/custom-generated/input-utils.ts +73 -0
- package/samples/package-json-config-merged/src/custom-generated/input.ts +49 -0
- package/src/apify.ts +24 -9
- package/src/cli/check.ts +114 -0
- package/src/cli/init.ts +125 -0
- package/src/cli/sync.ts +164 -0
- package/src/configuration.ts +27 -8
- package/src/main.ts +25 -0
- package/src/middle-schema/compare-schemas.ts +113 -0
- package/src/middle-schema/generate-typescript.ts +88 -0
- package/src/middle-schema/parse-json-schema.ts +104 -0
- package/src/middle-schema/parse-typescript.ts +239 -0
- package/src/middle-schema/schema-types.ts +40 -0
- package/src/{json-schema-conflicts.ts → utils/json-schemas-interactive-conflict.ts} +3 -3
- package/src/{json-schemas.ts → utils/json-schemas.ts} +1 -1
- package/test/apify.test.ts +413 -5
- package/test/cli/check.test.ts +1571 -0
- package/test/cli/init.test.ts +459 -0
- package/test/cli/sync.test.ts +341 -0
- package/test/common.ts +68 -0
- package/test/configuration.test.ts +59 -26
- package/test/middle-schema/compare-schemas.test.ts +585 -0
- package/test/middle-schema/generate-typescript.test.ts +191 -0
- package/test/middle-schema/parse-json-schema.test.ts +178 -0
- package/test/middle-schema/parse-typescript.test.ts +143 -0
- package/test/{json-schema-conflicts.test.ts → utils/json-schemas-interactive-conflict.test.ts} +3 -3
- package/test/{json-schemas.test.ts → utils/json-schemas.test.ts} +4 -4
- package/update-samples.sh +4 -0
- package/src/apify-schema-tools.ts +0 -431
- package/src/typescript.ts +0 -563
- package/test/apify-schema-tools.test.ts +0 -2216
- package/test/typescript.test.ts +0 -1079
- /package/src/{filesystem.ts → utils/filesystem.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-typescript.js","sourceRoot":"","sources":["../../src/middle-schema/generate-typescript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-json-schema.d.ts","sourceRoot":"","sources":["../../src/middle-schema/parse-json-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAIN,KAAK,YAAY,EAEjB,MAAM,mBAAmB,CAAC;AA6F3B,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE3E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { isArraySchema, isObjectSchema } from "../utils/json-schemas.js";
|
|
2
|
+
import { isAllowedType, } from "./schema-types.js";
|
|
3
|
+
const JSON_SCHEMA_TYPE_TO_TS_TYPE = {
|
|
4
|
+
integer: "number",
|
|
5
|
+
};
|
|
6
|
+
function generateMiddleObject(schema, doc, isArray, isRequired) {
|
|
7
|
+
const requiredProperties = schema.required ?? [];
|
|
8
|
+
const properties = Object.fromEntries(Object.entries(schema.properties ?? {}).map(([key, value]) => {
|
|
9
|
+
return [key, jsonSchemaToMiddleSchema(value, false, requiredProperties.includes(key))];
|
|
10
|
+
}));
|
|
11
|
+
let additionalProperties;
|
|
12
|
+
if (schema.additionalProperties === true || schema.additionalProperties === undefined) {
|
|
13
|
+
// If additionalProperties is true or undefined, we parse it as an "empty" schema
|
|
14
|
+
additionalProperties = { doc: undefined, isArray: false, isRequired: true, type: "unknown" };
|
|
15
|
+
}
|
|
16
|
+
else if (schema.additionalProperties !== false) {
|
|
17
|
+
additionalProperties = jsonSchemaToMiddleSchema(schema.additionalProperties, false, true);
|
|
18
|
+
}
|
|
19
|
+
return { doc, isArray, isRequired, properties, additionalProperties };
|
|
20
|
+
}
|
|
21
|
+
function generateArrayMiddleSchema(schema, doc, isRequired) {
|
|
22
|
+
if (Array.isArray(schema.items)) {
|
|
23
|
+
throw new Error("Array schema with multiple items is not supported");
|
|
24
|
+
}
|
|
25
|
+
if (!schema.items) {
|
|
26
|
+
return { doc, isArray: true, isRequired, type: "unknown" };
|
|
27
|
+
}
|
|
28
|
+
return jsonSchemaToMiddleSchema(schema.items, true, isRequired, doc);
|
|
29
|
+
}
|
|
30
|
+
function generateMiddleBasicVar(schema, doc, isArray, isRequired) {
|
|
31
|
+
const types = [];
|
|
32
|
+
for (const type of Array.isArray(schema.type) ? schema.type : [schema.type ?? "unknown"]) {
|
|
33
|
+
const tsType = JSON_SCHEMA_TYPE_TO_TS_TYPE[type] ?? type;
|
|
34
|
+
if (!isAllowedType(tsType)) {
|
|
35
|
+
throw new Error(`Unsupported JSON schema type: ${type}`);
|
|
36
|
+
}
|
|
37
|
+
types.push(tsType);
|
|
38
|
+
}
|
|
39
|
+
if (schema.nullable) {
|
|
40
|
+
types.push("null");
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
doc,
|
|
44
|
+
isArray,
|
|
45
|
+
isRequired,
|
|
46
|
+
type: types.length === 1 ? types[0] : types,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function jsonSchemaToMiddleSchema(schema, isArray, isRequired, inheritedDoc) {
|
|
50
|
+
const doc = inheritedDoc ?? schema.description;
|
|
51
|
+
if (isObjectSchema(schema)) {
|
|
52
|
+
return generateMiddleObject(schema, doc, isArray, isRequired);
|
|
53
|
+
}
|
|
54
|
+
if (isArraySchema(schema)) {
|
|
55
|
+
return generateArrayMiddleSchema(schema, doc, isRequired);
|
|
56
|
+
}
|
|
57
|
+
if (schema.enum) {
|
|
58
|
+
return { doc, isArray, isRequired, enum: schema.enum };
|
|
59
|
+
}
|
|
60
|
+
return generateMiddleBasicVar(schema, doc, isArray, isRequired);
|
|
61
|
+
}
|
|
62
|
+
export function jsonSchemaToMiddleObject(schema) {
|
|
63
|
+
return jsonSchemaToMiddleSchema(schema, false, true);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=parse-json-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-json-schema.js","sourceRoot":"","sources":["../../src/middle-schema/parse-json-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-typescript.d.ts","sourceRoot":"","sources":["../../src/middle-schema/parse-typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,YAAY,EAAqB,MAAM,mBAAmB,CAAC;AAIxF,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQlE;AAmND,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAenE"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { isAllowedType } from "./schema-types.js";
|
|
2
|
+
const TYPESCRIPT_HEADER_REGEX = /\/\*\*[\s\S]*?\*\//;
|
|
3
|
+
export function removeTypeScriptHeader(fileContent) {
|
|
4
|
+
// Match the first jsdoc and remove it
|
|
5
|
+
const headerMatch = fileContent.match(TYPESCRIPT_HEADER_REGEX);
|
|
6
|
+
if (!headerMatch || headerMatch.index === undefined) {
|
|
7
|
+
throw new Error("No header found in the TypeScript file");
|
|
8
|
+
}
|
|
9
|
+
const headerEndIndex = headerMatch.index + headerMatch[0].length;
|
|
10
|
+
return fileContent.slice(headerEndIndex).trim();
|
|
11
|
+
}
|
|
12
|
+
const WHITESPACE_REGEX = /\s/;
|
|
13
|
+
function skipWhitespace(body, i) {
|
|
14
|
+
let cursor = i;
|
|
15
|
+
while (cursor < body.length && WHITESPACE_REGEX.test(body[cursor])) {
|
|
16
|
+
cursor++;
|
|
17
|
+
}
|
|
18
|
+
return cursor;
|
|
19
|
+
}
|
|
20
|
+
const TYPESCRIPT_DOC_DECORATIONS_REGEX = /^\s*\*\s?/;
|
|
21
|
+
const TYPESCRIPT_DOC_PREFIX = "/**";
|
|
22
|
+
function tryParseJsDoc(body, i) {
|
|
23
|
+
if (body.slice(i, i + TYPESCRIPT_DOC_PREFIX.length) === TYPESCRIPT_DOC_PREFIX) {
|
|
24
|
+
const docEnd = body.indexOf("*/", i);
|
|
25
|
+
if (docEnd !== -1) {
|
|
26
|
+
const docContent = body.slice(i + TYPESCRIPT_DOC_PREFIX.length, docEnd);
|
|
27
|
+
const docLines = docContent.split("\n");
|
|
28
|
+
const cleanDoc = docLines
|
|
29
|
+
.map((line) => line.replace(TYPESCRIPT_DOC_DECORATIONS_REGEX, "").trim())
|
|
30
|
+
.filter((line) => line.length > 0)
|
|
31
|
+
.join(" ");
|
|
32
|
+
return { doc: cleanDoc || undefined, nextIndex: docEnd + 2 };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function extractTypeString(body, i) {
|
|
38
|
+
let braceDepth = 0;
|
|
39
|
+
let typeEnd = i;
|
|
40
|
+
while (typeEnd < body.length) {
|
|
41
|
+
const char = body[typeEnd];
|
|
42
|
+
if (char === "{") {
|
|
43
|
+
braceDepth++;
|
|
44
|
+
}
|
|
45
|
+
else if (char === "}") {
|
|
46
|
+
braceDepth--;
|
|
47
|
+
if (braceDepth < 0) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (char === ";" && braceDepth === 0) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
typeEnd++;
|
|
55
|
+
}
|
|
56
|
+
let typeStr = body.slice(i, typeEnd).trim();
|
|
57
|
+
const isArray = typeStr.endsWith("[]");
|
|
58
|
+
if (isArray) {
|
|
59
|
+
typeStr = typeStr.slice(0, -2).trim();
|
|
60
|
+
}
|
|
61
|
+
const isObject = typeStr.startsWith("{") && typeStr.endsWith("}");
|
|
62
|
+
if (isObject) {
|
|
63
|
+
typeStr = typeStr.slice(1, -1).trim();
|
|
64
|
+
}
|
|
65
|
+
return { typeStr, isArray, isObject, typeEnd };
|
|
66
|
+
}
|
|
67
|
+
function parseTypeScriptValue(text) {
|
|
68
|
+
try {
|
|
69
|
+
return JSON.parse(text.trim());
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new Error(`Invalid TypeScript value: ${text}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function extractSchemaFromText(text, currentDoc, isRequired, isArray, isObject) {
|
|
76
|
+
let schema;
|
|
77
|
+
if (isObject) {
|
|
78
|
+
const { properties: nestedProperties, additionalProperties: additionalNestedProperties } = parseInterfaceProperties(text);
|
|
79
|
+
schema = {
|
|
80
|
+
doc: currentDoc,
|
|
81
|
+
isArray,
|
|
82
|
+
isRequired,
|
|
83
|
+
properties: nestedProperties,
|
|
84
|
+
additionalProperties: additionalNestedProperties,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
else if (text.includes("|")) {
|
|
88
|
+
const unionBody = isArray ? text.slice(1, -1) : text;
|
|
89
|
+
const unionParts = unionBody.split("|").map((part) => part.trim());
|
|
90
|
+
// Since we currently do not support complex unions, we check if all parts are allowed types
|
|
91
|
+
if (unionParts.every((part) => isAllowedType(part))) {
|
|
92
|
+
schema = {
|
|
93
|
+
doc: currentDoc,
|
|
94
|
+
isArray,
|
|
95
|
+
isRequired,
|
|
96
|
+
type: unionParts,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
schema = {
|
|
101
|
+
doc: currentDoc,
|
|
102
|
+
isArray,
|
|
103
|
+
isRequired,
|
|
104
|
+
enum: unionParts.map((value) => parseTypeScriptValue(value)),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (isAllowedType(text)) {
|
|
109
|
+
schema = {
|
|
110
|
+
doc: currentDoc,
|
|
111
|
+
isArray,
|
|
112
|
+
isRequired,
|
|
113
|
+
type: text,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
schema = {
|
|
118
|
+
doc: currentDoc,
|
|
119
|
+
isArray,
|
|
120
|
+
isRequired,
|
|
121
|
+
enum: [parseTypeScriptValue(text)],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return schema;
|
|
125
|
+
}
|
|
126
|
+
const TYPESCRIPT_ADDITIONAL_PROPERTIES_REGEX = /^\s*\[\s*key\s*:\s*string\s*\]\s*:\s*/;
|
|
127
|
+
const TYPESCRIPT_PROPERTY_REGEX = /^(\w+)(\?)?:\s*/;
|
|
128
|
+
function tryParseProperty(body, i, currentDoc) {
|
|
129
|
+
let cursor = i;
|
|
130
|
+
let propName;
|
|
131
|
+
let isRequired;
|
|
132
|
+
const bodySlice = body.slice(cursor);
|
|
133
|
+
const additionalPropertiesMatch = bodySlice.match(TYPESCRIPT_ADDITIONAL_PROPERTIES_REGEX);
|
|
134
|
+
if (additionalPropertiesMatch) {
|
|
135
|
+
cursor += additionalPropertiesMatch[0].length;
|
|
136
|
+
isRequired = true;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const propMatch = bodySlice.match(TYPESCRIPT_PROPERTY_REGEX);
|
|
140
|
+
if (!propMatch) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
propName = propMatch[1];
|
|
144
|
+
isRequired = !propMatch[2];
|
|
145
|
+
cursor += propMatch[0].length;
|
|
146
|
+
}
|
|
147
|
+
const { typeStr, isArray, isObject, typeEnd } = extractTypeString(body, cursor);
|
|
148
|
+
const schema = extractSchemaFromText(typeStr, currentDoc, isRequired, isArray, isObject);
|
|
149
|
+
let nextIndex = typeEnd;
|
|
150
|
+
if (body[nextIndex] === ";") {
|
|
151
|
+
nextIndex++;
|
|
152
|
+
}
|
|
153
|
+
return { propName, schema, nextIndex };
|
|
154
|
+
}
|
|
155
|
+
function parseInterfaceProperties(body) {
|
|
156
|
+
const properties = {};
|
|
157
|
+
let additionalProperties;
|
|
158
|
+
let i = 0;
|
|
159
|
+
let currentDoc;
|
|
160
|
+
while (i < body.length) {
|
|
161
|
+
i = skipWhitespace(body, i);
|
|
162
|
+
const docResult = tryParseJsDoc(body, i);
|
|
163
|
+
if (docResult) {
|
|
164
|
+
currentDoc = docResult.doc;
|
|
165
|
+
i = docResult.nextIndex;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const propResult = tryParseProperty(body, i, currentDoc);
|
|
169
|
+
if (propResult) {
|
|
170
|
+
if (propResult.propName) {
|
|
171
|
+
properties[propResult.propName] = propResult.schema;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
additionalProperties = propResult.schema;
|
|
175
|
+
}
|
|
176
|
+
currentDoc = undefined;
|
|
177
|
+
i = propResult.nextIndex;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
i++;
|
|
181
|
+
}
|
|
182
|
+
return { properties, additionalProperties };
|
|
183
|
+
}
|
|
184
|
+
const TYPESCRIPT_JSDOC_REGEX = /\/\*\*\s*\n\s*\*\s*(.*?)\s*\n\s*\*\//;
|
|
185
|
+
const TYPESCRIPT_INTERFACE_REGEX = /export interface (\w+) \{([\s\S]*)\}$/;
|
|
186
|
+
export function parseTypeScriptInterface(text) {
|
|
187
|
+
// Extract JSDoc comment
|
|
188
|
+
const docMatch = text.match(TYPESCRIPT_JSDOC_REGEX);
|
|
189
|
+
const doc = docMatch ? docMatch[1] : undefined;
|
|
190
|
+
// Extract interface declaration
|
|
191
|
+
const interfaceMatch = text.match(TYPESCRIPT_INTERFACE_REGEX);
|
|
192
|
+
if (!interfaceMatch) {
|
|
193
|
+
throw new Error("Invalid TypeScript interface format");
|
|
194
|
+
}
|
|
195
|
+
const body = interfaceMatch[2];
|
|
196
|
+
const { properties, additionalProperties } = parseInterfaceProperties(body);
|
|
197
|
+
return { doc, isArray: false, isRequired: true, properties, additionalProperties };
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=parse-typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-typescript.js","sourceRoot":"","sources":["../../src/middle-schema/parse-typescript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
declare const ALLOWED_TYPES: readonly ["string", "number", "boolean", "object", "null", "unknown"];
|
|
2
|
+
export type AllowedType = (typeof ALLOWED_TYPES)[number];
|
|
3
|
+
export declare function isAllowedType(type: string): type is AllowedType;
|
|
4
|
+
interface MiddleBasicSpecs {
|
|
5
|
+
doc?: string;
|
|
6
|
+
isRequired: boolean;
|
|
7
|
+
isArray: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface MiddleBasicVar extends MiddleBasicSpecs {
|
|
10
|
+
type: AllowedType | AllowedType[];
|
|
11
|
+
}
|
|
12
|
+
export declare function isMiddleBasicVar(schema: MiddleSchema): schema is MiddleBasicVar;
|
|
13
|
+
export interface MiddleEnum extends MiddleBasicSpecs {
|
|
14
|
+
enum: unknown[];
|
|
15
|
+
}
|
|
16
|
+
export declare function isMiddleEnum(schema: MiddleSchema): schema is MiddleEnum;
|
|
17
|
+
export interface MiddleObject extends MiddleBasicSpecs {
|
|
18
|
+
properties: Record<string, MiddleSchema>;
|
|
19
|
+
additionalProperties?: MiddleSchema;
|
|
20
|
+
}
|
|
21
|
+
export declare function isMiddleObject(schema: MiddleSchema): schema is MiddleObject;
|
|
22
|
+
export type MiddleSchema = MiddleBasicVar | MiddleEnum | MiddleObject;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=schema-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-types.d.ts","sourceRoot":"","sources":["../../src/middle-schema/schema-types.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,aAAa,uEAAwE,CAAC;AAE5F,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,WAAW,CAE/D;AAED,UAAU,gBAAgB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACvD,IAAI,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,IAAI,cAAc,CAE/E;AAED,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IACnD,IAAI,EAAE,OAAO,EAAE,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,IAAI,UAAU,CAEvE;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACrD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,YAAY,CAAC;CACpC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,IAAI,YAAY,CAE3E;AAED,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const ALLOWED_TYPES = ["string", "number", "boolean", "object", "null", "unknown"];
|
|
2
|
+
export function isAllowedType(type) {
|
|
3
|
+
return ALLOWED_TYPES.includes(type);
|
|
4
|
+
}
|
|
5
|
+
export function isMiddleBasicVar(schema) {
|
|
6
|
+
return "type" in schema;
|
|
7
|
+
}
|
|
8
|
+
export function isMiddleEnum(schema) {
|
|
9
|
+
return "enum" in schema;
|
|
10
|
+
}
|
|
11
|
+
export function isMiddleObject(schema) {
|
|
12
|
+
return "properties" in schema;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=schema-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-types.js","sourceRoot":"","sources":["../../src/middle-schema/schema-types.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAI5F,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAmB,CAAC,CAAC;AACpD,CAAC;AAYD,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACpD,OAAO,MAAM,IAAI,MAAM,CAAC;AACzB,CAAC;AAMD,MAAM,UAAU,YAAY,CAAC,MAAoB;IAChD,OAAO,MAAM,IAAI,MAAM,CAAC;AACzB,CAAC;AAOD,MAAM,UAAU,cAAc,CAAC,MAAoB;IAClD,OAAO,YAAY,IAAI,MAAM,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
declare const ALLOWED_TYPES: readonly ["string", "number", "boolean", "object", "null", "unknown"];
|
|
2
|
+
export type AllowedType = (typeof ALLOWED_TYPES)[number];
|
|
3
|
+
export declare function isAllowedType(type: string): type is AllowedType;
|
|
4
|
+
interface MiddleBasicSpecs {
|
|
5
|
+
doc?: string;
|
|
6
|
+
isRequired: boolean;
|
|
7
|
+
isArray: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface MiddleBasicVar extends MiddleBasicSpecs {
|
|
10
|
+
type: AllowedType | AllowedType[];
|
|
11
|
+
}
|
|
12
|
+
export declare function isMiddleBasicVar(schema: MiddleSchema): schema is MiddleBasicVar;
|
|
13
|
+
export interface MiddleEnum extends MiddleBasicSpecs {
|
|
14
|
+
enum: unknown[];
|
|
15
|
+
}
|
|
16
|
+
export declare function isMiddleEnum(schema: MiddleSchema): schema is MiddleEnum;
|
|
17
|
+
export interface MiddleObject extends MiddleBasicSpecs {
|
|
18
|
+
properties: Record<string, MiddleSchema>;
|
|
19
|
+
additionalProperties?: MiddleSchema;
|
|
20
|
+
}
|
|
21
|
+
export declare function isMiddleObject(schema: MiddleSchema): schema is MiddleObject;
|
|
22
|
+
export type MiddleSchema = MiddleBasicVar | MiddleEnum | MiddleObject;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/middle-schema/schema.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,aAAa,uEAAwE,CAAC;AAE5F,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,WAAW,CAE/D;AAED,UAAU,gBAAgB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACvD,IAAI,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,IAAI,cAAc,CAE/E;AAED,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IACnD,IAAI,EAAE,OAAO,EAAE,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,IAAI,UAAU,CAEvE;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACrD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,YAAY,CAAC;CACpC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,IAAI,YAAY,CAE3E;AAED,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const ALLOWED_TYPES = ["string", "number", "boolean", "object", "null", "unknown"];
|
|
2
|
+
export function isAllowedType(type) {
|
|
3
|
+
return ALLOWED_TYPES.includes(type);
|
|
4
|
+
}
|
|
5
|
+
export function isMiddleBasicVar(schema) {
|
|
6
|
+
return "type" in schema;
|
|
7
|
+
}
|
|
8
|
+
export function isMiddleEnum(schema) {
|
|
9
|
+
return "enum" in schema;
|
|
10
|
+
}
|
|
11
|
+
export function isMiddleObject(schema) {
|
|
12
|
+
return "properties" in schema;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/middle-schema/schema.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAI5F,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAmB,CAAC,CAAC;AACpD,CAAC;AAYD,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACpD,OAAO,MAAM,IAAI,MAAM,CAAC;AACzB,CAAC;AAMD,MAAM,UAAU,YAAY,CAAC,MAAoB;IAChD,OAAO,MAAM,IAAI,MAAM,CAAC;AACzB,CAAC;AAOD,MAAM,UAAU,cAAc,CAAC,MAAoB;IAClD,OAAO,YAAY,IAAI,MAAM,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-entity.d.ts","sourceRoot":"","sources":["../../../src/schema/entities/abstract-entity.ts"],"names":[],"mappings":"AAAA,8BAAsB,YAAY;IACjC,QAAQ,CAAC,YAAY,IAAI,MAAM;IAE/B,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;CAChD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-entity.js","sourceRoot":"","sources":["../../../src/schema/entities/abstract-entity.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,YAAY;CAIjC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { JSONSchema4 } from "json-schema";
|
|
2
|
+
import { SchemaEntity } from "./abstract-entity.js";
|
|
3
|
+
import { type PrimitiveType } from "./primitive.js";
|
|
4
|
+
export declare class SchemaPrimitiveUnion extends SchemaEntity {
|
|
5
|
+
types: PrimitiveType[];
|
|
6
|
+
constructor(...types: PrimitiveType[]);
|
|
7
|
+
static fromJsonSchema(schema: JSONSchema4): SchemaPrimitiveUnion | undefined;
|
|
8
|
+
static fromTypeScript(typeScript: string): SchemaPrimitiveUnion | undefined;
|
|
9
|
+
toTypeScript(): string;
|
|
10
|
+
compareTo(other: SchemaEntity): boolean;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=primitive-union.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitive-union.d.ts","sourceRoot":"","sources":["../../../src/schema/entities/primitive-union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5F,qBAAa,oBAAqB,SAAQ,YAAY;IACrD,KAAK,EAAE,aAAa,EAAE,CAAC;gBAEX,GAAG,KAAK,EAAE,aAAa,EAAE;IAKrC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,oBAAoB,GAAG,SAAS;IAwB5E,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAalE,YAAY,IAAI,MAAM;IAItB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;CAgBhD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { SchemaEntity } from "./abstract-entity.js";
|
|
2
|
+
import { isPrimitiveSchemaType, isPrimitiveType } from "./primitive.js";
|
|
3
|
+
export class SchemaPrimitiveUnion extends SchemaEntity {
|
|
4
|
+
types;
|
|
5
|
+
constructor(...types) {
|
|
6
|
+
super();
|
|
7
|
+
this.types = types;
|
|
8
|
+
}
|
|
9
|
+
static fromJsonSchema(schema) {
|
|
10
|
+
if (!schema.type) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if (!Array.isArray(schema.type)) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
if (schema.type.length === 0) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
if (!schema.type.every(isPrimitiveSchemaType)) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const types = new Set();
|
|
23
|
+
for (const type of schema.type) {
|
|
24
|
+
if (type === "integer") {
|
|
25
|
+
types.add("number");
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
types.add(type);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return new SchemaPrimitiveUnion(...types);
|
|
32
|
+
}
|
|
33
|
+
static fromTypeScript(typeScript) {
|
|
34
|
+
const cleanText = typeScript.replaceAll(/\s+/g, "");
|
|
35
|
+
const unparsedTypes = cleanText.split("|");
|
|
36
|
+
const types = [];
|
|
37
|
+
for (const unparsedType of unparsedTypes) {
|
|
38
|
+
if (!isPrimitiveType(unparsedType)) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
types.push(unparsedType);
|
|
42
|
+
}
|
|
43
|
+
return new SchemaPrimitiveUnion(...types);
|
|
44
|
+
}
|
|
45
|
+
toTypeScript() {
|
|
46
|
+
return this.types.join(" | ");
|
|
47
|
+
}
|
|
48
|
+
compareTo(other) {
|
|
49
|
+
if (!(other instanceof SchemaPrimitiveUnion)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (this.types.length !== other.types.length) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const sortedThisTypes = [...this.types].sort(ascOrder);
|
|
56
|
+
const sortedOtherTypes = [...other.types].sort(ascOrder);
|
|
57
|
+
for (let i = 0; i < sortedThisTypes.length; i++) {
|
|
58
|
+
if (sortedThisTypes[i] !== sortedOtherTypes[i]) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function ascOrder(a, b) {
|
|
66
|
+
if (a < b) {
|
|
67
|
+
return -1;
|
|
68
|
+
}
|
|
69
|
+
if (a > b) {
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=primitive-union.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitive-union.js","sourceRoot":"","sources":["../../../src/schema/entities/primitive-union.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { JSONSchema4, JSONSchema4TypeName } from "json-schema";
|
|
2
|
+
import { SchemaEntity } from "./abstract-entity.js";
|
|
3
|
+
export type PrimitiveSchemaType = Exclude<JSONSchema4TypeName, "object" | "array">;
|
|
4
|
+
export declare function isPrimitiveSchemaType(type: JSONSchema4TypeName): type is PrimitiveSchemaType;
|
|
5
|
+
export type PrimitiveType = Exclude<PrimitiveSchemaType, "integer"> | "unknown";
|
|
6
|
+
export declare function isPrimitiveType(text: string): text is PrimitiveType;
|
|
7
|
+
export declare class SchemaPrimitive extends SchemaEntity {
|
|
8
|
+
type: PrimitiveType;
|
|
9
|
+
constructor(type: PrimitiveType);
|
|
10
|
+
static fromJsonSchema(schema: JSONSchema4): SchemaPrimitive | undefined;
|
|
11
|
+
static fromTypeScript(text: string): SchemaPrimitive | undefined;
|
|
12
|
+
toTypeScript(): string;
|
|
13
|
+
compareTo(other: SchemaEntity): boolean;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=primitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitive.d.ts","sourceRoot":"","sources":["../../../src/schema/entities/primitive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AAEnF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,IAAI,mBAAmB,CAE5F;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;AAWhF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,aAAa,CAEnE;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAChD,IAAI,EAAE,aAAa,CAAC;gBAER,IAAI,EAAE,aAAa;IAK/B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,GAAG,SAAS;IAgBvE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAQvD,YAAY,IAAI,MAAM;IAItB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;CAMhD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { SchemaEntity } from "./abstract-entity.js";
|
|
2
|
+
export function isPrimitiveSchemaType(type) {
|
|
3
|
+
return type !== "object" && type !== "array";
|
|
4
|
+
}
|
|
5
|
+
const VALID_TYPES_RECORD = {
|
|
6
|
+
string: true,
|
|
7
|
+
number: true,
|
|
8
|
+
boolean: true,
|
|
9
|
+
null: true,
|
|
10
|
+
any: true,
|
|
11
|
+
unknown: true,
|
|
12
|
+
};
|
|
13
|
+
export function isPrimitiveType(text) {
|
|
14
|
+
return text in VALID_TYPES_RECORD;
|
|
15
|
+
}
|
|
16
|
+
export class SchemaPrimitive extends SchemaEntity {
|
|
17
|
+
type;
|
|
18
|
+
constructor(type) {
|
|
19
|
+
super();
|
|
20
|
+
this.type = type;
|
|
21
|
+
}
|
|
22
|
+
static fromJsonSchema(schema) {
|
|
23
|
+
if (!schema.type) {
|
|
24
|
+
return new SchemaPrimitive("unknown");
|
|
25
|
+
}
|
|
26
|
+
if (Array.isArray(schema.type)) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (!isPrimitiveSchemaType(schema.type)) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
if (schema.type === "integer") {
|
|
33
|
+
return new SchemaPrimitive("number");
|
|
34
|
+
}
|
|
35
|
+
return new SchemaPrimitive(schema.type);
|
|
36
|
+
}
|
|
37
|
+
static fromTypeScript(text) {
|
|
38
|
+
const type = text.replaceAll(/\s+/g, "");
|
|
39
|
+
if (isPrimitiveType(type)) {
|
|
40
|
+
return new SchemaPrimitive(type);
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
toTypeScript() {
|
|
45
|
+
return this.type;
|
|
46
|
+
}
|
|
47
|
+
compareTo(other) {
|
|
48
|
+
if (!(other instanceof SchemaPrimitive)) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
return this.type === other.type;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=primitive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitive.js","sourceRoot":"","sources":["../../../src/schema/entities/primitive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD,MAAM,UAAU,qBAAqB,CAAC,IAAyB;IAC9D,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,CAAC;AAC9C,CAAC;AAID,MAAM,kBAAkB,GAAgC;IACvD,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,IAAI;CACb,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,OAAO,IAAI,IAAI,kBAAkB,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAChD,IAAI,CAAgB;IAEpB,YAAY,IAAmB;QAC9B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAmB;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAY;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAEQ,YAAY;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAEQ,SAAS,CAAC,KAAmB;QACrC,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;IACjC,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../../src/schema/parsers/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAInE,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,CAQjE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SchemaPrimitive } from "../entities/primitive.js";
|
|
2
|
+
import { SchemaPrimitiveUnion } from "../entities/primitive-union.js";
|
|
3
|
+
export function parseJsonSchema(schema) {
|
|
4
|
+
let entity;
|
|
5
|
+
entity ??= SchemaPrimitiveUnion.fromJsonSchema(schema);
|
|
6
|
+
entity ??= SchemaPrimitive.fromJsonSchema(schema);
|
|
7
|
+
if (!entity) {
|
|
8
|
+
throw new TypeError("Unsupported JSON schema");
|
|
9
|
+
}
|
|
10
|
+
return entity;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=json-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../../src/schema/parsers/json-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,UAAU,eAAe,CAAC,MAAmB;IAClD,IAAI,MAAgC,CAAC;IACrC,MAAM,KAAK,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,KAAK,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
|