@tsofist/schema-forge 2.11.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.
Files changed (114) hide show
  1. package/lib/artefacts-policy.d.ts +3 -0
  2. package/lib/artefacts-policy.d.ts.map +1 -0
  3. package/lib/artefacts-policy.js +7 -0
  4. package/lib/dbml-generator/converter.d.ts +5 -0
  5. package/lib/dbml-generator/converter.d.ts.map +1 -0
  6. package/lib/dbml-generator/converter.js +15 -0
  7. package/lib/dbml-generator/generator.d.ts +4 -0
  8. package/lib/dbml-generator/generator.d.ts.map +1 -0
  9. package/lib/dbml-generator/generator.js +423 -0
  10. package/lib/dbml-generator/generator.spec.d.ts +2 -0
  11. package/lib/dbml-generator/generator.spec.d.ts.map +1 -0
  12. package/lib/dbml-generator/generator.spec.js +94 -0
  13. package/lib/dbml-generator/types.d.ts +144 -0
  14. package/lib/dbml-generator/types.d.ts.map +1 -0
  15. package/lib/dbml-generator/types.js +53 -0
  16. package/lib/definition-info/api-signature.d.ts +18 -0
  17. package/lib/definition-info/api-signature.d.ts.map +1 -0
  18. package/lib/definition-info/api-signature.js +31 -0
  19. package/lib/definition-info/parser.d.ts +3 -0
  20. package/lib/definition-info/parser.d.ts.map +1 -0
  21. package/lib/definition-info/parser.js +44 -0
  22. package/lib/definition-info/ref.d.ts +3 -0
  23. package/lib/definition-info/ref.d.ts.map +1 -0
  24. package/lib/definition-info/ref.js +6 -0
  25. package/lib/definition-info/types.d.ts +48 -0
  26. package/lib/definition-info/types.d.ts.map +1 -0
  27. package/lib/definition-info/types.js +20 -0
  28. package/lib/efc.d.ts +27 -0
  29. package/lib/efc.d.ts.map +1 -0
  30. package/lib/efc.js +9 -0
  31. package/lib/fake-generator/generator-host.d.ts +4 -0
  32. package/lib/fake-generator/generator-host.d.ts.map +1 -0
  33. package/lib/fake-generator/generator-host.js +57 -0
  34. package/lib/fake-generator/generator.d.ts +6 -0
  35. package/lib/fake-generator/generator.d.ts.map +1 -0
  36. package/lib/fake-generator/generator.js +64 -0
  37. package/lib/fake-generator/generator.spec.d.ts +2 -0
  38. package/lib/fake-generator/generator.spec.d.ts.map +1 -0
  39. package/lib/{fake-generator.spec.js → fake-generator/generator.spec.js} +21 -19
  40. package/lib/fake-generator/modules.d.ts +3 -0
  41. package/lib/fake-generator/modules.d.ts.map +1 -0
  42. package/lib/fake-generator/modules.js +44 -0
  43. package/lib/fake-generator/types.d.ts +18 -0
  44. package/lib/fake-generator/types.d.ts.map +1 -0
  45. package/lib/fake-generator/types.js +2 -0
  46. package/lib/schema-generator/extended-annotations-reader.d.ts +2 -0
  47. package/lib/schema-generator/extended-annotations-reader.d.ts.map +1 -0
  48. package/lib/{util/patch.extended-annotations-reader.js → schema-generator/extended-annotations-reader.js} +2 -2
  49. package/lib/schema-generator/forge.d.ts +3 -0
  50. package/lib/schema-generator/forge.d.ts.map +1 -0
  51. package/lib/{generator.js → schema-generator/forge.js} +13 -33
  52. package/lib/schema-generator/forge.spec.d.ts +2 -0
  53. package/lib/schema-generator/forge.spec.d.ts.map +1 -0
  54. package/lib/{generator.spec.js → schema-generator/forge.spec.js} +116 -107
  55. package/lib/schema-generator/format-error.d.ts +2 -0
  56. package/lib/schema-generator/format-error.d.ts.map +1 -0
  57. package/lib/{util/format.error.js → schema-generator/format-error.js} +3 -3
  58. package/lib/schema-generator/generate-drafts.d.ts +17 -0
  59. package/lib/schema-generator/generate-drafts.d.ts.map +1 -0
  60. package/lib/{generator/types-generator.js → schema-generator/generate-drafts.js} +140 -120
  61. package/lib/schema-generator/generate-schema.d.ts +15 -0
  62. package/lib/schema-generator/generate-schema.d.ts.map +1 -0
  63. package/lib/{generator/schema-generator.js → schema-generator/generate-schema.js} +26 -19
  64. package/lib/{util/tsc.d.ts → schema-generator/helpers-tsc.d.ts} +2 -1
  65. package/lib/schema-generator/helpers-tsc.d.ts.map +1 -0
  66. package/lib/schema-generator/shrink-definition-name.d.ts +7 -0
  67. package/lib/schema-generator/shrink-definition-name.d.ts.map +1 -0
  68. package/lib/schema-generator/shrink-definition-name.js +21 -0
  69. package/lib/schema-generator/sort-properties.d.ts +3 -0
  70. package/lib/schema-generator/sort-properties.d.ts.map +1 -0
  71. package/lib/{util → schema-generator}/sort-properties.js +2 -2
  72. package/lib/schema-generator/types.d.ts +18 -0
  73. package/lib/schema-generator/types.d.ts.map +1 -0
  74. package/lib/{generator → schema-generator}/types.js +20 -8
  75. package/lib/schema-registry/kw-api.d.ts +3 -0
  76. package/lib/schema-registry/kw-api.d.ts.map +1 -0
  77. package/lib/schema-registry/kw-api.js +25 -0
  78. package/lib/schema-registry/kw-common.d.ts +3 -0
  79. package/lib/schema-registry/kw-common.d.ts.map +1 -0
  80. package/lib/schema-registry/kw-common.js +47 -0
  81. package/lib/schema-registry/kw-dbml.d.ts +3 -0
  82. package/lib/schema-registry/kw-dbml.d.ts.map +1 -0
  83. package/lib/schema-registry/kw-dbml.js +79 -0
  84. package/lib/schema-registry/loader.d.ts +10 -0
  85. package/lib/schema-registry/loader.d.ts.map +1 -0
  86. package/lib/schema-registry/loader.js +24 -0
  87. package/lib/schema-registry/registry.d.ts +25 -0
  88. package/lib/schema-registry/registry.d.ts.map +1 -0
  89. package/lib/schema-registry/registry.js +230 -0
  90. package/lib/schema-registry/types.d.ts +78 -0
  91. package/lib/schema-registry/types.d.ts.map +1 -0
  92. package/lib/schema-registry/types.js +2 -0
  93. package/lib/types.d.ts +53 -79
  94. package/lib/types.d.ts.map +1 -0
  95. package/lib/types.js +0 -15
  96. package/package.json +7 -4
  97. package/lib/fake-generator.d.ts +0 -21
  98. package/lib/fake-generator.js +0 -158
  99. package/lib/fake-generator.spec.d.ts +0 -1
  100. package/lib/generator/schema-generator.d.ts +0 -20
  101. package/lib/generator/types-generator.d.ts +0 -13
  102. package/lib/generator/types.d.ts +0 -40
  103. package/lib/generator.d.ts +0 -5
  104. package/lib/generator.spec.d.ts +0 -1
  105. package/lib/index.d.ts +0 -7
  106. package/lib/index.js +0 -64
  107. package/lib/types/db.types.d.ts +0 -96
  108. package/lib/types/db.types.js +0 -17
  109. package/lib/util/format.error.d.ts +0 -1
  110. package/lib/util/patch.extended-annotations-reader.d.ts +0 -1
  111. package/lib/util/sort-properties.d.ts +0 -2
  112. package/lib/validator.d.ts +0 -47
  113. package/lib/validator.js +0 -396
  114. /package/lib/{util/tsc.js → schema-generator/helpers-tsc.js} +0 -0
@@ -0,0 +1,144 @@
1
+ import type { ArrayMay, HexString } from '@tsofist/stem';
2
+ import type { SchemaDefinitionInfoForType } from '../definition-info/types';
3
+ /**
4
+ * DBML Project Source
5
+ */
6
+ export interface DBMLProjectScope {
7
+ schemaId: string;
8
+ scopeName?: string;
9
+ definitions: SchemaDefinitionInfoForType[];
10
+ comment?: string;
11
+ }
12
+ /**
13
+ * DBML Project Metadata
14
+ */
15
+ export interface DBMLProjectMeta {
16
+ name: string;
17
+ note?: string;
18
+ comment?: string;
19
+ }
20
+ /**
21
+ * DBML Generator Options
22
+ */
23
+ export interface DBMLGeneratorOptions {
24
+ meta?: DBMLProjectMeta;
25
+ includeNotes?: boolean;
26
+ }
27
+ /**
28
+ * Database index type list.
29
+ *
30
+ * @see https://www.postgresql.org/docs/current/indexes-types.html PostgreSQL
31
+ */
32
+ export declare const DBMLIndexTypeList: readonly ["btree", "hash", "gin", "gist", "spgist", "brin"];
33
+ /**
34
+ * Database column type list.
35
+ */
36
+ export declare const DBMLColumnTypeList: readonly ["integer", "bigint", "smallint", "numeric", "numeric(12,2)", "numeric(15,2)", "numeric(30,18)", "float", "float8", "boolean", "text", "date", "time", "timestamp", "timestamptz", "integer[]", "bigint[]", "smallint[]", "numeric[]", "numeric(12,2)[]", "numeric(15,2)[]", "numeric(30,18)[]", "float[]", "float8[]", "boolean[]", "text[]", "date[]", "time[]", "timestamp[]", "timestamptz[]"];
37
+ /**
38
+ * Table column type.
39
+ */
40
+ export type DBMLColumnType = (typeof DBMLColumnTypeList)[number];
41
+ /**
42
+ * Database index type.
43
+ *
44
+ * @see https://www.postgresql.org/docs/current/indexes-types.html PostgreSQL
45
+ * @default 'btree'
46
+ */
47
+ export type DBMLIndexType = (typeof DBMLIndexTypeList)[number];
48
+ /**
49
+ * Database index options.
50
+ *
51
+ * @see https://dbml.dbdiagram.io/docs/#index-definition dbml spec
52
+ */
53
+ export type DBMLIndexOptions = {
54
+ /**
55
+ * Type of index.
56
+ * @default 'btree'
57
+ */
58
+ type?: DBMLIndexType;
59
+ /**
60
+ * Name of index.
61
+ * @default 'ix_[schema]_[table]_[column]'
62
+ */
63
+ name?: string;
64
+ /**
65
+ * If true, the index will be unique.
66
+ * @default false
67
+ */
68
+ unique?: boolean;
69
+ /**
70
+ * Is it a primary key
71
+ * @default false
72
+ */
73
+ pk?: boolean;
74
+ /**
75
+ * Any important notes.
76
+ * Can be used in DDL.
77
+ */
78
+ note?: string;
79
+ /**
80
+ * Any important developer comments.
81
+ * Can't be used in DDL.
82
+ */
83
+ comment?: string;
84
+ };
85
+ export type DBMLIndexOptionsDef<B extends boolean = boolean> = ArrayMay<DBMLIndexOptions | string | B>;
86
+ /**
87
+ * Database entity options.
88
+ *
89
+ * @see https://dbml.dbdiagram.io/docs/#table-definition dbml spec
90
+ */
91
+ export type DBMLEntityOptions = {
92
+ /**
93
+ * Table name.
94
+ *
95
+ * @default '[schema].[table]'
96
+ */
97
+ name?: string;
98
+ /**
99
+ * Indexes of the table.
100
+ * They can be overridden/added at the column level.
101
+ *
102
+ * Use `true` to apply default index options.
103
+ * Use string literal to set index name.
104
+ */
105
+ indexes?: {
106
+ [field: string]: DBMLIndexOptionsDef<true>;
107
+ };
108
+ /**
109
+ * Any important notes.
110
+ * Can be used in DDL.
111
+ */
112
+ note?: string;
113
+ /**
114
+ * Any important developer comments.
115
+ * Can't be used in DDL.
116
+ */
117
+ comment?: string;
118
+ /**
119
+ * Table name alias.
120
+ */
121
+ alias?: string;
122
+ /**
123
+ * Settings.
124
+ */
125
+ settings?: {
126
+ headercolor: HexString;
127
+ };
128
+ };
129
+ export type DBMLEntityOptionsDef = DBMLEntityOptions | string;
130
+ export type DBMLColumnOptions = {
131
+ /**
132
+ * Is it a primary key
133
+ *
134
+ * @default false
135
+ */
136
+ pk?: boolean;
137
+ /**
138
+ * Column type.
139
+ *
140
+ * If `undefined`, the type will be inferred automatically.
141
+ */
142
+ type?: DBMLColumnType;
143
+ };
144
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dbml-generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,2BAA2B,EAAE,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,IAAI,CAAC,EAAE,eAAe,CAAC;IAIvB,YAAY,CAAC,EAAE,OAAO,CAAC;CAc1B;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,6DAQpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,6YAgCrB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,QAAQ,CACnE,gBAAgB,GAAG,MAAM,GAAG,CAAC,CAChC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,OAAO,CAAC,EAAE;QACN,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAC9C,CAAC;IACF;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE;QAAE,WAAW,EAAE,SAAS,CAAA;KAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG;IAC5B;;;;OAIG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;CACzB,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DBMLColumnTypeList = exports.DBMLIndexTypeList = void 0;
4
+ /**
5
+ * Database index type list.
6
+ *
7
+ * @see https://www.postgresql.org/docs/current/indexes-types.html PostgreSQL
8
+ */
9
+ exports.DBMLIndexTypeList = [
10
+ //
11
+ 'btree',
12
+ 'hash',
13
+ 'gin',
14
+ 'gist',
15
+ 'spgist',
16
+ 'brin',
17
+ ];
18
+ /**
19
+ * Database column type list.
20
+ */
21
+ exports.DBMLColumnTypeList = [
22
+ 'integer',
23
+ 'bigint',
24
+ 'smallint',
25
+ 'numeric',
26
+ 'numeric(12,2)',
27
+ 'numeric(15,2)',
28
+ 'numeric(30,18)',
29
+ 'float',
30
+ 'float8',
31
+ 'boolean',
32
+ 'text',
33
+ 'date',
34
+ 'time',
35
+ 'timestamp',
36
+ 'timestamptz',
37
+ //
38
+ 'integer[]',
39
+ 'bigint[]',
40
+ 'smallint[]',
41
+ 'numeric[]',
42
+ 'numeric(12,2)[]',
43
+ 'numeric(15,2)[]',
44
+ 'numeric(30,18)[]',
45
+ 'float[]',
46
+ 'float8[]',
47
+ 'boolean[]',
48
+ 'text[]',
49
+ 'date[]',
50
+ 'time[]',
51
+ 'timestamp[]',
52
+ 'timestamptz[]',
53
+ ];
@@ -0,0 +1,18 @@
1
+ import { type APIInterfaceSDS, type APIMemberSDS, type APIMethodArgsSDS, type APIMethodResultSDS } from './types';
2
+ /**
3
+ * Builds the type signature for the API Interface
4
+ */
5
+ export declare function buildAPIInterfaceSDS(interfaceName: string): APIInterfaceSDS;
6
+ /**
7
+ * Builds the type signature for the API Interface member
8
+ */
9
+ export declare function buildAPIMemberSDS(interfaceName: string, memberName: string): APIMemberSDS;
10
+ /**
11
+ * Builds the type signature for the API Interface method arguments
12
+ */
13
+ export declare function buildAPIMethodArgsSDS(interfaceName: string, methodName: string): APIMethodArgsSDS;
14
+ /**
15
+ * Builds the type signature for the API Interface method result
16
+ */
17
+ export declare function buildAPIMethodResultSDS(interfaceName: string, methodName: string): APIMethodResultSDS;
18
+ //# sourceMappingURL=api-signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-signature.d.ts","sourceRoot":"","sources":["../../src/definition-info/api-signature.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAK1B,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,eAAe,CAE3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAEzF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAEjG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACnB,kBAAkB,CAEpB"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildAPIInterfaceSDS = buildAPIInterfaceSDS;
4
+ exports.buildAPIMemberSDS = buildAPIMemberSDS;
5
+ exports.buildAPIMethodArgsSDS = buildAPIMethodArgsSDS;
6
+ exports.buildAPIMethodResultSDS = buildAPIMethodResultSDS;
7
+ const types_1 = require("./types");
8
+ /**
9
+ * Builds the type signature for the API Interface
10
+ */
11
+ function buildAPIInterfaceSDS(interfaceName) {
12
+ return `${interfaceName}${types_1.SDS_SUFFIX_API}`;
13
+ }
14
+ /**
15
+ * Builds the type signature for the API Interface member
16
+ */
17
+ function buildAPIMemberSDS(interfaceName, memberName) {
18
+ return `${interfaceName}_${memberName}${types_1.SDS_SUFFIX_MEMBER}`;
19
+ }
20
+ /**
21
+ * Builds the type signature for the API Interface method arguments
22
+ */
23
+ function buildAPIMethodArgsSDS(interfaceName, methodName) {
24
+ return `${interfaceName}_${methodName}${types_1.SDS_SUFFIX_METHOD_ARGS}`;
25
+ }
26
+ /**
27
+ * Builds the type signature for the API Interface method result
28
+ */
29
+ function buildAPIMethodResultSDS(interfaceName, methodName) {
30
+ return `${interfaceName}_${methodName}${types_1.SDS_SUFFIX_METHOD_RES}`;
31
+ }
@@ -0,0 +1,3 @@
1
+ import { type SchemaDefinitionInfo } from './types';
2
+ export declare function parseSchemaDefinitionInfo(definitionName: string, schemaId: string): SchemaDefinitionInfo;
3
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/definition-info/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,oBAAoB,EAK5B,MAAM,SAAS,CAAC;AAEjB,wBAAgB,yBAAyB,CACrC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACjB,oBAAoB,CAsCtB"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseSchemaDefinitionInfo = parseSchemaDefinitionInfo;
4
+ const substr_1 = require("@tsofist/stem/lib/string/substr");
5
+ const ref_1 = require("./ref");
6
+ const types_1 = require("./types");
7
+ function parseSchemaDefinitionInfo(definitionName, schemaId) {
8
+ const kind = definitionName.endsWith(types_1.SDS_SUFFIX_API)
9
+ ? types_1.SchemaDefinitionInfoKind.API
10
+ : definitionName.endsWith(types_1.SDS_SUFFIX_METHOD_ARGS)
11
+ ? types_1.SchemaDefinitionInfoKind.APIMethodArguments
12
+ : definitionName.endsWith(types_1.SDS_SUFFIX_METHOD_RES)
13
+ ? types_1.SchemaDefinitionInfoKind.APIMethodResult
14
+ : types_1.SchemaDefinitionInfoKind.Type;
15
+ const ref = (0, ref_1.buildSchemaDefinitionRef)(definitionName, schemaId);
16
+ switch (kind) {
17
+ case types_1.SchemaDefinitionInfoKind.API:
18
+ return {
19
+ ref,
20
+ kind,
21
+ name: definitionName,
22
+ schemaId,
23
+ interface: (0, substr_1.substr)(definitionName, 0, types_1.SDS_SUFFIX_API),
24
+ };
25
+ case types_1.SchemaDefinitionInfoKind.APIMethodArguments:
26
+ case types_1.SchemaDefinitionInfoKind.APIMethodResult:
27
+ return {
28
+ ref,
29
+ kind,
30
+ name: definitionName,
31
+ schemaId,
32
+ interface: (0, substr_1.substr)(definitionName, 0, '_'),
33
+ method: (0, substr_1.substr)(definitionName, '_', '_'),
34
+ };
35
+ case types_1.SchemaDefinitionInfoKind.Type:
36
+ return {
37
+ ref,
38
+ kind,
39
+ name: definitionName,
40
+ schemaId,
41
+ type: definitionName,
42
+ };
43
+ }
44
+ }
@@ -0,0 +1,3 @@
1
+ import type { SchemaForgeDefinitionRef } from '../types';
2
+ export declare function buildSchemaDefinitionRef(definitionName: string, schemaId: string | undefined): SchemaForgeDefinitionRef;
3
+ //# sourceMappingURL=ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/definition-info/ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,wBAAgB,wBAAwB,CACpC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC7B,wBAAwB,CAE1B"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSchemaDefinitionRef = buildSchemaDefinitionRef;
4
+ function buildSchemaDefinitionRef(definitionName, schemaId) {
5
+ return `${schemaId || ''}#/definitions/${definitionName}`;
6
+ }
@@ -0,0 +1,48 @@
1
+ import type { SchemaForgeDefinitionRef } from '../types';
2
+ /**
3
+ * Kind of schema definition information
4
+ */
5
+ export declare enum SchemaDefinitionInfoKind {
6
+ Type = 0,
7
+ API = 1,
8
+ APIMethodResult = 2,
9
+ APIMethodArguments = 3
10
+ }
11
+ /**
12
+ * Schema definition information
13
+ */
14
+ export type SchemaDefinitionInfo = SchemaDefinitionInfoForType | SchemaDefinitionInfoForAPIInterface | SchemaDefinitionInfoForAPIMethodArguments | SchemaDefinitionInfoForAPIMethodResult;
15
+ export interface SchemaDefinitionInfoForType extends SDIBase {
16
+ kind: SchemaDefinitionInfoKind.Type;
17
+ type: string;
18
+ }
19
+ export interface SchemaDefinitionInfoForAPIInterface extends SDIBase {
20
+ kind: SchemaDefinitionInfoKind.API;
21
+ interface: string;
22
+ }
23
+ export interface SchemaDefinitionInfoForAPIMethodArguments extends SDIBase {
24
+ kind: SchemaDefinitionInfoKind.APIMethodArguments;
25
+ interface: string;
26
+ method: string;
27
+ }
28
+ export interface SchemaDefinitionInfoForAPIMethodResult extends SDIBase {
29
+ kind: SchemaDefinitionInfoKind.APIMethodResult;
30
+ interface: string;
31
+ method: string;
32
+ }
33
+ interface SDIBase {
34
+ name: string;
35
+ schemaId: string;
36
+ ref: SchemaForgeDefinitionRef;
37
+ kind: SchemaDefinitionInfoKind;
38
+ }
39
+ export declare const SDS_SUFFIX_API: string;
40
+ export declare const SDS_SUFFIX_MEMBER = "__APIMember";
41
+ export declare const SDS_SUFFIX_METHOD_ARGS: string;
42
+ export declare const SDS_SUFFIX_METHOD_RES: string;
43
+ export type APIInterfaceSDS = `${string}${typeof SDS_SUFFIX_API}`;
44
+ export type APIMemberSDS = `${string}_${string}${typeof SDS_SUFFIX_MEMBER}`;
45
+ export type APIMethodArgsSDS = `${string}_${string}${typeof SDS_SUFFIX_METHOD_ARGS}`;
46
+ export type APIMethodResultSDS = `${string}_${string}${typeof SDS_SUFFIX_METHOD_RES}`;
47
+ export {};
48
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/definition-info/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD;;GAEG;AACH,oBAAY,wBAAwB;IAChC,IAAI,IAAA;IACJ,GAAG,IAAA;IACH,eAAe,IAAA;IACf,kBAAkB,IAAA;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC1B,2BAA2B,GAC3B,mCAAmC,GACnC,yCAAyC,GACzC,sCAAsC,CAAC;AAE7C,MAAM,WAAW,2BAA4B,SAAQ,OAAO;IACxD,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mCAAoC,SAAQ,OAAO;IAChE,IAAI,EAAE,wBAAwB,CAAC,GAAG,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yCAA0C,SAAQ,OAAO;IACtE,IAAI,EAAE,wBAAwB,CAAC,kBAAkB,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sCAAuC,SAAQ,OAAO;IACnE,IAAI,EAAE,wBAAwB,CAAC,eAAe,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,OAAO;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,wBAAwB,CAAC;IAC9B,IAAI,EAAE,wBAAwB,CAAC;CAClC;AAID,eAAO,MAAM,cAAc,QAAkE,CAAC;AAC9F,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,sBAAsB,QAAmD,CAAC;AACvF,eAAO,MAAM,qBAAqB,QAAuD,CAAC;AAE1F,MAAM,MAAM,eAAe,GAAG,GAAG,MAAM,GAAG,OAAO,cAAc,EAAE,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,OAAO,iBAAiB,EAAE,CAAC;AAC5E,MAAM,MAAM,gBAAgB,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,OAAO,sBAAsB,EAAE,CAAC;AACrF,MAAM,MAAM,kBAAkB,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,OAAO,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SDS_SUFFIX_METHOD_RES = exports.SDS_SUFFIX_METHOD_ARGS = exports.SDS_SUFFIX_MEMBER = exports.SDS_SUFFIX_API = exports.SchemaDefinitionInfoKind = void 0;
4
+ const node_process_1 = require("node:process");
5
+ const as_bool_1 = require("@tsofist/stem/lib/as-bool");
6
+ /**
7
+ * Kind of schema definition information
8
+ */
9
+ var SchemaDefinitionInfoKind;
10
+ (function (SchemaDefinitionInfoKind) {
11
+ SchemaDefinitionInfoKind[SchemaDefinitionInfoKind["Type"] = 0] = "Type";
12
+ SchemaDefinitionInfoKind[SchemaDefinitionInfoKind["API"] = 1] = "API";
13
+ SchemaDefinitionInfoKind[SchemaDefinitionInfoKind["APIMethodResult"] = 2] = "APIMethodResult";
14
+ SchemaDefinitionInfoKind[SchemaDefinitionInfoKind["APIMethodArguments"] = 3] = "APIMethodArguments";
15
+ })(SchemaDefinitionInfoKind || (exports.SchemaDefinitionInfoKind = SchemaDefinitionInfoKind = {}));
16
+ const LEGACY_DEFINITIONS = (0, as_bool_1.asBool)(node_process_1.env.SF_LEGACY_DEFINITIONS); // todo
17
+ exports.SDS_SUFFIX_API = LEGACY_DEFINITIONS ? '_InterfaceDeclaration' : '__APIInterface';
18
+ exports.SDS_SUFFIX_MEMBER = '__APIMember';
19
+ exports.SDS_SUFFIX_METHOD_ARGS = LEGACY_DEFINITIONS ? '_Args' : '__APIMethodArgs';
20
+ exports.SDS_SUFFIX_METHOD_RES = LEGACY_DEFINITIONS ? '_Result' : '__APIMethodResult';
package/lib/efc.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ import { ErrorFamily } from '@tsofist/stem/lib/error/family';
2
+ import type { ErrorCodeFamily, ErrorFamilyCode } from '@tsofist/stem/lib/error/types';
3
+ import type { SchemaForgeDefinitionRef, SchemaForgeValidationReport } from './types';
4
+ export type SchemaForgeErrorCode = ErrorFamilyCode<typeof SchemaForgeErrors>;
5
+ export type SchemaForgeErrorCodeFamily = ErrorCodeFamily<'EC_SF'>;
6
+ export declare const SchemaForgeErrorPrefix: SchemaForgeErrorCodeFamily;
7
+ export declare const SchemaForgeErrors: ErrorFamily<`EC_${string}`, import("@tsofist/stem/lib/error/types").ErrorCodeFamilySep, `EC_SF_${Uppercase<string>}`, import("@tsofist/stem").ShallowExact<{
8
+ [x: `EC_SF_${Uppercase<string>}`]: [publicMessage: string] | [publicMessage: string, contextDefaults?: any];
9
+ }, {
10
+ EC_SF_SCHEMA_NOT_FOUND: [publicMessage: string, contextDefaults?: SchemaForgeSchemaNotFoundErrorContext | undefined];
11
+ EC_SF_VALIDATION_FAILED: [publicMessage: string, contextDefaults?: SchemaForgeValidationErrorContext | undefined];
12
+ }>> & {
13
+ readonly EC_SF_SCHEMA_NOT_FOUND: "EC_SF_SCHEMA_NOT_FOUND";
14
+ readonly EC_SF_VALIDATION_FAILED: "EC_SF_VALIDATION_FAILED";
15
+ };
16
+ export type SchemaForgeValidationErrorContext = SchemaForgeValidationContextBase & {
17
+ schema: SchemaForgeDefinitionRef;
18
+ errors: SchemaForgeValidationReport;
19
+ };
20
+ export type SchemaForgeSchemaNotFoundErrorContext = SchemaForgeValidationContextBase & {
21
+ schema: SchemaForgeDefinitionRef;
22
+ };
23
+ export type SchemaForgeValidationContextBase = {
24
+ errorMessage?: string;
25
+ instancePath?: string;
26
+ };
27
+ //# sourceMappingURL=efc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"efc.d.ts","sourceRoot":"","sources":["../src/efc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAErF,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC7E,MAAM,MAAM,0BAA0B,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AAClE,eAAO,MAAM,sBAAsB,EAAE,0BAAqC,CAAC;AAE3E,eAAO,MAAM,iBAAiB;;;;;;;;CAO5B,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,gCAAgC,GAAG;IAC/E,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE,2BAA2B,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,qCAAqC,GAAG,gCAAgC,GAAG;IACnF,MAAM,EAAE,wBAAwB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC"}
package/lib/efc.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaForgeErrors = exports.SchemaForgeErrorPrefix = void 0;
4
+ const family_1 = require("@tsofist/stem/lib/error/family");
5
+ exports.SchemaForgeErrorPrefix = 'EC_SF_';
6
+ exports.SchemaForgeErrors = family_1.ErrorFamily.declare(exports.SchemaForgeErrorPrefix, {
7
+ EC_SF_SCHEMA_NOT_FOUND: family_1.ErrorFamily.member('[SchemaForge] Schema not found'),
8
+ EC_SF_VALIDATION_FAILED: family_1.ErrorFamily.member('[SchemaForge] Data validation failed'),
9
+ });
@@ -0,0 +1,4 @@
1
+ import type { SchemaForgeRegistry } from '../schema-registry/types';
2
+ import type { FakeGeneratorHost, FakeGeneratorOptions } from './types';
3
+ export declare function createFakeGeneratorHost(source: SchemaForgeRegistry, options?: FakeGeneratorOptions): FakeGeneratorHost;
4
+ //# sourceMappingURL=generator-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator-host.d.ts","sourceRoot":"","sources":["../../src/fake-generator/generator-host.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAA2B,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEhG,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE,oBAAyB,GACnC,iBAAiB,CA4CnB"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFakeGeneratorHost = createFakeGeneratorHost;
4
+ const fakerModule = require("@faker-js/faker");
5
+ const as_array_1 = require("@tsofist/stem/lib/as-array");
6
+ const json_schema_faker_1 = require("json-schema-faker");
7
+ const modules_1 = require("./modules");
8
+ function createFakeGeneratorHost(source, options = {}) {
9
+ const rebuild = () => {
10
+ const schemaRegistry = source;
11
+ const faker = new fakerModule.Faker({
12
+ locale: (0, as_array_1.asArray)(options.locale || ['en']).map((name) => fakerModule.allLocales[name]),
13
+ });
14
+ const generator = json_schema_faker_1.JSONSchemaFaker.extend('faker', () => {
15
+ Object.assign(faker, {
16
+ date: proxyFakerDateModule(faker.date),
17
+ });
18
+ for (const item of [
19
+ //
20
+ ...modules_1.EmbeddedFakerModules,
21
+ ...(options.setupFakerModules || []),
22
+ ]) {
23
+ const modules = item(faker);
24
+ Object.assign(faker, modules);
25
+ }
26
+ return faker;
27
+ });
28
+ generator.option({
29
+ alwaysFakeOptionals: true,
30
+ refDepthMax: 1_000,
31
+ pruneProperties: ['dbEntity', 'dbIndex', 'dbColumn'],
32
+ ...options,
33
+ resolveJsonPath: false,
34
+ });
35
+ return {
36
+ rebuild,
37
+ generator,
38
+ faker,
39
+ schemaRegistry,
40
+ };
41
+ };
42
+ return rebuild();
43
+ }
44
+ function proxyFakerDateModule(obj) {
45
+ return new Proxy(obj, {
46
+ get(target, prop, receiver) {
47
+ const originalValue = Reflect.get(target, prop, receiver);
48
+ if (typeof originalValue === 'function') {
49
+ return function (...args) {
50
+ const result = originalValue.apply(this, args);
51
+ return result instanceof Date ? result.toISOString() : result;
52
+ };
53
+ }
54
+ return originalValue;
55
+ },
56
+ });
57
+ }
@@ -0,0 +1,6 @@
1
+ import type { SchemaForgeRegistry } from '../schema-registry/types';
2
+ import type { SchemaForgeDefinitionRef } from '../types';
3
+ import type { FakeGeneratorHost, FakeGeneratorOptions } from './types';
4
+ export declare function generateFakeData<T = unknown>(schemaRegistry: SchemaForgeRegistry, source: SchemaForgeDefinitionRef, options?: FakeGeneratorOptions): T;
5
+ export declare function generateFakeData<T = unknown>(host: FakeGeneratorHost, source: SchemaForgeDefinitionRef): T;
6
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/fake-generator/generator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEvE,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EACxC,cAAc,EAAE,mBAAmB,EACnC,MAAM,EAAE,wBAAwB,EAChC,OAAO,CAAC,EAAE,oBAAoB,GAC/B,CAAC,CAAC;AACL,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EACxC,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,wBAAwB,GACjC,CAAC,CAAC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateFakeData = generateFakeData;
4
+ const entries_1 = require("@tsofist/stem/lib/object/entries");
5
+ const substr_1 = require("@tsofist/stem/lib/string/substr");
6
+ const generator_host_1 = require("./generator-host");
7
+ function generateFakeData(schemaRegistryOrHost, source, options = {}) {
8
+ const host = 'schemaRegistry' in schemaRegistryOrHost
9
+ ? schemaRegistryOrHost
10
+ : (0, generator_host_1.createFakeGeneratorHost)(schemaRegistryOrHost, options);
11
+ const { schemaRegistry, generator } = host;
12
+ const refs = {};
13
+ {
14
+ const rootSchemaId = (0, substr_1.substr)(source, 0, '#');
15
+ for (const def of schemaRegistry.listDefinitions()) {
16
+ const schema = schemaRegistry.getSchema(def.ref);
17
+ if (rootSchemaId === def.schemaId) {
18
+ refs[`#/definitions/${def.name}`] = schema;
19
+ }
20
+ else {
21
+ refs[def.ref] = schema;
22
+ }
23
+ }
24
+ }
25
+ const schema = schemaRegistry.getSchema(source);
26
+ if (schema == null)
27
+ throw new Error(`Schema not found: ${source}`);
28
+ const result = generator.generate(schema, refs);
29
+ cleanJSFQuirksArtefacts(result);
30
+ return result;
31
+ }
32
+ function cleanJSFQuirksArtefacts(target) {
33
+ const stack = [[target]];
34
+ const hasProblem = (item) => {
35
+ return (typeof item === 'object' &&
36
+ item !== null &&
37
+ ('$ref' in item || 'anyOf' in item || 'allOf' in item || 'not' in item));
38
+ };
39
+ while (stack.length > 0) {
40
+ const [current] = stack.pop();
41
+ if (Array.isArray(current)) {
42
+ for (let i = current.length - 1; i >= 0; i--) {
43
+ const element = current[i];
44
+ if (hasProblem(element)) {
45
+ current.splice(i, 1);
46
+ }
47
+ else if (typeof element === 'object' && element !== null) {
48
+ stack.push([element]);
49
+ }
50
+ }
51
+ }
52
+ else if (current != null && typeof current === 'object') {
53
+ for (const [propKey, propValue] of (0, entries_1.entries)(current)) {
54
+ if (hasProblem(propValue)) {
55
+ delete current[propKey];
56
+ }
57
+ else if (typeof propValue === 'object' && propValue !== null) {
58
+ stack.push([propValue]);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ return target;
64
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generator.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.spec.d.ts","sourceRoot":"","sources":["../../src/fake-generator/generator.spec.ts"],"names":[],"mappings":""}