@tsofist/schema-forge 2.12.0 → 3.0.0-next.1
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/lib/artefacts-policy.d.ts +3 -0
- package/lib/artefacts-policy.d.ts.map +1 -0
- package/lib/artefacts-policy.js +7 -0
- package/lib/dbml-generator/converter.d.ts +5 -0
- package/lib/dbml-generator/converter.d.ts.map +1 -0
- package/lib/dbml-generator/converter.js +15 -0
- package/lib/dbml-generator/generator.d.ts +4 -0
- package/lib/dbml-generator/generator.d.ts.map +1 -0
- package/lib/dbml-generator/generator.js +423 -0
- package/lib/dbml-generator/generator.spec.d.ts +2 -0
- package/lib/dbml-generator/generator.spec.d.ts.map +1 -0
- package/lib/dbml-generator/generator.spec.js +94 -0
- package/lib/dbml-generator/types.d.ts +144 -0
- package/lib/dbml-generator/types.d.ts.map +1 -0
- package/lib/dbml-generator/types.js +53 -0
- package/lib/definition-info/api-signature.d.ts +18 -0
- package/lib/definition-info/api-signature.d.ts.map +1 -0
- package/lib/definition-info/api-signature.js +31 -0
- package/lib/definition-info/parser.d.ts +3 -0
- package/lib/definition-info/parser.d.ts.map +1 -0
- package/lib/definition-info/parser.js +44 -0
- package/lib/definition-info/ref.d.ts +3 -0
- package/lib/definition-info/ref.d.ts.map +1 -0
- package/lib/definition-info/ref.js +6 -0
- package/lib/definition-info/types.d.ts +48 -0
- package/lib/definition-info/types.d.ts.map +1 -0
- package/lib/definition-info/types.js +20 -0
- package/lib/efc.d.ts +27 -0
- package/lib/efc.d.ts.map +1 -0
- package/lib/efc.js +9 -0
- package/lib/fake-generator/generator-host.d.ts +4 -0
- package/lib/fake-generator/generator-host.d.ts.map +1 -0
- package/lib/fake-generator/generator-host.js +57 -0
- package/lib/fake-generator/generator.d.ts +6 -0
- package/lib/fake-generator/generator.d.ts.map +1 -0
- package/lib/fake-generator/generator.js +64 -0
- package/lib/fake-generator/generator.spec.d.ts +2 -0
- package/lib/fake-generator/generator.spec.d.ts.map +1 -0
- package/lib/{fake-generator.spec.js → fake-generator/generator.spec.js} +21 -19
- package/lib/fake-generator/modules.d.ts +3 -0
- package/lib/fake-generator/modules.d.ts.map +1 -0
- package/lib/fake-generator/modules.js +44 -0
- package/lib/fake-generator/types.d.ts +18 -0
- package/lib/fake-generator/types.d.ts.map +1 -0
- package/lib/fake-generator/types.js +2 -0
- package/lib/schema-generator/extended-annotations-reader.d.ts +2 -0
- package/lib/schema-generator/extended-annotations-reader.d.ts.map +1 -0
- package/lib/{util/patch.extended-annotations-reader.js → schema-generator/extended-annotations-reader.js} +2 -2
- package/lib/schema-generator/forge.d.ts +3 -0
- package/lib/schema-generator/forge.d.ts.map +1 -0
- package/lib/{generator.js → schema-generator/forge.js} +13 -33
- package/lib/schema-generator/forge.spec.d.ts +2 -0
- package/lib/schema-generator/forge.spec.d.ts.map +1 -0
- package/lib/{generator.spec.js → schema-generator/forge.spec.js} +113 -108
- package/lib/schema-generator/format-error.d.ts +2 -0
- package/lib/schema-generator/format-error.d.ts.map +1 -0
- package/lib/{util/format.error.js → schema-generator/format-error.js} +3 -3
- package/lib/schema-generator/generate-drafts.d.ts +17 -0
- package/lib/schema-generator/generate-drafts.d.ts.map +1 -0
- package/lib/{generator/types-generator.js → schema-generator/generate-drafts.js} +140 -120
- package/lib/schema-generator/generate-schema.d.ts +15 -0
- package/lib/schema-generator/generate-schema.d.ts.map +1 -0
- package/lib/{generator/schema-generator.js → schema-generator/generate-schema.js} +21 -20
- package/lib/{util/tsc.d.ts → schema-generator/helpers-tsc.d.ts} +2 -1
- package/lib/schema-generator/helpers-tsc.d.ts.map +1 -0
- package/lib/{shrink-names.d.ts → schema-generator/shrink-definition-name.d.ts} +2 -1
- package/lib/schema-generator/shrink-definition-name.d.ts.map +1 -0
- package/lib/{shrink-names.js → schema-generator/shrink-definition-name.js} +5 -5
- package/lib/schema-generator/sort-properties.d.ts +3 -0
- package/lib/schema-generator/sort-properties.d.ts.map +1 -0
- package/lib/{util → schema-generator}/sort-properties.js +2 -2
- package/lib/schema-generator/types.d.ts +18 -0
- package/lib/schema-generator/types.d.ts.map +1 -0
- package/lib/{generator → schema-generator}/types.js +20 -8
- package/lib/schema-registry/kw-api.d.ts +3 -0
- package/lib/schema-registry/kw-api.d.ts.map +1 -0
- package/lib/schema-registry/kw-api.js +25 -0
- package/lib/schema-registry/kw-common.d.ts +3 -0
- package/lib/schema-registry/kw-common.d.ts.map +1 -0
- package/lib/schema-registry/kw-common.js +47 -0
- package/lib/schema-registry/kw-dbml.d.ts +3 -0
- package/lib/schema-registry/kw-dbml.d.ts.map +1 -0
- package/lib/schema-registry/kw-dbml.js +79 -0
- package/lib/schema-registry/loader.d.ts +10 -0
- package/lib/schema-registry/loader.d.ts.map +1 -0
- package/lib/schema-registry/loader.js +24 -0
- package/lib/schema-registry/registry.d.ts +25 -0
- package/lib/schema-registry/registry.d.ts.map +1 -0
- package/lib/schema-registry/registry.js +230 -0
- package/lib/schema-registry/types.d.ts +78 -0
- package/lib/schema-registry/types.d.ts.map +1 -0
- package/lib/schema-registry/types.js +2 -0
- package/lib/types.d.ts +51 -78
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +0 -15
- package/package.json +6 -3
- package/lib/fake-generator.d.ts +0 -21
- package/lib/fake-generator.js +0 -158
- package/lib/fake-generator.spec.d.ts +0 -1
- package/lib/generator/schema-generator.d.ts +0 -20
- package/lib/generator/types-generator.d.ts +0 -13
- package/lib/generator/types.d.ts +0 -40
- package/lib/generator.d.ts +0 -5
- package/lib/generator.spec.d.ts +0 -1
- package/lib/index.d.ts +0 -7
- package/lib/index.js +0 -64
- package/lib/types/db.types.d.ts +0 -96
- package/lib/types/db.types.js +0 -17
- package/lib/util/format.error.d.ts +0 -1
- package/lib/util/patch.extended-annotations-reader.d.ts +0 -1
- package/lib/util/sort-properties.d.ts +0 -2
- package/lib/validator.d.ts +0 -47
- package/lib/validator.js +0 -396
- /package/lib/{util/tsc.js → schema-generator/helpers-tsc.js} +0 -0
|
@@ -6,8 +6,8 @@ const enum_1 = require("@tsofist/stem/lib/enum");
|
|
|
6
6
|
const guards_2 = require("@tsofist/stem/lib/number/integer/guards");
|
|
7
7
|
const entries_1 = require("@tsofist/stem/lib/object/entries");
|
|
8
8
|
const camel_1 = require("@tsofist/stem/lib/string/case/camel");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
9
|
+
const registry_1 = require("../schema-registry/registry");
|
|
10
|
+
const generator_1 = require("./generator");
|
|
11
11
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument */
|
|
12
12
|
describe('generateFakeData', () => {
|
|
13
13
|
const testSchema1 = {
|
|
@@ -180,58 +180,60 @@ describe('generateFakeData', () => {
|
|
|
180
180
|
};
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
|
-
let
|
|
183
|
+
let registry;
|
|
184
184
|
beforeEach(() => {
|
|
185
|
-
|
|
185
|
+
registry = (0, registry_1.createSchemaForgeRegistry)({
|
|
186
|
+
engine: { schemas: [testSchema1, testSchema2, testSchema3, testSchema4] },
|
|
187
|
+
});
|
|
186
188
|
});
|
|
187
189
|
it('default behavior', async () => {
|
|
188
190
|
{
|
|
189
|
-
const data = await (0,
|
|
191
|
+
const data = await (0, generator_1.generateFakeData)(registry, 'test-1#/definitions/Int');
|
|
190
192
|
expect(data).toBeDefined();
|
|
191
193
|
expect(data).toBeGreaterThanOrEqual(0);
|
|
192
194
|
expect((0, guards_2.isInt)(data)).toStrictEqual(true);
|
|
193
195
|
}
|
|
194
196
|
{
|
|
195
|
-
const data = await (0,
|
|
197
|
+
const data = await (0, generator_1.generateFakeData)(registry, 'test-2#/definitions/Url');
|
|
196
198
|
expect(data).toBeDefined();
|
|
197
199
|
expect(data).toMatch(/^https?:\/\/(.*)/);
|
|
198
200
|
}
|
|
199
201
|
});
|
|
200
202
|
it('cross-schema references should be handled correctly', async () => {
|
|
201
203
|
const source = 'test-2#/definitions/ForeignInt';
|
|
202
|
-
const data = await (0,
|
|
204
|
+
const data = await (0, generator_1.generateFakeData)(registry, source);
|
|
203
205
|
expect(data).toBeDefined();
|
|
204
206
|
expect(data).toBeGreaterThanOrEqual(0);
|
|
205
207
|
expect((0, guards_2.isInt)(data)).toStrictEqual(true);
|
|
206
|
-
expect(
|
|
208
|
+
expect(registry.validateBySchema(source, data).valid).toStrictEqual(true);
|
|
207
209
|
});
|
|
208
210
|
it('complex, nested data should be handled correctly', async () => {
|
|
209
211
|
{
|
|
210
212
|
const source = 'test-2#/definitions/JSFQuirks';
|
|
211
|
-
const data = await (0,
|
|
213
|
+
const data = await (0, generator_1.generateFakeData)(registry, source, {});
|
|
212
214
|
expect(data).toBeDefined();
|
|
213
|
-
expect(
|
|
215
|
+
expect(registry.validateBySchema(source, data).valid).toStrictEqual(true);
|
|
214
216
|
}
|
|
215
217
|
{
|
|
216
218
|
const source = 'test-2#/definitions/List';
|
|
217
|
-
const data = await (0,
|
|
219
|
+
const data = await (0, generator_1.generateFakeData)(registry, source);
|
|
218
220
|
expect(data).toBeDefined();
|
|
219
|
-
expect(
|
|
221
|
+
expect(registry.validateBySchema(source, data).valid).toStrictEqual(true);
|
|
220
222
|
}
|
|
221
223
|
{
|
|
222
224
|
const source = 'test-2#/definitions/ListOfNames';
|
|
223
225
|
const len = 15;
|
|
224
|
-
const data = await (0,
|
|
226
|
+
const data = await (0, generator_1.generateFakeData)(registry, source, { minItems: len, locale: 'ru' });
|
|
225
227
|
expect(data).toBeDefined();
|
|
226
|
-
expect(
|
|
228
|
+
expect(registry.validateBySchema(source, data).valid).toStrictEqual(true);
|
|
227
229
|
expect(Array.isArray(data)).toStrictEqual(true);
|
|
228
230
|
expect(data.length).toBeGreaterThanOrEqual(len);
|
|
229
231
|
expect(data.join(' ')).toMatch(/[=^+U+0400–U+04FF\s\S@/_-]+/);
|
|
230
232
|
}
|
|
231
233
|
{
|
|
232
234
|
const source = 'test-2#/definitions/Entity';
|
|
233
|
-
const data = await (0,
|
|
234
|
-
expect(
|
|
235
|
+
const data = await (0, generator_1.generateFakeData)(registry, source, { locale: 'ru' });
|
|
236
|
+
expect(registry.validateBySchema(source, data).valid).toStrictEqual(true);
|
|
235
237
|
expect(typeof data.datetime).toStrictEqual('string');
|
|
236
238
|
expect(data.datetime).toMatch(/.*Z$/);
|
|
237
239
|
expect(new Date(data.datetime)).not.toStrictEqual('Invalid Date');
|
|
@@ -243,7 +245,7 @@ describe('generateFakeData', () => {
|
|
|
243
245
|
const source = 'test-3#/definitions/RecursiveObject';
|
|
244
246
|
const count = 10;
|
|
245
247
|
for (let i = 0; i < count; i++) {
|
|
246
|
-
const data = await (0,
|
|
248
|
+
const data = await (0, generator_1.generateFakeData)(registry, source, {
|
|
247
249
|
reuseProperties: false,
|
|
248
250
|
failOnInvalidFormat: true,
|
|
249
251
|
failOnInvalidTypes: true,
|
|
@@ -255,11 +257,11 @@ describe('generateFakeData', () => {
|
|
|
255
257
|
refDepthMax: 20,
|
|
256
258
|
});
|
|
257
259
|
expect(data).toBeDefined();
|
|
258
|
-
expect(
|
|
260
|
+
expect(registry.validateBySchema(source, data).valid).toStrictEqual(true);
|
|
259
261
|
}
|
|
260
262
|
});
|
|
261
263
|
it('should handle CLDR formats', async () => {
|
|
262
|
-
const data = await (0,
|
|
264
|
+
const data = await (0, generator_1.generateFakeData)(registry, 'test-4#/definitions/CLDR');
|
|
263
265
|
const guards = {
|
|
264
266
|
[types_1.ISODateTimeType.LocalDate]: guards_1.isLocalISODateString,
|
|
265
267
|
[types_1.ISODateTimeType.LocalTime]: guards_1.isLocalISOTimeString,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/fake-generator/modules.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEhE,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EA0CnD,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmbeddedFakerModules = void 0;
|
|
4
|
+
const native_date_1 = require("@tsofist/stem/lib/cldr/date-time/native-date");
|
|
5
|
+
const types_1 = require("@tsofist/stem/lib/cldr/date-time/types");
|
|
6
|
+
exports.EmbeddedFakerModules = [
|
|
7
|
+
(faker) => ({
|
|
8
|
+
sf: {
|
|
9
|
+
/** FakerModule: sf.url */
|
|
10
|
+
url(origin = 'https://example.com', paths = { min: 1, max: 5 }, pathWords = { min: 1, max: 3 }) {
|
|
11
|
+
const pathParts = new Array(faker.helpers.rangeToNumber(paths))
|
|
12
|
+
.fill('')
|
|
13
|
+
.map(() => faker.lorem.slug(pathWords));
|
|
14
|
+
return `${origin}/${pathParts.join('/')}`;
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
cldr: {
|
|
18
|
+
/** FakerModule: cldr.localDateTime */
|
|
19
|
+
localDateTime() {
|
|
20
|
+
return (0, native_date_1.dateToTypedString)(new Date(), types_1.ISODateTimeType.LocalDateTime, true);
|
|
21
|
+
},
|
|
22
|
+
/** FakerModule: cldr.localDate */
|
|
23
|
+
localDate() {
|
|
24
|
+
return (0, native_date_1.dateToTypedString)(new Date(), types_1.ISODateTimeType.LocalDate);
|
|
25
|
+
},
|
|
26
|
+
/** FakerModule: cldr.localTime */
|
|
27
|
+
localTime() {
|
|
28
|
+
return (0, native_date_1.dateToTypedString)(new Date(), types_1.ISODateTimeType.LocalTime, true);
|
|
29
|
+
},
|
|
30
|
+
/** FakerModule: cldr.zuluDateTime */
|
|
31
|
+
zuluDateTime() {
|
|
32
|
+
return (0, native_date_1.dateToTypedString)(new Date(), types_1.ISODateTimeType.ZuluDateTime);
|
|
33
|
+
},
|
|
34
|
+
/** FakerModule: cldr.zuluDate */
|
|
35
|
+
zuluDate() {
|
|
36
|
+
return (0, native_date_1.dateToTypedString)(new Date(), types_1.ISODateTimeType.ZuluDate);
|
|
37
|
+
},
|
|
38
|
+
/** FakerModule: cldr.zuluTime */
|
|
39
|
+
zuluTime() {
|
|
40
|
+
return (0, native_date_1.dateToTypedString)(new Date(), types_1.ISODateTimeType.ZuluTime);
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
}),
|
|
44
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as fakerModule from '@faker-js/faker';
|
|
2
|
+
import type { ArrayMay } from '@tsofist/stem';
|
|
3
|
+
import { JSONSchemaFaker, type JSONSchemaFakerOptions } from 'json-schema-faker';
|
|
4
|
+
import type { SchemaForgeRegistry } from '../schema-registry/types';
|
|
5
|
+
export type SetupFakerModules = (faker: fakerModule.Faker) => object;
|
|
6
|
+
export type FakerRangeNum = Parameters<fakerModule.HelpersModule['rangeToNumber']>[0];
|
|
7
|
+
export type FakeGeneratorLocaleName = keyof typeof fakerModule.allLocales;
|
|
8
|
+
export interface FakeGeneratorOptions extends JSONSchemaFakerOptions {
|
|
9
|
+
locale?: ArrayMay<FakeGeneratorLocaleName>;
|
|
10
|
+
setupFakerModules?: SetupFakerModules[];
|
|
11
|
+
}
|
|
12
|
+
export interface FakeGeneratorHost {
|
|
13
|
+
readonly schemaRegistry: SchemaForgeRegistry;
|
|
14
|
+
readonly faker: fakerModule.Faker;
|
|
15
|
+
readonly generator: typeof JSONSchemaFaker;
|
|
16
|
+
readonly rebuild: () => this;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fake-generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,KAAK,MAAM,CAAC;AACrE,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtF,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,WAAW,CAAC,UAAU,CAAC;AAC1E,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB;IAChE,MAAM,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,eAAe,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extended-annotations-reader.d.ts","sourceRoot":"","sources":["../../src/schema-generator/extended-annotations-reader.ts"],"names":[],"mappings":""}
|
|
@@ -4,13 +4,13 @@ const error_1 = require("@tsofist/stem/lib/error");
|
|
|
4
4
|
const is_empty_1 = require("@tsofist/stem/lib/object/is-empty");
|
|
5
5
|
const ts_json_schema_generator_1 = require("ts-json-schema-generator");
|
|
6
6
|
const typescript_1 = require("typescript");
|
|
7
|
-
const
|
|
7
|
+
const helpers_tsc_1 = require("./helpers-tsc");
|
|
8
8
|
{
|
|
9
9
|
// Support for @inheritDoc tag to enforce inheritance of annotations
|
|
10
10
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
11
11
|
const getAnnotations = ts_json_schema_generator_1.ExtendedAnnotationsReader.prototype.getAnnotations;
|
|
12
12
|
ts_json_schema_generator_1.ExtendedAnnotationsReader.prototype.getAnnotations = function getAnnotationsWithInheritance(node) {
|
|
13
|
-
if (!(0,
|
|
13
|
+
if (!(0, helpers_tsc_1.hasJSDocTag)(node, 'inheritDoc'))
|
|
14
14
|
return getAnnotations.call(this, node);
|
|
15
15
|
// @ts-expect-error access to private property
|
|
16
16
|
const checker = this.typeChecker || (0, error_1.raise)('TypeChecker is not available');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forge.d.ts","sourceRoot":"","sources":["../../src/schema-generator/forge.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAuB,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAI3F,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsHzF"}
|
|
@@ -1,58 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.forgeSchema = forgeSchema;
|
|
4
|
-
exports.loadJSONSchema = loadJSONSchema;
|
|
5
|
-
exports.loadJSONSchemaSync = loadJSONSchemaSync;
|
|
6
4
|
const node_crypto_1 = require("node:crypto");
|
|
7
|
-
const node_fs_1 = require("node:fs");
|
|
8
5
|
const promises_1 = require("node:fs/promises");
|
|
9
6
|
const as_array_1 = require("@tsofist/stem/lib/as-array");
|
|
10
7
|
const error_1 = require("@tsofist/stem/lib/error");
|
|
11
8
|
const noop_1 = require("@tsofist/stem/lib/noop");
|
|
12
9
|
const random_1 = require("@tsofist/stem/lib/string/random");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
10
|
+
const artefacts_policy_1 = require("../artefacts-policy");
|
|
11
|
+
const ref_1 = require("../definition-info/ref");
|
|
12
|
+
const generate_drafts_1 = require("./generate-drafts");
|
|
13
|
+
const generate_schema_1 = require("./generate-schema");
|
|
17
14
|
async function forgeSchema(options) {
|
|
18
|
-
const
|
|
19
|
-
const sourcesPattern = (0, as_array_1.asArray)(options.sourcesFilesPattern).map((filesPattern) => `${sourcesDirectoryPattern}/${filesPattern}`);
|
|
15
|
+
const sourcesPattern = (0, as_array_1.asArray)(options.sourcesFilesPattern).map((filesPattern) => `${options.sourcesDirectoryPattern}/${filesPattern}`);
|
|
20
16
|
let tsconfig = options.tsconfig;
|
|
21
17
|
let tsconfigGenerated = false;
|
|
22
18
|
try {
|
|
23
19
|
if (options.tsconfigFrom) {
|
|
24
|
-
tsconfigGenerated = true;
|
|
25
20
|
const source = await (0, promises_1.readFile)(options.tsconfigFrom, { encoding: 'utf8' });
|
|
26
21
|
const config = JSON.parse(source);
|
|
27
22
|
config.include = sourcesPattern;
|
|
28
23
|
config.compilerOptions.noUnusedLocals = false;
|
|
29
24
|
tsconfig = `./tsconfig.schema-forge-generated.${(0, random_1.randomString)(5)}.tmp.json`;
|
|
30
25
|
await (0, promises_1.writeFile)(tsconfig, JSON.stringify(config, null, 2), { encoding: 'utf8' });
|
|
26
|
+
tsconfigGenerated = true;
|
|
31
27
|
}
|
|
32
28
|
if (!tsconfig)
|
|
33
29
|
(0, error_1.raise)('tsconfig is not specified');
|
|
34
|
-
const { sourcesTypesGeneratorConfig, files, definitions, namesBySourceFile } = await (0,
|
|
30
|
+
const { sourcesTypesGeneratorConfig, files, definitions, namesBySourceFile } = await (0, generate_drafts_1.generateDraftTypeFiles)({
|
|
35
31
|
...options,
|
|
36
32
|
tsconfig,
|
|
37
33
|
sourcesPattern,
|
|
38
34
|
});
|
|
39
|
-
const refs = definitions.map((item) => (0,
|
|
35
|
+
const refs = definitions.map((item) => (0, ref_1.buildSchemaDefinitionRef)(item, options.schemaId));
|
|
40
36
|
let schema;
|
|
41
37
|
try {
|
|
42
38
|
{
|
|
43
39
|
schema = {
|
|
44
|
-
...(await (0,
|
|
45
|
-
schemaId,
|
|
40
|
+
...(await (0, generate_schema_1.generateSchemaByDraftTypes)({
|
|
46
41
|
tsconfig,
|
|
47
42
|
definitions,
|
|
48
|
-
sourcesDirectoryPattern,
|
|
49
|
-
outputSchemaFile,
|
|
50
43
|
sourcesTypesGeneratorConfig,
|
|
51
|
-
|
|
52
|
-
openapiCompatible: options.openapiCompatible,
|
|
53
|
-
sortObjectProperties: options.sortObjectProperties,
|
|
54
|
-
allowUseFallbackDescription: options.allowUseFallbackDescription,
|
|
55
|
-
shrinkDefinitionNames: options.shrinkDefinitionNames,
|
|
44
|
+
...options,
|
|
56
45
|
})),
|
|
57
46
|
...(options.schemaMetadata || {}),
|
|
58
47
|
};
|
|
@@ -88,13 +77,13 @@ async function forgeSchema(options) {
|
|
|
88
77
|
};
|
|
89
78
|
const defs = new Set(Object.keys((schema.definitions || {})));
|
|
90
79
|
for (const name of definitions) {
|
|
91
|
-
const ref = (0,
|
|
80
|
+
const ref = (0, ref_1.buildSchemaDefinitionRef)(name, options.schemaId);
|
|
92
81
|
map.names[name] = ref;
|
|
93
82
|
map.refs[ref] = name;
|
|
94
83
|
defs.delete(name);
|
|
95
84
|
}
|
|
96
85
|
for (const name of defs) {
|
|
97
|
-
const ref = (0,
|
|
86
|
+
const ref = (0, ref_1.buildSchemaDefinitionRef)(name, options.schemaId);
|
|
98
87
|
map.serviceNames[name] = ref;
|
|
99
88
|
map.serviceRefs[ref] = name;
|
|
100
89
|
}
|
|
@@ -105,7 +94,7 @@ async function forgeSchema(options) {
|
|
|
105
94
|
}
|
|
106
95
|
}
|
|
107
96
|
finally {
|
|
108
|
-
if (!
|
|
97
|
+
if (!artefacts_policy_1.KEEP_GEN_ARTEFACTS) {
|
|
109
98
|
await Promise.all(files.map((fileName) => (0, promises_1.unlink)(fileName).catch(noop_1.noop)));
|
|
110
99
|
}
|
|
111
100
|
}
|
|
@@ -122,12 +111,3 @@ async function forgeSchema(options) {
|
|
|
122
111
|
}
|
|
123
112
|
}
|
|
124
113
|
}
|
|
125
|
-
async function loadJSONSchema(files) {
|
|
126
|
-
return Promise.all(files.map((fn) => (0, promises_1.readFile)(fn, { encoding: 'utf8' }).then(JSON.parse)));
|
|
127
|
-
}
|
|
128
|
-
function loadJSONSchemaSync(files) {
|
|
129
|
-
return files.map((fn) => {
|
|
130
|
-
const content = (0, node_fs_1.readFileSync)(fn, { encoding: 'utf8' });
|
|
131
|
-
return JSON.parse(content);
|
|
132
|
-
});
|
|
133
|
-
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forge.spec.d.ts","sourceRoot":"","sources":["../../src/schema-generator/forge.spec.ts"],"names":[],"mappings":""}
|