@globaltypesystem/gts-ts 0.1.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/.eslintrc.json +16 -0
- package/.github/workflows/ci.yml +198 -0
- package/.gitmodules +3 -0
- package/.prettierrc +7 -0
- package/LICENSE +201 -0
- package/Makefile +64 -0
- package/README.md +298 -0
- package/dist/cast.d.ts +9 -0
- package/dist/cast.d.ts.map +1 -0
- package/dist/cast.js +153 -0
- package/dist/cast.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +318 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/compatibility.d.ts +11 -0
- package/dist/compatibility.d.ts.map +1 -0
- package/dist/compatibility.js +176 -0
- package/dist/compatibility.js.map +1 -0
- package/dist/extract.d.ts +13 -0
- package/dist/extract.d.ts.map +1 -0
- package/dist/extract.js +194 -0
- package/dist/extract.js.map +1 -0
- package/dist/gts.d.ts +18 -0
- package/dist/gts.d.ts.map +1 -0
- package/dist/gts.js +472 -0
- package/dist/gts.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/query.d.ts +10 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +171 -0
- package/dist/query.js.map +1 -0
- package/dist/relationships.d.ts +7 -0
- package/dist/relationships.d.ts.map +1 -0
- package/dist/relationships.js +80 -0
- package/dist/relationships.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +132 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/server.d.ts +33 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +678 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/types.d.ts +61 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +3 -0
- package/dist/server/types.js.map +1 -0
- package/dist/store.d.ts +39 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +1026 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +111 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/dist/x-gts-ref.d.ts +35 -0
- package/dist/x-gts-ref.d.ts.map +1 -0
- package/dist/x-gts-ref.js +304 -0
- package/dist/x-gts-ref.js.map +1 -0
- package/jest.config.js +13 -0
- package/package.json +54 -0
- package/src/cast.ts +179 -0
- package/src/cli/index.ts +315 -0
- package/src/compatibility.ts +201 -0
- package/src/extract.ts +213 -0
- package/src/gts.ts +550 -0
- package/src/index.ts +97 -0
- package/src/query.ts +191 -0
- package/src/relationships.ts +91 -0
- package/src/server/index.ts +112 -0
- package/src/server/server.ts +771 -0
- package/src/server/types.ts +74 -0
- package/src/store.ts +1178 -0
- package/src/types.ts +138 -0
- package/src/x-gts-ref.ts +349 -0
- package/tests/gts.test.ts +525 -0
- package/tsconfig.json +32 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const index_1 = require("../index");
|
|
41
|
+
const program = new commander_1.Command();
|
|
42
|
+
program
|
|
43
|
+
.name('gts')
|
|
44
|
+
.description('GTS CLI - Global Type System command-line interface')
|
|
45
|
+
.version('0.1.0')
|
|
46
|
+
.option('--path <path>', 'Path to JSON and schema files', process.env.GTS_PATH)
|
|
47
|
+
.option('--config <config>', 'Path to GTS config JSON file', process.env.GTS_CONFIG)
|
|
48
|
+
.option('-v, --verbose', 'Verbose output', false);
|
|
49
|
+
// OP#1 - Validate ID
|
|
50
|
+
program
|
|
51
|
+
.command('validate-id')
|
|
52
|
+
.description('Validate a GTS ID')
|
|
53
|
+
.requiredOption('-i, --id <id>', 'GTS ID to validate')
|
|
54
|
+
.action((options) => {
|
|
55
|
+
const result = (0, index_1.validateGtsID)(options.id);
|
|
56
|
+
console.log(JSON.stringify(result, null, 2));
|
|
57
|
+
process.exit(result.ok ? 0 : 1);
|
|
58
|
+
});
|
|
59
|
+
// OP#2 - Extract ID
|
|
60
|
+
program
|
|
61
|
+
.command('extract-id')
|
|
62
|
+
.description('Extract GTS ID from JSON content')
|
|
63
|
+
.requiredOption('-f, --file <file>', 'JSON file to extract ID from')
|
|
64
|
+
.action((options) => {
|
|
65
|
+
try {
|
|
66
|
+
const content = JSON.parse(fs.readFileSync(options.file, 'utf-8'));
|
|
67
|
+
const result = (0, index_1.extractID)(content);
|
|
68
|
+
console.log(JSON.stringify(result, null, 2));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error(`Error: ${error instanceof Error ? error.message : error}`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// OP#3 - Parse ID
|
|
76
|
+
program
|
|
77
|
+
.command('parse-id')
|
|
78
|
+
.description('Parse a GTS ID into components')
|
|
79
|
+
.requiredOption('-i, --id <id>', 'GTS ID to parse')
|
|
80
|
+
.action((options) => {
|
|
81
|
+
const result = (0, index_1.parseGtsID)(options.id);
|
|
82
|
+
console.log(JSON.stringify(result, null, 2));
|
|
83
|
+
process.exit(result.ok ? 0 : 1);
|
|
84
|
+
});
|
|
85
|
+
// OP#4 - Match ID
|
|
86
|
+
program
|
|
87
|
+
.command('match-id')
|
|
88
|
+
.description('Match GTS ID against pattern')
|
|
89
|
+
.requiredOption('-p, --pattern <pattern>', 'Pattern to match against')
|
|
90
|
+
.requiredOption('-c, --candidate <candidate>', 'Candidate ID to match')
|
|
91
|
+
.action((options) => {
|
|
92
|
+
const result = (0, index_1.matchIDPattern)(options.candidate, options.pattern);
|
|
93
|
+
console.log(JSON.stringify(result, null, 2));
|
|
94
|
+
process.exit(result.match ? 0 : 1);
|
|
95
|
+
});
|
|
96
|
+
// OP#5 - UUID
|
|
97
|
+
program
|
|
98
|
+
.command('uuid')
|
|
99
|
+
.description('Generate UUID from GTS ID')
|
|
100
|
+
.requiredOption('-i, --id <id>', 'GTS ID to convert')
|
|
101
|
+
.action((options) => {
|
|
102
|
+
const result = (0, index_1.idToUUID)(options.id);
|
|
103
|
+
if (result.error) {
|
|
104
|
+
console.error(`Error: ${result.error}`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
console.log(result.uuid);
|
|
108
|
+
});
|
|
109
|
+
// OP#6 - Validate Instance
|
|
110
|
+
program
|
|
111
|
+
.command('validate')
|
|
112
|
+
.description('Validate instance against schema')
|
|
113
|
+
.requiredOption('-i, --id <id>', 'Instance ID to validate')
|
|
114
|
+
.action((options, command) => {
|
|
115
|
+
const gts = loadStore(command.parent);
|
|
116
|
+
const result = gts.validateInstance(options.id);
|
|
117
|
+
console.log(JSON.stringify(result, null, 2));
|
|
118
|
+
process.exit(result.ok ? 0 : 1);
|
|
119
|
+
});
|
|
120
|
+
// OP#7 - Relationships
|
|
121
|
+
program
|
|
122
|
+
.command('relationships')
|
|
123
|
+
.description('Resolve relationships for an entity')
|
|
124
|
+
.requiredOption('-i, --id <id>', 'Entity ID')
|
|
125
|
+
.action((options, command) => {
|
|
126
|
+
const gts = loadStore(command.parent);
|
|
127
|
+
const result = gts.resolveRelationships(options.id);
|
|
128
|
+
console.log(JSON.stringify(result, null, 2));
|
|
129
|
+
});
|
|
130
|
+
// OP#8 - Compatibility
|
|
131
|
+
program
|
|
132
|
+
.command('compatibility')
|
|
133
|
+
.description('Check schema compatibility')
|
|
134
|
+
.requiredOption('-o, --old <old>', 'Old schema ID')
|
|
135
|
+
.requiredOption('-n, --new <new>', 'New schema ID')
|
|
136
|
+
.option('-m, --mode <mode>', 'Compatibility mode (backward|forward|full)', 'full')
|
|
137
|
+
.action((options, command) => {
|
|
138
|
+
const gts = loadStore(command.parent);
|
|
139
|
+
const result = gts.checkCompatibility(options.old, options.new, options.mode);
|
|
140
|
+
console.log(JSON.stringify(result, null, 2));
|
|
141
|
+
process.exit(result.compatible ? 0 : 1);
|
|
142
|
+
});
|
|
143
|
+
// OP#9 - Cast
|
|
144
|
+
program
|
|
145
|
+
.command('cast')
|
|
146
|
+
.description('Cast instance to different schema version')
|
|
147
|
+
.requiredOption('-f, --from <from>', 'Source instance ID')
|
|
148
|
+
.requiredOption('-t, --to <to>', 'Target schema ID')
|
|
149
|
+
.action((options, command) => {
|
|
150
|
+
const gts = loadStore(command.parent);
|
|
151
|
+
const result = gts.castInstance(options.from, options.to);
|
|
152
|
+
console.log(JSON.stringify(result, null, 2));
|
|
153
|
+
process.exit(result.ok ? 0 : 1);
|
|
154
|
+
});
|
|
155
|
+
// OP#10 - Query
|
|
156
|
+
program
|
|
157
|
+
.command('query')
|
|
158
|
+
.description('Query entities')
|
|
159
|
+
.requiredOption('-e, --expr <expr>', 'Query expression')
|
|
160
|
+
.option('-l, --limit <limit>', 'Maximum results', '100')
|
|
161
|
+
.action((options, command) => {
|
|
162
|
+
const gts = loadStore(command.parent);
|
|
163
|
+
const result = gts.query(options.expr, parseInt(options.limit, 10));
|
|
164
|
+
console.log(JSON.stringify(result, null, 2));
|
|
165
|
+
});
|
|
166
|
+
// OP#11 - Attribute
|
|
167
|
+
program
|
|
168
|
+
.command('attr')
|
|
169
|
+
.description('Get attribute value')
|
|
170
|
+
.requiredOption('-p, --path <path>', 'Attribute path (e.g., gts.vendor.pkg.ns.type.v1.0@name)')
|
|
171
|
+
.action((options, command) => {
|
|
172
|
+
const gts = loadStore(command.parent);
|
|
173
|
+
const result = gts.getAttribute(options.path);
|
|
174
|
+
console.log(JSON.stringify(result, null, 2));
|
|
175
|
+
process.exit(result.resolved ? 0 : 1);
|
|
176
|
+
});
|
|
177
|
+
// List entities
|
|
178
|
+
program
|
|
179
|
+
.command('list')
|
|
180
|
+
.description('List all entities')
|
|
181
|
+
.option('-l, --limit <limit>', 'Maximum results', '100')
|
|
182
|
+
.action((options, command) => {
|
|
183
|
+
const gts = loadStore(command.parent);
|
|
184
|
+
const entities = gts['store'].getAll().slice(0, parseInt(options.limit, 10));
|
|
185
|
+
const result = {
|
|
186
|
+
count: entities.length,
|
|
187
|
+
items: entities.map((e) => e.id),
|
|
188
|
+
};
|
|
189
|
+
console.log(JSON.stringify(result, null, 2));
|
|
190
|
+
});
|
|
191
|
+
// Server command
|
|
192
|
+
program
|
|
193
|
+
.command('server')
|
|
194
|
+
.description('Start HTTP server')
|
|
195
|
+
.option('--host <host>', 'Host to bind to', '127.0.0.1')
|
|
196
|
+
.option('--port <port>', 'Port to listen on', '8000')
|
|
197
|
+
.action(async (options, command) => {
|
|
198
|
+
const parentOpts = command.parent.opts();
|
|
199
|
+
// Import server dynamically
|
|
200
|
+
const { GtsServer } = await Promise.resolve().then(() => __importStar(require('../server/server')));
|
|
201
|
+
const config = {
|
|
202
|
+
host: options.host,
|
|
203
|
+
port: parseInt(options.port, 10),
|
|
204
|
+
verbose: parentOpts.verbose ? 2 : 1,
|
|
205
|
+
path: parentOpts.path,
|
|
206
|
+
};
|
|
207
|
+
const server = new GtsServer(config);
|
|
208
|
+
// Load entities if path provided
|
|
209
|
+
if (config.path) {
|
|
210
|
+
const gts = loadStore(command.parent);
|
|
211
|
+
// Transfer loaded entities to server
|
|
212
|
+
const entities = gts['store'].getAll();
|
|
213
|
+
for (const entity of entities) {
|
|
214
|
+
server['store'].register(entity.content);
|
|
215
|
+
}
|
|
216
|
+
console.log(`Loaded ${entities.length} entities from ${config.path}`);
|
|
217
|
+
}
|
|
218
|
+
await server.start();
|
|
219
|
+
});
|
|
220
|
+
// OpenAPI command
|
|
221
|
+
program
|
|
222
|
+
.command('openapi')
|
|
223
|
+
.description('Generate OpenAPI specification')
|
|
224
|
+
.option('-o, --out <file>', 'Output file')
|
|
225
|
+
.action((options) => {
|
|
226
|
+
const spec = {
|
|
227
|
+
openapi: '3.0.0',
|
|
228
|
+
info: {
|
|
229
|
+
title: 'GTS API',
|
|
230
|
+
version: '0.1.0',
|
|
231
|
+
description: 'Global Type System API',
|
|
232
|
+
},
|
|
233
|
+
servers: [
|
|
234
|
+
{
|
|
235
|
+
url: 'http://127.0.0.1:8000',
|
|
236
|
+
description: 'Default GTS Server',
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
paths: {},
|
|
240
|
+
components: {},
|
|
241
|
+
};
|
|
242
|
+
const output = JSON.stringify(spec, null, 2);
|
|
243
|
+
if (options.out) {
|
|
244
|
+
fs.writeFileSync(options.out, output);
|
|
245
|
+
console.log(`OpenAPI spec written to ${options.out}`);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
console.log(output);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
// Helper function to load entities from path
|
|
252
|
+
function loadStore(command) {
|
|
253
|
+
const options = command.opts();
|
|
254
|
+
const gts = new index_1.GTS({ validateRefs: false });
|
|
255
|
+
if (!options.path) {
|
|
256
|
+
return gts;
|
|
257
|
+
}
|
|
258
|
+
const paths = options.path.split(',');
|
|
259
|
+
for (const dirPath of paths) {
|
|
260
|
+
if (!fs.existsSync(dirPath)) {
|
|
261
|
+
if (options.verbose) {
|
|
262
|
+
console.warn(`Path does not exist: ${dirPath}`);
|
|
263
|
+
}
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
const stats = fs.statSync(dirPath);
|
|
267
|
+
if (!stats.isDirectory()) {
|
|
268
|
+
if (options.verbose) {
|
|
269
|
+
console.warn(`Path is not a directory: ${dirPath}`);
|
|
270
|
+
}
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
loadEntitiesFromDir(gts, dirPath, options.verbose);
|
|
274
|
+
}
|
|
275
|
+
return gts;
|
|
276
|
+
}
|
|
277
|
+
function loadEntitiesFromDir(gts, dirPath, verbose) {
|
|
278
|
+
const files = fs.readdirSync(dirPath);
|
|
279
|
+
for (const file of files) {
|
|
280
|
+
if (!file.endsWith('.json'))
|
|
281
|
+
continue;
|
|
282
|
+
const filePath = path.join(dirPath, file);
|
|
283
|
+
try {
|
|
284
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
285
|
+
const data = JSON.parse(content);
|
|
286
|
+
// Handle arrays of entities
|
|
287
|
+
const entities = Array.isArray(data) ? data : [data];
|
|
288
|
+
for (const entity of entities) {
|
|
289
|
+
try {
|
|
290
|
+
const gtsEntity = (0, index_1.createJsonEntity)(entity);
|
|
291
|
+
if (gtsEntity.id) {
|
|
292
|
+
gts.register(entity);
|
|
293
|
+
if (verbose) {
|
|
294
|
+
console.log(`Loaded: ${gtsEntity.id}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
if (verbose) {
|
|
300
|
+
console.warn(`Failed to load entity from ${file}: ${err}`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
if (verbose) {
|
|
307
|
+
console.warn(`Failed to read ${file}: ${err}`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Parse arguments
|
|
313
|
+
program.parse(process.argv);
|
|
314
|
+
// Show help if no command provided
|
|
315
|
+
if (!process.argv.slice(2).length) {
|
|
316
|
+
program.outputHelp();
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,oCAAiH;AAEjH,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,eAAe,EAAE,+BAA+B,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC9E,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;KACnF,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAEpD,qBAAqB;AACrB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,mBAAmB,CAAC;KAChC,cAAc,CAAC,eAAe,EAAE,oBAAoB,CAAC;KACrD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,IAAA,qBAAa,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,cAAc,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KACnE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC;KAClD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,cAAc,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;KACrE,cAAc,CAAC,6BAA6B,EAAE,uBAAuB,CAAC;KACtE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,IAAA,sBAAc,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEL,cAAc;AACd,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2BAA2B,CAAC;KACxC,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;KACpD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,IAAA,gBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,cAAc,CAAC,eAAe,EAAE,yBAAyB,CAAC;KAC1D,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,uBAAuB;AACvB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,qCAAqC,CAAC;KAClD,cAAc,CAAC,eAAe,EAAE,WAAW,CAAC;KAC5C,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,uBAAuB;AACvB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,4BAA4B,CAAC;KACzC,cAAc,CAAC,iBAAiB,EAAE,eAAe,CAAC;KAClD,cAAc,CAAC,iBAAiB,EAAE,eAAe,CAAC;KAClD,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,EAAE,MAAM,CAAC;KACjF,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEL,cAAc;AACd,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2CAA2C,CAAC;KACxD,cAAc,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACzD,cAAc,CAAC,eAAe,EAAE,kBAAkB,CAAC;KACnD,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gBAAgB,CAAC;KAC7B,cAAc,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;KACvD,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,KAAK,CAAC;KACvD,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qBAAqB,CAAC;KAClC,cAAc,CAAC,mBAAmB,EAAE,yDAAyD,CAAC;KAC9F,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEL,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,KAAK,CAAC;KACvD,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,WAAW,CAAC;KACvD,MAAM,CAAC,eAAe,EAAE,mBAAmB,EAAE,MAAM,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAEzC,4BAA4B;IAC5B,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;IAEvD,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,EAAE,UAAU,CAAC,IAAI;KACtB,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAErC,iCAAiC;IACjC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,qCAAqC;QACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,MAAM,kBAAkB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAAC;KACzC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,IAAI,GAAG;QACX,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,wBAAwB;SACtC;QACD,OAAO,EAAE;YACP;gBACE,GAAG,EAAE,uBAAuB;gBAC5B,WAAW,EAAE,oBAAoB;aAClC;SACF;QACD,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,6CAA6C;AAC7C,SAAS,SAAS,CAAC,OAAY;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,WAAG,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;YAClD,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,SAAS;QACX,CAAC;QAED,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAQ,EAAE,OAAe,EAAE,OAAgB;IACtE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEjC,4BAA4B;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAErD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,CAAC;oBAC3C,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;wBACjB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBACrB,IAAI,OAAO,EAAE,CAAC;4BACZ,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;wBACzC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,IAAI,CAAC,8BAA8B,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;oBAC7D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,kBAAkB,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,kBAAkB;AAClB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CompatibilityResult } from './types';
|
|
2
|
+
import { GtsStore } from './store';
|
|
3
|
+
export declare class GtsCompatibility {
|
|
4
|
+
static checkCompatibility(store: GtsStore, oldId: string, newId: string, mode?: 'backward' | 'forward' | 'full'): CompatibilityResult;
|
|
5
|
+
private static checkBackwardCompatibility;
|
|
6
|
+
private static checkForwardCompatibility;
|
|
7
|
+
private static checkPropertyCompatibility;
|
|
8
|
+
private static normalizeType;
|
|
9
|
+
private static areTypesCompatible;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=compatibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,kBAAkB,CACvB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,UAAU,GAAG,SAAS,GAAG,MAAe,GAC7C,mBAAmB;IA+DtB,OAAO,CAAC,MAAM,CAAC,0BAA0B;IA8BzC,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAyBxC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAuCzC,OAAO,CAAC,MAAM,CAAC,aAAa;IAO5B,OAAO,CAAC,MAAM,CAAC,kBAAkB;CA0BlC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GtsCompatibility = void 0;
|
|
4
|
+
const gts_1 = require("./gts");
|
|
5
|
+
class GtsCompatibility {
|
|
6
|
+
static checkCompatibility(store, oldId, newId, mode = 'full') {
|
|
7
|
+
const errors = [];
|
|
8
|
+
const warnings = [];
|
|
9
|
+
try {
|
|
10
|
+
const oldGtsId = gts_1.Gts.parseGtsID(oldId);
|
|
11
|
+
const newGtsId = gts_1.Gts.parseGtsID(newId);
|
|
12
|
+
const oldEntity = store.get(oldGtsId.id);
|
|
13
|
+
const newEntity = store.get(newGtsId.id);
|
|
14
|
+
if (!oldEntity) {
|
|
15
|
+
errors.push(`Old schema not found: ${oldId}`);
|
|
16
|
+
return { compatible: false, oldId, newId, mode, errors, warnings };
|
|
17
|
+
}
|
|
18
|
+
if (!newEntity) {
|
|
19
|
+
errors.push(`New schema not found: ${newId}`);
|
|
20
|
+
return { compatible: false, oldId, newId, mode, errors, warnings };
|
|
21
|
+
}
|
|
22
|
+
if (!oldEntity.isSchema) {
|
|
23
|
+
errors.push(`Old entity is not a schema: ${oldId}`);
|
|
24
|
+
return { compatible: false, oldId, newId, mode, errors, warnings };
|
|
25
|
+
}
|
|
26
|
+
if (!newEntity.isSchema) {
|
|
27
|
+
errors.push(`New entity is not a schema: ${newId}`);
|
|
28
|
+
return { compatible: false, oldId, newId, mode, errors, warnings };
|
|
29
|
+
}
|
|
30
|
+
const oldSchema = oldEntity.content;
|
|
31
|
+
const newSchema = newEntity.content;
|
|
32
|
+
if (mode === 'backward' || mode === 'full') {
|
|
33
|
+
this.checkBackwardCompatibility(oldSchema, newSchema, errors, warnings);
|
|
34
|
+
}
|
|
35
|
+
if (mode === 'forward' || mode === 'full') {
|
|
36
|
+
this.checkForwardCompatibility(oldSchema, newSchema, errors, warnings);
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
compatible: errors.length === 0,
|
|
40
|
+
oldId,
|
|
41
|
+
newId,
|
|
42
|
+
mode,
|
|
43
|
+
errors,
|
|
44
|
+
warnings,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
errors.push(error instanceof Error ? error.message : String(error));
|
|
49
|
+
return {
|
|
50
|
+
compatible: false,
|
|
51
|
+
oldId,
|
|
52
|
+
newId,
|
|
53
|
+
mode,
|
|
54
|
+
errors,
|
|
55
|
+
warnings,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
static checkBackwardCompatibility(oldSchema, newSchema, errors, warnings) {
|
|
60
|
+
const oldProps = oldSchema.properties || {};
|
|
61
|
+
const newProps = newSchema.properties || {};
|
|
62
|
+
const oldRequired = new Set(oldSchema.required || []);
|
|
63
|
+
const newRequired = new Set(newSchema.required || []);
|
|
64
|
+
for (const prop of oldRequired) {
|
|
65
|
+
if (!newRequired.has(prop)) {
|
|
66
|
+
warnings.push(`Property '${prop}' is no longer required in new schema`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const [propName, propSchema] of Object.entries(oldProps)) {
|
|
70
|
+
if (!(propName in newProps)) {
|
|
71
|
+
if (oldRequired.has(propName)) {
|
|
72
|
+
errors.push(`Required property '${propName}' removed in new schema`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
warnings.push(`Optional property '${propName}' removed in new schema`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.checkPropertyCompatibility(propName, propSchema, newProps[propName], errors, warnings, 'backward');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
static checkForwardCompatibility(oldSchema, newSchema, errors, warnings) {
|
|
84
|
+
const oldProps = oldSchema.properties || {};
|
|
85
|
+
const newProps = newSchema.properties || {};
|
|
86
|
+
const oldRequired = new Set(oldSchema.required || []);
|
|
87
|
+
const newRequired = new Set(newSchema.required || []);
|
|
88
|
+
for (const prop of newRequired) {
|
|
89
|
+
if (!oldRequired.has(prop)) {
|
|
90
|
+
errors.push(`New required property '${prop}' added in new schema`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
for (const [propName, propSchema] of Object.entries(newProps)) {
|
|
94
|
+
if (!(propName in oldProps)) {
|
|
95
|
+
if (newRequired.has(propName)) {
|
|
96
|
+
errors.push(`New required property '${propName}' added`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
warnings.push(`New optional property '${propName}' added`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.checkPropertyCompatibility(propName, oldProps[propName], propSchema, errors, warnings, 'forward');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
static checkPropertyCompatibility(propName, oldProp, newProp, errors, warnings, direction) {
|
|
108
|
+
const oldType = this.normalizeType(oldProp.type);
|
|
109
|
+
const newType = this.normalizeType(newProp.type);
|
|
110
|
+
if (oldType !== newType) {
|
|
111
|
+
if (this.areTypesCompatible(oldType, newType, direction)) {
|
|
112
|
+
warnings.push(`Property '${propName}' type changed from ${oldType} to ${newType}`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
errors.push(`Property '${propName}' type incompatibly changed from ${oldType} to ${newType}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (oldProp.enum && newProp.enum) {
|
|
119
|
+
const oldEnum = new Set(oldProp.enum);
|
|
120
|
+
const newEnum = new Set(newProp.enum);
|
|
121
|
+
if (direction === 'backward') {
|
|
122
|
+
for (const value of oldEnum) {
|
|
123
|
+
if (!newEnum.has(value)) {
|
|
124
|
+
errors.push(`Enum value '${value}' removed from property '${propName}'`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
for (const value of newEnum) {
|
|
130
|
+
if (!oldEnum.has(value)) {
|
|
131
|
+
warnings.push(`Enum value '${value}' added to property '${propName}'`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
static normalizeType(type) {
|
|
138
|
+
if (Array.isArray(type)) {
|
|
139
|
+
return type.join('|');
|
|
140
|
+
}
|
|
141
|
+
return type || 'any';
|
|
142
|
+
}
|
|
143
|
+
static areTypesCompatible(oldType, newType, direction) {
|
|
144
|
+
if (oldType === newType)
|
|
145
|
+
return true;
|
|
146
|
+
if (direction === 'backward') {
|
|
147
|
+
if (newType === 'any')
|
|
148
|
+
return true;
|
|
149
|
+
if (oldType === 'integer' && newType === 'number')
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
if (oldType === 'any')
|
|
154
|
+
return true;
|
|
155
|
+
if (newType === 'integer' && oldType === 'number')
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
const oldTypes = new Set(oldType.split('|'));
|
|
159
|
+
const newTypes = new Set(newType.split('|'));
|
|
160
|
+
if (direction === 'backward') {
|
|
161
|
+
for (const t of oldTypes) {
|
|
162
|
+
if (!newTypes.has(t))
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
for (const t of newTypes) {
|
|
168
|
+
if (!oldTypes.has(t))
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.GtsCompatibility = GtsCompatibility;
|
|
176
|
+
//# sourceMappingURL=compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ExtractResult } from './types';
|
|
2
|
+
export interface GtsConfig {
|
|
3
|
+
entityIdFields: string[];
|
|
4
|
+
schemaIdFields: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function getDefaultConfig(): GtsConfig;
|
|
7
|
+
export declare class GtsExtractor {
|
|
8
|
+
private static normalizeValue;
|
|
9
|
+
private static findFirstValidField;
|
|
10
|
+
private static isJsonSchema;
|
|
11
|
+
static extractID(content: any, schemaContent?: any): ExtractResult;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA8B,MAAM,SAAS,CAAC;AAGpE,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,IAAI,SAAS,CAgB5C;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,cAAc;IAa7B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC,OAAO,CAAC,MAAM,CAAC,YAAY;IAsB3B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,GAAG,GAAG,aAAa;CAwHnE"}
|