ts-openapi-codegen 1.0.0-beta.3 → 1.0.0-beta.5
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/README.md +35 -1
- package/dist/cli/generate/runGenerateOpenApi.js +3 -3
- package/dist/cli/index.js +2 -1
- package/dist/common/Options.d.ts +1 -0
- package/dist/common/Options.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Types.d.ts +1 -1
- package/dist/common/VersionedSchema/Types.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts +9 -0
- package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.js +44 -0
- package/dist/common/VersionedSchema/Utils/generateKeyMappingForInvalidKeys.d.ts +2 -0
- package/dist/common/VersionedSchema/Utils/generateKeyMappingForInvalidKeys.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/generateKeyMappingForInvalidKeys.js +27 -0
- package/dist/common/VersionedSchema/Utils/getErrorFieldsFromValidation.d.ts +6 -0
- package/dist/common/VersionedSchema/Utils/getErrorFieldsFromValidation.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/getErrorFieldsFromValidation.js +7 -0
- package/dist/common/VersionedSchema/Utils/{getUniqueAllShemasKeys.d.ts → getUniqueKeysFromSchemas.d.ts} +3 -3
- package/dist/common/VersionedSchema/Utils/getUniqueKeysFromSchemas.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/{getUniqueAllShemasKeys.js → getUniqueKeysFromSchemas.js} +4 -4
- package/dist/common/VersionedSchema/Utils/getUniqueObjectKeys.js +2 -2
- package/dist/common/VersionedSchema/Utils/joiHandlers.d.ts +3 -3
- package/dist/common/VersionedSchema/Utils/joiHandlers.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/joiHandlers.js +24 -17
- package/dist/common/VersionedSchema/Utils/{migrateToLatestVersion.d.ts → migrateDataToLatestSchemaVersion.d.ts} +5 -5
- package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +43 -0
- package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts +2 -0
- package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.js +18 -0
- package/dist/common/VersionedSchema/Utils/traverseObjectStructure.d.ts +3 -0
- package/dist/common/VersionedSchema/Utils/traverseObjectStructure.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/{traverseGeneric.js → traverseObjectStructure.js} +6 -4
- package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts +8 -0
- package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts.map +1 -0
- package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.js +44 -0
- package/dist/common/__tests__/__mock__/mockJoiSchema.d.ts +19 -0
- package/dist/common/__tests__/__mock__/mockJoiSchema.d.ts.map +1 -0
- package/dist/common/__tests__/__mock__/mockJoiSchema.js +14 -0
- package/dist/common/__tests__/determineBestMatchingSchemaVersion.test.d.ts +2 -0
- package/dist/common/__tests__/determineBestMatchingSchemaVersion.test.d.ts.map +1 -0
- package/dist/common/__tests__/determineBestMatchingSchemaVersion.test.js +38 -0
- package/dist/common/__tests__/generateKeyMappingForInvalidKeys.test.d.ts +2 -0
- package/dist/common/__tests__/generateKeyMappingForInvalidKeys.test.d.ts.map +1 -0
- package/dist/common/__tests__/generateKeyMappingForInvalidKeys.test.js +22 -0
- package/dist/common/__tests__/getUniqueKeysFromSchemas.test.d.ts +2 -0
- package/dist/common/__tests__/getUniqueKeysFromSchemas.test.d.ts.map +1 -0
- package/dist/common/__tests__/getUniqueKeysFromSchemas.test.js +20 -0
- package/dist/common/__tests__/getUniqueObjectKeys.test.d.ts +2 -0
- package/dist/common/__tests__/getUniqueObjectKeys.test.d.ts.map +1 -0
- package/dist/common/__tests__/getUniqueObjectKeys.test.js +24 -0
- package/dist/common/__tests__/mergeObjectSchemas.test.js +1 -1
- package/dist/common/__tests__/migrationForMultiOptions.test.js +85 -70
- package/dist/common/__tests__/migrationForOptions.test.js +28 -48
- package/dist/common/__tests__/replaceInvalidKeysWithMappedNames.test.d.ts +2 -0
- package/dist/common/__tests__/replaceInvalidKeysWithMappedNames.test.d.ts.map +1 -0
- package/dist/common/__tests__/replaceInvalidKeysWithMappedNames.test.js +25 -0
- package/dist/common/__tests__/validateAndSuggestKeyCorrections.test.d.ts +2 -0
- package/dist/common/__tests__/validateAndSuggestKeyCorrections.test.d.ts.map +1 -0
- package/dist/common/__tests__/validateAndSuggestKeyCorrections.test.js +25 -0
- package/dist/core/Context.d.ts +10 -1
- package/dist/core/Context.d.ts.map +1 -1
- package/dist/core/Context.js +8 -1
- package/dist/core/api/v2/parser/__tests__/getType.test.js +3 -3
- package/dist/core/api/v2/parser/getOperationParameters.d.ts.map +1 -1
- package/dist/core/api/v2/parser/getOperationParameters.js +9 -7
- package/dist/core/api/v3/parser/__tests__/getType.test.js +3 -3
- package/dist/core/api/v3/parser/getOperation.d.ts.map +1 -1
- package/dist/core/api/v3/parser/getOperation.js +4 -2
- package/dist/core/api/v3/parser/getOperationParameters.d.ts.map +1 -1
- package/dist/core/api/v3/parser/getOperationParameters.js +9 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/types/Consts.d.ts +10 -0
- package/dist/core/types/Consts.d.ts.map +1 -1
- package/dist/core/types/Consts.js +11 -1
- package/dist/core/types/Models.d.ts +3 -0
- package/dist/core/types/Models.d.ts.map +1 -1
- package/dist/core/utils/__mocks__/createOperationParameter.d.ts +3 -0
- package/dist/core/utils/__mocks__/createOperationParameter.d.ts.map +1 -0
- package/dist/core/utils/__mocks__/createOperationParameter.js +28 -0
- package/dist/core/utils/__tests__/sortByRequiredExtended.test.d.ts +2 -0
- package/dist/core/utils/__tests__/sortByRequiredExtended.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/sortByRequiredExtended.test.js +145 -0
- package/dist/core/utils/__tests__/sortByRequiredSimple.test.d.ts +2 -0
- package/dist/core/utils/__tests__/sortByRequiredSimple.test.d.ts.map +1 -0
- package/dist/core/utils/__tests__/sortByRequiredSimple.test.js +80 -0
- package/dist/core/utils/__tests__/writeClient.test.js +3 -3
- package/dist/core/utils/__tests__/writeClientCore.test.js +2 -2
- package/dist/core/utils/__tests__/writeClientIndex.test.js +2 -2
- package/dist/core/utils/__tests__/writeClientModels.test.js +2 -2
- package/dist/core/utils/__tests__/writeClientSchemas.test.js +2 -2
- package/dist/core/utils/__tests__/writeClientServices.test.js +2 -2
- package/dist/core/utils/getOpenApiSpec.d.ts.map +1 -1
- package/dist/core/utils/getOpenApiSpec.js +0 -7
- package/dist/core/utils/getPropertyGroupExtended.d.ts +4 -0
- package/dist/core/utils/getPropertyGroupExtended.d.ts.map +1 -0
- package/dist/core/utils/getPropertyGroupExtended.js +10 -0
- package/dist/core/utils/getPropertyGroupSimple.d.ts +3 -0
- package/dist/core/utils/getPropertyGroupSimple.d.ts.map +1 -0
- package/dist/core/utils/getPropertyGroupSimple.js +9 -0
- package/dist/core/utils/precompileTemplates.js +1 -1
- package/dist/core/utils/sortByRequiredExtended.d.ts +3 -0
- package/dist/core/utils/sortByRequiredExtended.d.ts.map +1 -0
- package/dist/core/utils/sortByRequiredExtended.js +15 -0
- package/dist/core/utils/sortByRequiredSimple.d.ts +3 -0
- package/dist/core/utils/sortByRequiredSimple.d.ts.map +1 -0
- package/dist/core/utils/sortByRequiredSimple.js +10 -0
- package/package.json +1 -1
- package/dist/common/VersionedSchema/Utils/getUniqueAllShemasKeys.d.ts.map +0 -1
- package/dist/common/VersionedSchema/Utils/guessVersion.d.ts +0 -3
- package/dist/common/VersionedSchema/Utils/guessVersion.d.ts.map +0 -1
- package/dist/common/VersionedSchema/Utils/guessVersion.js +0 -16
- package/dist/common/VersionedSchema/Utils/migrateToLatestVersion.d.ts.map +0 -1
- package/dist/common/VersionedSchema/Utils/migrateToLatestVersion.js +0 -34
- package/dist/common/VersionedSchema/Utils/traverseGeneric.d.ts +0 -3
- package/dist/common/VersionedSchema/Utils/traverseGeneric.d.ts.map +0 -1
- package/dist/common/VersionedSchema/Utils/validateUnknownKeys.d.ts +0 -2
- package/dist/common/VersionedSchema/Utils/validateUnknownKeys.d.ts.map +0 -1
- package/dist/common/VersionedSchema/Utils/validateUnknownKeys.js +0 -32
- package/dist/common/__tests__/guessVersion.test.d.ts +0 -2
- package/dist/common/__tests__/guessVersion.test.d.ts.map +0 -1
- package/dist/common/__tests__/guessVersion.test.js +0 -26
- package/dist/core/utils/__tests__/sortByRequired.test.d.ts +0 -2
- package/dist/core/utils/__tests__/sortByRequired.test.d.ts.map +0 -1
- package/dist/core/utils/__tests__/sortByRequired.test.js +0 -108
- package/dist/core/utils/sortByRequired.d.ts +0 -3
- package/dist/core/utils/sortByRequired.d.ts.map +0 -1
- package/dist/core/utils/sortByRequired.js +0 -18
|
@@ -40,13 +40,7 @@ async function getOpenApiSpec(context, input) {
|
|
|
40
40
|
if (!fileExists) {
|
|
41
41
|
throw new Error(`Could not read OpenApi spec: "${absoluteInput}"`);
|
|
42
42
|
}
|
|
43
|
-
// 2. Вызываем статический метод вместо new RefParser()
|
|
44
|
-
// resolve() разбирает все $ref, но не разворачивает ссылки
|
|
45
43
|
const resolvedRefs = await json_schema_ref_parser_1.default.resolve(absoluteInput);
|
|
46
|
-
// Если вам нужны сами ссылки (instances of $Refs), можно сделать так:
|
|
47
|
-
// const $refs = (await RefParser.parse(absoluteInput)).$refs;
|
|
48
|
-
// context.addRefs($refs);
|
|
49
|
-
// В вашем случае — пробрасываем то, что вернул resolve()
|
|
50
44
|
context.addRefs(resolvedRefs);
|
|
51
45
|
const raw = resolvedRefs.get(absoluteInput);
|
|
52
46
|
if (!raw || typeof raw !== 'object' || Array.isArray(raw) || !('paths' in raw)) {
|
|
@@ -57,7 +51,6 @@ async function getOpenApiSpec(context, input) {
|
|
|
57
51
|
for (const [pathKey, value] of Object.entries(mainSchema.paths)) {
|
|
58
52
|
const maybeRef = value;
|
|
59
53
|
if (maybeRef.$ref) {
|
|
60
|
-
// ваша функция replaceRef возвращает раскрученный объект
|
|
61
54
|
newPaths[pathKey] = replaceRef(context.get(maybeRef.$ref), context, (0, pathHelpers_1.dirName)(maybeRef.$ref));
|
|
62
55
|
}
|
|
63
56
|
else {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TPropertyGroupExtended } from '../types/Models';
|
|
2
|
+
import { OperationParameter } from '../types/shared/OperationParameter.model';
|
|
3
|
+
export declare function getPropertyGroupExtended(prop: OperationParameter): TPropertyGroupExtended;
|
|
4
|
+
//# sourceMappingURL=getPropertyGroupExtended.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPropertyGroupExtended.d.ts","sourceRoot":"","sources":["../../../src/core/utils/getPropertyGroupExtended.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAG9E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,sBAAsB,CAKzF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPropertyGroupExtended = getPropertyGroupExtended;
|
|
4
|
+
// Auxiliary function for defining a property group
|
|
5
|
+
function getPropertyGroupExtended(prop) {
|
|
6
|
+
if (prop.isRequired) {
|
|
7
|
+
return prop.default === undefined ? 'required' : 'required-with-default';
|
|
8
|
+
}
|
|
9
|
+
return prop.default === undefined ? 'optional' : 'optional-with-default';
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPropertyGroupSimple.d.ts","sourceRoot":"","sources":["../../../src/core/utils/getPropertyGroupSimple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGvD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,GAAG,oBAAoB,CAItE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPropertyGroupSimple = getPropertyGroupSimple;
|
|
4
|
+
// Auxiliary function for defining a property group
|
|
5
|
+
function getPropertyGroupSimple(prop) {
|
|
6
|
+
return prop.isRequired && prop.default === undefined
|
|
7
|
+
? 'requires-value'
|
|
8
|
+
: 'other';
|
|
9
|
+
}
|
|
@@ -18,7 +18,7 @@ const header = `// This is an automatically generated file for the hbs template.
|
|
|
18
18
|
// @ts-nocheck
|
|
19
19
|
export default `;
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
21
|
+
* Function for template precompilation (hbs) before further use
|
|
22
22
|
*/
|
|
23
23
|
const precompileTemplates = () => {
|
|
24
24
|
const logger = new Logger_1.Logger({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortByRequiredExtended.d.ts","sourceRoot":"","sources":["../../../src/core/utils/sortByRequiredExtended.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAG9E,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAW3F"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortByRequiredExtended = sortByRequiredExtended;
|
|
4
|
+
const Consts_1 = require("../types/Consts");
|
|
5
|
+
const getPropertyGroupExtended_1 = require("./getPropertyGroupExtended");
|
|
6
|
+
function sortByRequiredExtended(a, b) {
|
|
7
|
+
const groupA = (0, getPropertyGroupExtended_1.getPropertyGroupExtended)(a);
|
|
8
|
+
const groupB = (0, getPropertyGroupExtended_1.getPropertyGroupExtended)(b);
|
|
9
|
+
// If the groups are different, we sort them by priority.
|
|
10
|
+
if (groupA !== groupB) {
|
|
11
|
+
return Consts_1.GROUP_PRIORITY_EXTENDED[groupA] - Consts_1.GROUP_PRIORITY_EXTENDED[groupB];
|
|
12
|
+
}
|
|
13
|
+
// If the groups are the same, we sort them by name.
|
|
14
|
+
return a.name.localeCompare(b.name);
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortByRequiredSimple.d.ts","sourceRoot":"","sources":["../../../src/core/utils/sortByRequiredSimple.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAGnF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAKzF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortByRequiredSimple = sortByRequiredSimple;
|
|
4
|
+
const Consts_1 = require("../types/Consts");
|
|
5
|
+
const getPropertyGroupSimple_1 = require("./getPropertyGroupSimple");
|
|
6
|
+
function sortByRequiredSimple(a, b) {
|
|
7
|
+
const groupA = (0, getPropertyGroupSimple_1.getPropertyGroupSimple)(a);
|
|
8
|
+
const groupB = (0, getPropertyGroupSimple_1.getPropertyGroupSimple)(b);
|
|
9
|
+
return Consts_1.GROUP_PRIORITY_SIMPLE[groupA] - Consts_1.GROUP_PRIORITY_SIMPLE[groupB];
|
|
10
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-openapi-codegen",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.5",
|
|
4
4
|
"description": "Library that generates Typescript clients based on the OpenAPI specification. It bases on openapi-typescript-codegen",
|
|
5
5
|
"author": "Alexey Zverev",
|
|
6
6
|
"homepage": "https://github.com/ozonophore/openapi-codegen.git",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getUniqueAllShemasKeys.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/getUniqueAllShemasKeys.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAKtB;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,eAQ3D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guessVersion.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/guessVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEzD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,gBAgB1G"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.guessVersion = guessVersion;
|
|
4
|
-
function guessVersion(rawInput, schemas) {
|
|
5
|
-
const matchesSchemas = schemas
|
|
6
|
-
.map((vs, idx) => {
|
|
7
|
-
const { error } = vs.schema.validate(rawInput, { allowUnknown: true });
|
|
8
|
-
return error ? null : { version: vs.version, index: idx };
|
|
9
|
-
})
|
|
10
|
-
.filter(it => it !== null);
|
|
11
|
-
if (matchesSchemas.length === 0) {
|
|
12
|
-
throw new Error('Data does not conform to any known version schema');
|
|
13
|
-
}
|
|
14
|
-
const latestVersion = matchesSchemas.reduce((a, b) => (a.index > b.index ? a : b));
|
|
15
|
-
return latestVersion;
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrateToLatestVersion.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/migrateToLatestVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMhE,KAAK,oBAAoB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IACzD,cAAc,EAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;CACnF,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,oBAAoB,CAAC;CACpC,CAAA;AAED,wBAAgB,sBAAsB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,IAAI,CAgCzI"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.migrateToLatestVersion = migrateToLatestVersion;
|
|
4
|
-
const getUniqueAllShemasKeys_1 = require("./getUniqueAllShemasKeys");
|
|
5
|
-
const getUniqueObjectKeys_1 = require("./getUniqueObjectKeys");
|
|
6
|
-
const guessVersion_1 = require("./guessVersion");
|
|
7
|
-
const validateUnknownKeys_1 = require("./validateUnknownKeys");
|
|
8
|
-
function migrateToLatestVersion({ rawInput, migrationPlans, versionedSchemas }) {
|
|
9
|
-
let currentData = rawInput;
|
|
10
|
-
const schemas = versionedSchemas.map(el => el.schema);
|
|
11
|
-
const allRawInputKeys = (0, getUniqueObjectKeys_1.getUniqueObjectKeys)(rawInput);
|
|
12
|
-
const allSchemasKeys = (0, getUniqueAllShemasKeys_1.getUniqueAllShemasKeys)(schemas);
|
|
13
|
-
(0, validateUnknownKeys_1.validateUnknownKeys)(allRawInputKeys, allSchemasKeys);
|
|
14
|
-
const guessed = (0, guessVersion_1.guessVersion)(rawInput, versionedSchemas);
|
|
15
|
-
for (let idx = guessed.index; idx < versionedSchemas.length - 1; idx++) {
|
|
16
|
-
const fromVersion = versionedSchemas[idx].version;
|
|
17
|
-
const migrationPlan = migrationPlans.find(p => p.fromVersion === fromVersion);
|
|
18
|
-
if (!migrationPlan) {
|
|
19
|
-
throw new Error(`No migration plan from ${fromVersion}`);
|
|
20
|
-
}
|
|
21
|
-
const migratedRaw = migrationPlan.migrate(currentData);
|
|
22
|
-
const { error } = versionedSchemas[idx + 1].schema.validate(migratedRaw, { allowUnknown: false });
|
|
23
|
-
if (error) {
|
|
24
|
-
if (error)
|
|
25
|
-
throw new Error(`Error during post-migration validation ${fromVersion}->${migrationPlan.toVersion}: ${error.message}`);
|
|
26
|
-
}
|
|
27
|
-
currentData = { ...migratedRaw };
|
|
28
|
-
}
|
|
29
|
-
const currentSchema = versionedSchemas[versionedSchemas.length - 1];
|
|
30
|
-
const { error, value } = currentSchema.schema.validate(currentData);
|
|
31
|
-
if (error)
|
|
32
|
-
return null;
|
|
33
|
-
return { value, schemaVersion: currentSchema.version, schemaType: currentSchema.type };
|
|
34
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traverseGeneric.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/traverseGeneric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,eAAe,CAC7B,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,QA2BpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateUnknownKeys.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/validateUnknownKeys.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAyB/E"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.validateUnknownKeys = validateUnknownKeys;
|
|
7
|
-
const leven_1 = __importDefault(require("leven"));
|
|
8
|
-
function validateUnknownKeys(rawInputKeys, allowed) {
|
|
9
|
-
const errors = [];
|
|
10
|
-
for (const key of rawInputKeys) {
|
|
11
|
-
if (!allowed.has(key)) {
|
|
12
|
-
let bestMatch = null;
|
|
13
|
-
let bestDistance = Infinity;
|
|
14
|
-
for (const candidate of allowed) {
|
|
15
|
-
const d = (0, leven_1.default)(key, candidate);
|
|
16
|
-
if (d < bestDistance) {
|
|
17
|
-
bestDistance = d;
|
|
18
|
-
bestMatch = candidate;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
if (bestMatch && bestDistance <= 3) {
|
|
22
|
-
errors.push(`The "${key}" field is not recognized. Perhaps you meant "${bestMatch}".`);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
errors.push(`The "${key}" field is not recognized.`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
if (errors.length) {
|
|
30
|
-
throw new Error(errors.join('\n'));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guessVersion.test.d.ts","sourceRoot":"","sources":["../../../src/common/__tests__/guessVersion.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
-
const node_test_1 = require("node:test");
|
|
8
|
-
const OptionsVersionedSchemas_1 = require("common/VersionedSchema/OptionsVersionedSchemas");
|
|
9
|
-
const core_1 = require("../../core");
|
|
10
|
-
const guessVersion_1 = require("../VersionedSchema/Utils/guessVersion");
|
|
11
|
-
(0, node_test_1.describe)('guessVersion', () => {
|
|
12
|
-
(0, node_test_1.test)('@unit: should correctly identify version for 1.0.0 data', () => {
|
|
13
|
-
const dataV1 = { input: 'source/path', output: 'generated/path', client: core_1.HttpClient.AXIOS };
|
|
14
|
-
const result = (0, guessVersion_1.guessVersion)(dataV1, OptionsVersionedSchemas_1.optionsVersionedSchemas);
|
|
15
|
-
node_assert_1.default.deepEqual(result, { version: '1.0.0', index: 0 }, 'Should detect 1.0.0 schema');
|
|
16
|
-
});
|
|
17
|
-
(0, node_test_1.test)('@unit: should correctly identify version for 2.0.0 data', () => {
|
|
18
|
-
const dataV2 = { input: 'source/path', output: 'generated/path', httpClient: core_1.HttpClient.FETCH };
|
|
19
|
-
const result = (0, guessVersion_1.guessVersion)(dataV2, OptionsVersionedSchemas_1.optionsVersionedSchemas);
|
|
20
|
-
node_assert_1.default.deepEqual(result, { version: '2.0.0', index: 2 }, 'Should detect 2.0.0 schema');
|
|
21
|
-
});
|
|
22
|
-
(0, node_test_1.test)('@unit: should throw error for data matching no schemas', () => {
|
|
23
|
-
const invalidData = { input: 'source/path', output: 'generated/path', unknownField: 'value' };
|
|
24
|
-
node_assert_1.default.throws(() => (0, guessVersion_1.guessVersion)(invalidData, OptionsVersionedSchemas_1.optionsVersionedSchemas), /Data does not conform to any known version schema/, 'Should throw for invalid data');
|
|
25
|
-
});
|
|
26
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sortByRequired.test.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/__tests__/sortByRequired.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
-
const node_test_1 = require("node:test");
|
|
8
|
-
const sortByRequired_1 = require("../sortByRequired");
|
|
9
|
-
(0, node_test_1.describe)('sortByRequired', () => {
|
|
10
|
-
(0, node_test_1.test)('@unit: should sort params', () => {
|
|
11
|
-
const paramOptional = {
|
|
12
|
-
in: 'query',
|
|
13
|
-
prop: 'parameterOptionalStringWithNoDefault',
|
|
14
|
-
export: 'generic',
|
|
15
|
-
name: 'parameterOptionalStringWithNoDefault',
|
|
16
|
-
alias: '',
|
|
17
|
-
path: '',
|
|
18
|
-
type: 'string',
|
|
19
|
-
base: 'string',
|
|
20
|
-
template: null,
|
|
21
|
-
link: null,
|
|
22
|
-
description: '3. This is a optional string with no default',
|
|
23
|
-
isDefinition: false,
|
|
24
|
-
isReadOnly: false,
|
|
25
|
-
isRequired: false,
|
|
26
|
-
isNullable: false,
|
|
27
|
-
imports: [],
|
|
28
|
-
enum: [],
|
|
29
|
-
enums: [],
|
|
30
|
-
properties: [],
|
|
31
|
-
mediaType: null,
|
|
32
|
-
};
|
|
33
|
-
const paramOptionalWithDefault = {
|
|
34
|
-
in: 'query',
|
|
35
|
-
prop: 'parameterOptionalStringWithNoDefault',
|
|
36
|
-
export: 'generic',
|
|
37
|
-
name: 'parameterOptionalStringWithNoDefault',
|
|
38
|
-
alias: '',
|
|
39
|
-
path: '',
|
|
40
|
-
type: 'string',
|
|
41
|
-
base: 'string',
|
|
42
|
-
template: null,
|
|
43
|
-
link: null,
|
|
44
|
-
description: '3. This is a optional string with no default',
|
|
45
|
-
isDefinition: false,
|
|
46
|
-
isReadOnly: false,
|
|
47
|
-
isRequired: false,
|
|
48
|
-
isNullable: false,
|
|
49
|
-
imports: [],
|
|
50
|
-
enum: [],
|
|
51
|
-
enums: [],
|
|
52
|
-
properties: [],
|
|
53
|
-
mediaType: null,
|
|
54
|
-
default: 'Hello World!',
|
|
55
|
-
};
|
|
56
|
-
const paramRequiredWithDefault = {
|
|
57
|
-
in: 'query',
|
|
58
|
-
prop: 'parameterStringWithDefault',
|
|
59
|
-
export: 'generic',
|
|
60
|
-
name: 'parameterStringWithDefault',
|
|
61
|
-
alias: '',
|
|
62
|
-
path: '',
|
|
63
|
-
type: 'string',
|
|
64
|
-
base: 'string',
|
|
65
|
-
template: null,
|
|
66
|
-
link: null,
|
|
67
|
-
description: '2. This is a string with default',
|
|
68
|
-
isDefinition: false,
|
|
69
|
-
isReadOnly: false,
|
|
70
|
-
isRequired: true,
|
|
71
|
-
isNullable: false,
|
|
72
|
-
imports: [],
|
|
73
|
-
enum: [],
|
|
74
|
-
enums: [],
|
|
75
|
-
properties: [],
|
|
76
|
-
mediaType: null,
|
|
77
|
-
default: 'Hello World!',
|
|
78
|
-
};
|
|
79
|
-
const paramRequiredWithoutDefault = {
|
|
80
|
-
in: 'query',
|
|
81
|
-
prop: 'parameterStringWithoutDefault',
|
|
82
|
-
export: 'generic',
|
|
83
|
-
name: 'parameterStringWithoutDefault',
|
|
84
|
-
alias: '',
|
|
85
|
-
path: '',
|
|
86
|
-
type: 'string',
|
|
87
|
-
base: 'string',
|
|
88
|
-
template: null,
|
|
89
|
-
link: null,
|
|
90
|
-
description: '1. This is a string without default',
|
|
91
|
-
isDefinition: false,
|
|
92
|
-
isReadOnly: false,
|
|
93
|
-
isRequired: true,
|
|
94
|
-
isNullable: false,
|
|
95
|
-
imports: [],
|
|
96
|
-
enum: [],
|
|
97
|
-
enums: [],
|
|
98
|
-
properties: [],
|
|
99
|
-
mediaType: null,
|
|
100
|
-
};
|
|
101
|
-
node_assert_1.default.deepStrictEqual([paramOptionalWithDefault, paramOptional, paramRequiredWithDefault, paramRequiredWithoutDefault].sort(sortByRequired_1.sortByRequired), [
|
|
102
|
-
paramRequiredWithoutDefault,
|
|
103
|
-
paramRequiredWithDefault,
|
|
104
|
-
paramOptionalWithDefault,
|
|
105
|
-
paramOptional,
|
|
106
|
-
]);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sortByRequired.d.ts","sourceRoot":"","sources":["../../../src/core/utils/sortByRequired.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAEnF,wBAAgB,cAAc,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAcnF"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sortByRequired = sortByRequired;
|
|
4
|
-
function sortByRequired(a, b) {
|
|
5
|
-
if (!a.isRequired && b.isRequired) {
|
|
6
|
-
return 1;
|
|
7
|
-
}
|
|
8
|
-
if (a.isRequired && !b.isRequired) {
|
|
9
|
-
return -1;
|
|
10
|
-
}
|
|
11
|
-
if ((a.isRequired && a.default === undefined && b.default !== undefined) || (a.isRequired && a.default !== undefined && b.default === undefined)) {
|
|
12
|
-
return -1;
|
|
13
|
-
}
|
|
14
|
-
if ((a.isRequired && a.default !== undefined && b.default === undefined) || (!a.isRequired && a.default === undefined && b.default !== undefined)) {
|
|
15
|
-
return 1;
|
|
16
|
-
}
|
|
17
|
-
return 0;
|
|
18
|
-
}
|