ts-openapi-codegen 1.0.0-beta.2 → 1.0.0-beta.4

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 (103) hide show
  1. package/dist/cli/generate/runGenerateOpenApi.d.ts.map +1 -1
  2. package/dist/cli/generate/runGenerateOpenApi.js +48 -32
  3. package/dist/cli/index.js +5 -1
  4. package/dist/cli/utils.d.ts +0 -1
  5. package/dist/cli/utils.d.ts.map +1 -1
  6. package/dist/cli/utils.js +0 -56
  7. package/dist/common/Enums.d.ts +10 -0
  8. package/dist/common/Enums.d.ts.map +1 -0
  9. package/dist/common/Enums.js +14 -0
  10. package/dist/common/Logger.d.ts +33 -0
  11. package/dist/common/Logger.d.ts.map +1 -0
  12. package/dist/common/Logger.js +117 -0
  13. package/dist/common/Options.d.ts +4 -4
  14. package/dist/common/Options.d.ts.map +1 -1
  15. package/dist/common/Utils.d.ts +2 -1
  16. package/dist/common/Utils.d.ts.map +1 -1
  17. package/dist/common/Utils.js +54 -0
  18. package/dist/common/VersionedSchema/MultiOptionsMigrationPlan.d.ts.map +1 -1
  19. package/dist/common/VersionedSchema/MultiOptionsMigrationPlan.js +1 -3
  20. package/dist/common/VersionedSchema/Types.d.ts +1 -1
  21. package/dist/common/VersionedSchema/Types.d.ts.map +1 -1
  22. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts +9 -0
  23. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -0
  24. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.js +44 -0
  25. package/dist/common/VersionedSchema/Utils/generateKeyMappingForInvalidKeys.d.ts +2 -0
  26. package/dist/common/VersionedSchema/Utils/generateKeyMappingForInvalidKeys.d.ts.map +1 -0
  27. package/dist/common/VersionedSchema/Utils/generateKeyMappingForInvalidKeys.js +27 -0
  28. package/dist/common/VersionedSchema/Utils/getErrorFieldsFromValidation.d.ts +6 -0
  29. package/dist/common/VersionedSchema/Utils/getErrorFieldsFromValidation.d.ts.map +1 -0
  30. package/dist/common/VersionedSchema/Utils/getErrorFieldsFromValidation.js +7 -0
  31. package/dist/common/VersionedSchema/Utils/getUniqueKeysFromSchemas.d.ts +8 -0
  32. package/dist/common/VersionedSchema/Utils/getUniqueKeysFromSchemas.d.ts.map +1 -0
  33. package/dist/common/VersionedSchema/Utils/getUniqueKeysFromSchemas.js +17 -0
  34. package/dist/common/VersionedSchema/Utils/getUniqueObjectKeys.js +2 -2
  35. package/dist/common/VersionedSchema/Utils/joiHandlers.d.ts +3 -3
  36. package/dist/common/VersionedSchema/Utils/joiHandlers.d.ts.map +1 -1
  37. package/dist/common/VersionedSchema/Utils/joiHandlers.js +24 -17
  38. package/dist/common/VersionedSchema/Utils/{migrateToLatestVersion.d.ts → migrateDataToLatestSchemaVersion.d.ts} +5 -5
  39. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -0
  40. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +43 -0
  41. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts +2 -0
  42. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts.map +1 -0
  43. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.js +18 -0
  44. package/dist/common/VersionedSchema/Utils/traverseObjectStructure.d.ts +3 -0
  45. package/dist/common/VersionedSchema/Utils/traverseObjectStructure.d.ts.map +1 -0
  46. package/dist/common/VersionedSchema/Utils/{traverseGeneric.js → traverseObjectStructure.js} +6 -4
  47. package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts +8 -0
  48. package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts.map +1 -0
  49. package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.js +44 -0
  50. package/dist/common/__tests__/__mock__/mockJoiSchema.d.ts +19 -0
  51. package/dist/common/__tests__/__mock__/mockJoiSchema.d.ts.map +1 -0
  52. package/dist/common/__tests__/__mock__/mockJoiSchema.js +14 -0
  53. package/dist/common/__tests__/convertArrayToObject.test.d.ts +2 -0
  54. package/dist/common/__tests__/convertArrayToObject.test.d.ts.map +1 -0
  55. package/dist/common/__tests__/convertArrayToObject.test.js +227 -0
  56. package/dist/common/__tests__/determineBestMatchingSchemaVersion.test.d.ts +2 -0
  57. package/dist/common/__tests__/determineBestMatchingSchemaVersion.test.d.ts.map +1 -0
  58. package/dist/common/__tests__/determineBestMatchingSchemaVersion.test.js +38 -0
  59. package/dist/common/__tests__/generateKeyMappingForInvalidKeys.test.d.ts +2 -0
  60. package/dist/common/__tests__/generateKeyMappingForInvalidKeys.test.d.ts.map +1 -0
  61. package/dist/common/__tests__/generateKeyMappingForInvalidKeys.test.js +22 -0
  62. package/dist/common/__tests__/getUniqueKeysFromSchemas.test.d.ts +2 -0
  63. package/dist/common/__tests__/getUniqueKeysFromSchemas.test.d.ts.map +1 -0
  64. package/dist/common/__tests__/getUniqueKeysFromSchemas.test.js +20 -0
  65. package/dist/common/__tests__/getUniqueObjectKeys.test.d.ts +2 -0
  66. package/dist/common/__tests__/getUniqueObjectKeys.test.d.ts.map +1 -0
  67. package/dist/common/__tests__/getUniqueObjectKeys.test.js +24 -0
  68. package/dist/common/__tests__/migrationForMultiOptions.test.js +84 -63
  69. package/dist/common/__tests__/migrationForOptions.test.js +27 -46
  70. package/dist/common/__tests__/replaceInvalidKeysWithMappedNames.test.d.ts +2 -0
  71. package/dist/common/__tests__/replaceInvalidKeysWithMappedNames.test.d.ts.map +1 -0
  72. package/dist/common/__tests__/replaceInvalidKeysWithMappedNames.test.js +25 -0
  73. package/dist/common/__tests__/validateAndSuggestKeyCorrections.test.d.ts +2 -0
  74. package/dist/common/__tests__/validateAndSuggestKeyCorrections.test.d.ts.map +1 -0
  75. package/dist/common/__tests__/validateAndSuggestKeyCorrections.test.js +25 -0
  76. package/dist/common/defaultOptions.d.ts.map +1 -1
  77. package/dist/common/defaultOptions.js +22 -2
  78. package/dist/core/index.d.ts +2 -2
  79. package/dist/core/index.d.ts.map +1 -1
  80. package/dist/core/index.js +41 -19
  81. package/dist/core/utils/precompileTemplates.js +9 -2
  82. package/dist/core/utils/prepareOptions.d.ts +2 -2
  83. package/dist/core/utils/prepareOptions.d.ts.map +1 -1
  84. package/dist/core/utils/writeClient.d.ts +4 -0
  85. package/dist/core/utils/writeClient.d.ts.map +1 -1
  86. package/dist/core/utils/writeClient.js +13 -0
  87. package/package.json +5 -2
  88. package/dist/common/VersionedSchema/Utils/getUniqueAllShemasKeys.d.ts +0 -8
  89. package/dist/common/VersionedSchema/Utils/getUniqueAllShemasKeys.d.ts.map +0 -1
  90. package/dist/common/VersionedSchema/Utils/getUniqueAllShemasKeys.js +0 -15
  91. package/dist/common/VersionedSchema/Utils/guessVersion.d.ts +0 -3
  92. package/dist/common/VersionedSchema/Utils/guessVersion.d.ts.map +0 -1
  93. package/dist/common/VersionedSchema/Utils/guessVersion.js +0 -16
  94. package/dist/common/VersionedSchema/Utils/migrateToLatestVersion.d.ts.map +0 -1
  95. package/dist/common/VersionedSchema/Utils/migrateToLatestVersion.js +0 -33
  96. package/dist/common/VersionedSchema/Utils/traverseGeneric.d.ts +0 -3
  97. package/dist/common/VersionedSchema/Utils/traverseGeneric.d.ts.map +0 -1
  98. package/dist/common/VersionedSchema/Utils/validateUnknownKeys.d.ts +0 -2
  99. package/dist/common/VersionedSchema/Utils/validateUnknownKeys.d.ts.map +0 -1
  100. package/dist/common/VersionedSchema/Utils/validateUnknownKeys.js +0 -32
  101. package/dist/common/__tests__/guessVersion.test.d.ts +0 -2
  102. package/dist/common/__tests__/guessVersion.test.d.ts.map +0 -1
  103. package/dist/common/__tests__/guessVersion.test.js +0 -26
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getErrorFieldsFromValidation = getErrorFieldsFromValidation;
4
+ // Auxiliary function for getting error fields from the Joi validation result
5
+ function getErrorFieldsFromValidation(error) {
6
+ return error?.details.map(detail => ({ path: Array.isArray(detail.path) ? detail.path.join('.') : detail.path, type: detail.type })) ?? [];
7
+ }
@@ -0,0 +1,8 @@
1
+ import Joi from 'joi';
2
+ /**
3
+ * Get all the unique parameter keys of all Joi schemes in the array
4
+ * @param schemas array of joi schemes
5
+ * @returns All the unique parameter keys of all Joi schemes in the array
6
+ */
7
+ export declare function getUniqueKeysFromSchemas(schemas: Joi.Schema[]): Set<string>;
8
+ //# sourceMappingURL=getUniqueKeysFromSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUniqueKeysFromSchemas.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/getUniqueKeysFromSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAKtB;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,eAQ7D"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUniqueKeysFromSchemas = getUniqueKeysFromSchemas;
4
+ const joiHandlers_1 = require("./joiHandlers");
5
+ const traverseObjectStructure_1 = require("./traverseObjectStructure");
6
+ /**
7
+ * Get all the unique parameter keys of all Joi schemes in the array
8
+ * @param schemas array of joi schemes
9
+ * @returns All the unique parameter keys of all Joi schemes in the array
10
+ */
11
+ function getUniqueKeysFromSchemas(schemas) {
12
+ const result = new Set();
13
+ for (const schema of schemas) {
14
+ (0, traverseObjectStructure_1.traverseObjectStructure)(schema, [joiHandlers_1.handleJoiSchema, joiHandlers_1.handleJoiDescription], result);
15
+ }
16
+ return result;
17
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getUniqueObjectKeys = getUniqueObjectKeys;
4
- const traverseGeneric_1 = require("./traverseGeneric");
4
+ const traverseObjectStructure_1 = require("./traverseObjectStructure");
5
5
  /**
6
6
  * Get unique keys from object properties (set of options)
7
7
  * @param rawInput object properties (set of options)
@@ -9,6 +9,6 @@ const traverseGeneric_1 = require("./traverseGeneric");
9
9
  */
10
10
  function getUniqueObjectKeys(rawInput) {
11
11
  const result = new Set();
12
- (0, traverseGeneric_1.traverseGeneric)(rawInput, [], result);
12
+ (0, traverseObjectStructure_1.traverseObjectStructure)(rawInput, [], result);
13
13
  return Array.from(result);
14
14
  }
@@ -1,6 +1,6 @@
1
- import { TraverseHandler } from "../Types";
1
+ import { TraverseHandler } from '../Types';
2
2
  /** Handler for Joi.Schema: only the launch remains .describe() */
3
- export declare const joiSchemaHandler: TraverseHandler;
3
+ export declare const handleJoiSchema: TraverseHandler<Set<string>>;
4
4
  /** Handler for the result of describe(): pulls out only the real keys of the field */
5
- export declare const joiDescHandler: TraverseHandler;
5
+ export declare const handleJoiDescription: TraverseHandler<Set<string>>;
6
6
  //# sourceMappingURL=joiHandlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"joiHandlers.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/joiHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,kEAAkE;AAClE,eAAO,MAAM,gBAAgB,EAAE,eAM9B,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,cAAc,EAAE,eAsC5B,CAAC"}
1
+ {"version":3,"file":"joiHandlers.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/joiHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,kEAAkE;AAClE,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAOxD,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAgD7D,CAAC"}
@@ -1,52 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.joiDescHandler = exports.joiSchemaHandler = void 0;
3
+ exports.handleJoiDescription = exports.handleJoiSchema = void 0;
4
4
  /** Handler for Joi.Schema: only the launch remains .describe() */
5
- const joiSchemaHandler = (value, recurse) => {
5
+ const handleJoiSchema = (value, recurse) => {
6
6
  if (value && typeof value.describe === 'function') {
7
7
  recurse(value.describe());
8
- return true; // then the default bypass to the scheme itself is not needed.
8
+ // then the default bypass to the scheme itself is not needed.
9
+ return true;
9
10
  }
10
11
  return false;
11
12
  };
12
- exports.joiSchemaHandler = joiSchemaHandler;
13
+ exports.handleJoiSchema = handleJoiSchema;
13
14
  /** Handler for the result of describe(): pulls out only the real keys of the field */
14
- const joiDescHandler = (value, recurse, result) => {
15
+ const handleJoiDescription = (value, recurse, result) => {
15
16
  if (!value || typeof value !== 'object') {
16
17
  return false;
17
18
  }
18
- let did = false;
19
+ let processed = false;
19
20
  // only if there are keys/items/matches/patterns, we assume that this description
20
21
  if (value.keys && typeof value.keys === 'object') {
21
- did = true;
22
+ processed = true;
22
23
  for (const key of Object.keys(value.keys)) {
23
24
  result.add(key);
24
25
  recurse(value.keys[key]);
25
26
  }
26
27
  }
27
28
  if (Array.isArray(value.items)) {
28
- did = true;
29
- for (const item of value.items)
29
+ processed = true;
30
+ for (const item of value.items) {
30
31
  recurse(item);
32
+ }
31
33
  }
32
34
  if (Array.isArray(value.matches)) {
33
- did = true;
35
+ processed = true;
34
36
  for (const m of value.matches) {
35
- if (m.schema)
37
+ if (m.schema) {
36
38
  recurse(m.schema);
37
- if (m.then)
39
+ }
40
+ if (m.then) {
38
41
  recurse(m.then);
39
- if (m.otherwise)
42
+ }
43
+ if (m.otherwise) {
40
44
  recurse(m.otherwise);
45
+ }
41
46
  }
42
47
  }
43
48
  if (Array.isArray(value.patterns)) {
44
- did = true;
49
+ processed = true;
45
50
  for (const p of value.patterns) {
46
- if (p.rule)
51
+ if (p.rule) {
47
52
  recurse(p.rule);
53
+ }
48
54
  }
49
55
  }
50
- return did; // if this is the description, the default bypass is not needed.
56
+ // if this is the description, the default bypass is not needed.
57
+ return processed;
51
58
  };
52
- exports.joiDescHandler = joiDescHandler;
59
+ exports.handleJoiDescription = handleJoiDescription;
@@ -1,15 +1,15 @@
1
- import { EVersionedSchemaType } from "../Enums";
2
- import { SchemaMigrationPlan, VersionedSchema } from "../Types";
1
+ import { EVersionedSchemaType } from '../Enums';
2
+ import { SchemaMigrationPlan, VersionedSchema } from '../Types';
3
3
  type MigrateToLatestProps = {
4
4
  rawInput: Record<string, any>;
5
- versionedSchemas: VersionedSchema<Record<string, any>>[];
6
5
  migrationPlans: SchemaMigrationPlan<Record<string, any>, Record<string, any>>[];
6
+ versionedSchemas: VersionedSchema<Record<string, any>>[];
7
7
  };
8
8
  type MigrateToLatestResult = {
9
9
  value: Record<string, any>;
10
10
  schemaVersion: string;
11
11
  schemaType: EVersionedSchemaType;
12
12
  };
13
- export declare function migrateToLatestVersion({ rawInput, migrationPlans, versionedSchemas }: MigrateToLatestProps): MigrateToLatestResult | null;
13
+ export declare function migrateDataToLatestSchemaVersion({ rawInput, migrationPlans, versionedSchemas }: MigrateToLatestProps): MigrateToLatestResult | null;
14
14
  export {};
15
- //# sourceMappingURL=migrateToLatestVersion.d.ts.map
15
+ //# sourceMappingURL=migrateDataToLatestSchemaVersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateDataToLatestSchemaVersion.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAQhE,KAAK,oBAAoB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,cAAc,EAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAChF,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;CAC5D,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,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,IAAI,CAwCnJ"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.migrateDataToLatestSchemaVersion = migrateDataToLatestSchemaVersion;
4
+ const determineBestMatchingSchemaVersion_1 = require("./determineBestMatchingSchemaVersion");
5
+ const generateKeyMappingForInvalidKeys_1 = require("./generateKeyMappingForInvalidKeys");
6
+ const getUniqueKeysFromSchemas_1 = require("./getUniqueKeysFromSchemas");
7
+ const getUniqueObjectKeys_1 = require("./getUniqueObjectKeys");
8
+ const replaceInvalidKeysWithMappedNames_1 = require("./replaceInvalidKeysWithMappedNames");
9
+ const validateAndSuggestKeyCorrections_1 = require("./validateAndSuggestKeyCorrections");
10
+ function migrateDataToLatestSchemaVersion({ rawInput, migrationPlans, versionedSchemas }) {
11
+ const schemas = versionedSchemas.map(el => el.schema);
12
+ const allUniqueKeysFromSchemas = (0, getUniqueKeysFromSchemas_1.getUniqueKeysFromSchemas)(schemas);
13
+ const allUniqueKeysFromRawInput = (0, getUniqueObjectKeys_1.getUniqueObjectKeys)(rawInput);
14
+ (0, validateAndSuggestKeyCorrections_1.validateAndSuggestKeyCorrections)(allUniqueKeysFromRawInput, allUniqueKeysFromSchemas);
15
+ const guessedVersion = (0, determineBestMatchingSchemaVersion_1.determineBestMatchingSchemaVersion)(rawInput, versionedSchemas);
16
+ const guessedValidationSchema = schemas[guessedVersion.lastVersionIndex];
17
+ const schemaPossibleKeys = (0, getUniqueKeysFromSchemas_1.getUniqueKeysFromSchemas)([guessedValidationSchema]);
18
+ const replacingKeysMap = (0, generateKeyMappingForInvalidKeys_1.generateKeyMappingForInvalidKeys)(allUniqueKeysFromRawInput, schemaPossibleKeys);
19
+ let currentData = replacingKeysMap.size ? (0, replaceInvalidKeysWithMappedNames_1.replaceInvalidKeysWithMappedNames)(rawInput, replacingKeysMap) : rawInput;
20
+ for (let idx = guessedVersion.lastVersionIndex; idx < versionedSchemas.length - 1; idx++) {
21
+ const fromVersion = versionedSchemas[idx].version;
22
+ const migrationPlan = migrationPlans.find(p => p.fromVersion === fromVersion);
23
+ if (!migrationPlan) {
24
+ throw new Error(`No migration plan from ${fromVersion}`);
25
+ }
26
+ try {
27
+ const migratedRaw = migrationPlan.migrate(currentData);
28
+ const { error } = versionedSchemas[idx + 1].schema.validate(migratedRaw, { allowUnknown: false });
29
+ if (error) {
30
+ throw new Error(`Error during post-migration validation ${fromVersion}->${migrationPlan.toVersion}: ${error.message}`);
31
+ }
32
+ currentData = { ...migratedRaw };
33
+ }
34
+ catch (e) {
35
+ throw new Error(e.message);
36
+ }
37
+ }
38
+ const currentSchema = versionedSchemas[versionedSchemas.length - 1];
39
+ const { error, value } = currentSchema.schema.validate(currentData, { allowUnknown: false });
40
+ if (error)
41
+ return null;
42
+ return { value, schemaVersion: currentSchema.version, schemaType: currentSchema.type };
43
+ }
@@ -0,0 +1,2 @@
1
+ export declare function replaceInvalidKeysWithMappedNames(input: Record<string, any> | Record<string, any>[], keyMap: Map<string, string>): Record<string, any> | Record<string, any>[];
2
+ //# sourceMappingURL=replaceInvalidKeysWithMappedNames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replaceInvalidKeysWithMappedNames.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.ts"],"names":[],"mappings":"AAEA,wBAAgB,iCAAiC,CAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAClD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAe7C"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.replaceInvalidKeysWithMappedNames = replaceInvalidKeysWithMappedNames;
4
+ // Replacing incorrect keys
5
+ function replaceInvalidKeysWithMappedNames(input, keyMap) {
6
+ if (!input) {
7
+ throw new Error("The input data cannot be null or undefined.");
8
+ }
9
+ if (Array.isArray(input)) {
10
+ return input.map(item => replaceInvalidKeysWithMappedNames(item, keyMap));
11
+ }
12
+ const replacedKeys = Object.entries(input).map(([key, value]) => {
13
+ const newKey = keyMap.get(key) ?? key;
14
+ const newValue = Array.isArray(value) ? replaceInvalidKeysWithMappedNames(value, keyMap) : value;
15
+ return [newKey, newValue];
16
+ });
17
+ return Object.fromEntries(replacedKeys);
18
+ }
@@ -0,0 +1,3 @@
1
+ import { TraverseHandler } from "../Types";
2
+ export declare function traverseObjectStructure<T>(root: any, handlers: TraverseHandler<T>[], result: T): void;
3
+ //# sourceMappingURL=traverseObjectStructure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traverseObjectStructure.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/traverseObjectStructure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,uBAAuB,CAAC,CAAC,EACvC,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,EAC9B,MAAM,EAAE,CAAC,QA6BV"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.traverseGeneric = traverseGeneric;
4
- function traverseGeneric(root, handlers, result) {
5
- const recurse = (v) => traverseGeneric(v, handlers, result);
3
+ exports.traverseObjectStructure = traverseObjectStructure;
4
+ function traverseObjectStructure(root, handlers, result) {
5
+ const recurse = (v) => traverseObjectStructure(v, handlers, result);
6
6
  // We try "special" handlers
7
7
  let handled = false;
8
8
  for (const handler of handlers) {
@@ -21,7 +21,9 @@ function traverseGeneric(root, handlers, result) {
21
21
  }
22
22
  else {
23
23
  for (const key of Object.keys(root)) {
24
- result.add(key);
24
+ if (result instanceof Set) {
25
+ result.add(key);
26
+ }
25
27
  recurse(root[key]);
26
28
  }
27
29
  }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Optimized unknown key verification function using Levenshtein distance map.
3
+ *
4
+ * @param rawInputKeys Array of raw input keys
5
+ * @param allowedKeys Set of allowed (required) keys
6
+ */
7
+ export declare function validateAndSuggestKeyCorrections(rawInputKeys: string[], allowedKeys: Set<string>): void;
8
+ //# sourceMappingURL=validateAndSuggestKeyCorrections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateAndSuggestKeyCorrections.d.ts","sourceRoot":"","sources":["../../../../src/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,QAiChG"}
@@ -0,0 +1,44 @@
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.validateAndSuggestKeyCorrections = validateAndSuggestKeyCorrections;
7
+ const leven_1 = __importDefault(require("leven"));
8
+ /**
9
+ * Optimized unknown key verification function using Levenshtein distance map.
10
+ *
11
+ * @param rawInputKeys Array of raw input keys
12
+ * @param allowedKeys Set of allowed (required) keys
13
+ */
14
+ function validateAndSuggestKeyCorrections(rawInputKeys, allowedKeys) {
15
+ const errors = [];
16
+ const distanceMap = new Map();
17
+ // Creating a distance map once for all keys
18
+ for (const key of rawInputKeys) {
19
+ if (!allowedKeys.has(key)) {
20
+ let bestMatch = null;
21
+ let bestDistance = Infinity;
22
+ for (const candidate of allowedKeys) {
23
+ const d = (0, leven_1.default)(key, candidate);
24
+ if (d < bestDistance) {
25
+ bestDistance = d;
26
+ bestMatch = candidate;
27
+ }
28
+ }
29
+ distanceMap.set(key, { bestMatch, bestDistance });
30
+ }
31
+ }
32
+ // Generating error messages
33
+ for (const [key, { bestMatch, bestDistance }] of distanceMap) {
34
+ if (bestMatch && bestDistance <= 3) {
35
+ errors.push(`The "${key}" field is not recognized. Perhaps you meant "${bestMatch}".`);
36
+ }
37
+ else {
38
+ errors.push(`The "${key}" field is not recognized.`);
39
+ }
40
+ }
41
+ if (errors.length) {
42
+ throw new Error(errors.join('\n'));
43
+ }
44
+ }
@@ -0,0 +1,19 @@
1
+ export declare const mockJoiSchema: (keys: string[], isValid: boolean, errors?: {
2
+ path: string;
3
+ type: string;
4
+ }[], isArray?: boolean) => {
5
+ validate: (input: any, options: any) => {
6
+ error: {
7
+ details: {
8
+ path: string;
9
+ type: string;
10
+ }[];
11
+ } | null;
12
+ value: any;
13
+ };
14
+ describe: () => {
15
+ keys: {} | undefined;
16
+ items: {}[] | undefined;
17
+ };
18
+ };
19
+ //# sourceMappingURL=mockJoiSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockJoiSchema.d.ts","sourceRoot":"","sources":["../../../../src/common/__tests__/__mock__/mockJoiSchema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,EAAE,SAAS,OAAO,EAAE,SAAQ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAO,EAAE,iBAAe;sBACxG,GAAG,WAAW,GAAG;;;sBADyC,MAAM;sBAAQ,MAAM;;;;;;;;;CASlG,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mockJoiSchema = void 0;
4
+ const mockJoiSchema = (keys, isValid, errors = [], isArray = false) => ({
5
+ validate: (input, options) => ({
6
+ error: isValid ? null : { details: errors },
7
+ value: input,
8
+ }),
9
+ describe: () => ({
10
+ keys: isArray ? undefined : keys.reduce((acc, key) => ({ ...acc, [key]: {} }), {}),
11
+ items: isArray ? [{}] : undefined,
12
+ }),
13
+ });
14
+ exports.mockJoiSchema = mockJoiSchema;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=convertArrayToObject.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertArrayToObject.test.d.ts","sourceRoot":"","sources":["../../../src/common/__tests__/convertArrayToObject.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,227 @@
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 Utils_1 = require("common/Utils");
9
+ (0, node_test_1.describe)('convertArrayToObject', () => {
10
+ (0, node_test_1.test)('@unit: Empty array', () => {
11
+ const input = [];
12
+ const result = (0, Utils_1.convertArrayToObject)(input);
13
+ const expected = {
14
+ items: [],
15
+ exportCore: undefined,
16
+ exportServices: undefined,
17
+ exportModels: undefined,
18
+ exportSchemas: undefined,
19
+ request: undefined,
20
+ useOptions: undefined,
21
+ useCancelableRequest: undefined,
22
+ };
23
+ node_assert_1.default.deepStrictEqual(result, expected);
24
+ });
25
+ (0, node_test_1.test)('@unit: An array with one element', () => {
26
+ const input = [
27
+ {
28
+ input: 'url1',
29
+ output: 'res1',
30
+ exportCore: true,
31
+ request: 'req1',
32
+ useOptions: true,
33
+ },
34
+ ];
35
+ const expected = {
36
+ httpClient: undefined,
37
+ useOptions: true,
38
+ useUnionTypes: undefined,
39
+ exportCore: true,
40
+ exportServices: undefined,
41
+ exportModels: undefined,
42
+ exportSchemas: undefined,
43
+ clean: undefined,
44
+ request: 'req1',
45
+ interfacePrefix: undefined,
46
+ enumPrefix: undefined,
47
+ typePrefix: undefined,
48
+ useCancelableRequest: undefined,
49
+ items: [
50
+ {
51
+ input: 'url1',
52
+ output: 'res1',
53
+ outputCore: undefined,
54
+ outputServices: undefined,
55
+ outputModels: undefined,
56
+ outputSchemas: undefined,
57
+ },
58
+ ],
59
+ };
60
+ const result = (0, Utils_1.convertArrayToObject)(input);
61
+ node_assert_1.default.deepStrictEqual(result, expected);
62
+ });
63
+ (0, node_test_1.test)('@unit: Multiple elements with the same outer margins', () => {
64
+ const input = [
65
+ { input: 'url1', output: 'res1', exportCore: true, request: 'req1', useOptions: true },
66
+ { input: 'url2', output: 'res2', exportCore: true, request: 'req1', useOptions: true },
67
+ ];
68
+ const expected = {
69
+ httpClient: undefined,
70
+ useOptions: true,
71
+ useUnionTypes: undefined,
72
+ exportCore: true,
73
+ exportServices: undefined,
74
+ exportModels: undefined,
75
+ exportSchemas: undefined,
76
+ clean: undefined,
77
+ request: 'req1',
78
+ interfacePrefix: undefined,
79
+ enumPrefix: undefined,
80
+ typePrefix: undefined,
81
+ useCancelableRequest: undefined,
82
+ items: [
83
+ {
84
+ input: 'url1',
85
+ output: 'res1',
86
+ outputCore: undefined,
87
+ outputServices: undefined,
88
+ outputModels: undefined,
89
+ outputSchemas: undefined,
90
+ },
91
+ {
92
+ input: 'url2',
93
+ output: 'res2',
94
+ outputCore: undefined,
95
+ outputServices: undefined,
96
+ outputModels: undefined,
97
+ outputSchemas: undefined,
98
+ },
99
+ ],
100
+ };
101
+ const result = (0, Utils_1.convertArrayToObject)(input);
102
+ node_assert_1.default.deepStrictEqual(result, expected);
103
+ });
104
+ (0, node_test_1.test)('@unit: Multiple elements with different external margins', () => {
105
+ const input = [
106
+ { input: 'url1', output: 'res1', exportCore: true, request: 'req1', useOptions: true },
107
+ { input: 'url2', output: 'res2', exportCore: false, request: 'req2', useOptions: false },
108
+ ];
109
+ const expected = {
110
+ httpClient: undefined,
111
+ useOptions: true,
112
+ useUnionTypes: undefined,
113
+ exportCore: true,
114
+ exportServices: undefined,
115
+ exportModels: undefined,
116
+ exportSchemas: undefined,
117
+ clean: undefined,
118
+ request: 'req1',
119
+ interfacePrefix: undefined,
120
+ enumPrefix: undefined,
121
+ typePrefix: undefined,
122
+ useCancelableRequest: undefined,
123
+ items: [
124
+ {
125
+ input: 'url1',
126
+ output: 'res1',
127
+ outputCore: undefined,
128
+ outputServices: undefined,
129
+ outputModels: undefined,
130
+ outputSchemas: undefined,
131
+ },
132
+ {
133
+ input: 'url2',
134
+ output: 'res2',
135
+ outputCore: undefined,
136
+ outputServices: undefined,
137
+ outputModels: undefined,
138
+ outputSchemas: undefined,
139
+ },
140
+ ],
141
+ };
142
+ const result = (0, Utils_1.convertArrayToObject)(input);
143
+ node_assert_1.default.deepStrictEqual(result, expected);
144
+ });
145
+ (0, node_test_1.test)('@unit: No optional fields', () => {
146
+ const input = [
147
+ { input: 'url1', output: 'res1' },
148
+ { input: 'url2', output: 'res2' },
149
+ ];
150
+ const expected = {
151
+ httpClient: undefined,
152
+ useOptions: undefined,
153
+ useUnionTypes: undefined,
154
+ exportCore: undefined,
155
+ exportServices: undefined,
156
+ exportModels: undefined,
157
+ exportSchemas: undefined,
158
+ clean: undefined,
159
+ request: undefined,
160
+ interfacePrefix: undefined,
161
+ enumPrefix: undefined,
162
+ typePrefix: undefined,
163
+ useCancelableRequest: undefined,
164
+ items: [
165
+ {
166
+ input: 'url1',
167
+ output: 'res1',
168
+ outputCore: undefined,
169
+ outputServices: undefined,
170
+ outputModels: undefined,
171
+ outputSchemas: undefined,
172
+ },
173
+ {
174
+ input: 'url2',
175
+ output: 'res2',
176
+ outputCore: undefined,
177
+ outputServices: undefined,
178
+ outputModels: undefined,
179
+ outputSchemas: undefined,
180
+ },
181
+ ],
182
+ };
183
+ const result = (0, Utils_1.convertArrayToObject)(input);
184
+ node_assert_1.default.deepStrictEqual(result, expected);
185
+ });
186
+ (0, node_test_1.test)('@unit: Mixed presence of optional fields', () => {
187
+ const input = [
188
+ { input: 'url1', output: 'res1', exportCore: true },
189
+ { input: 'url2', output: 'res2', request: 'req2' },
190
+ ];
191
+ const expected = {
192
+ httpClient: undefined,
193
+ useOptions: undefined,
194
+ useUnionTypes: undefined,
195
+ exportCore: true,
196
+ exportServices: undefined,
197
+ exportModels: undefined,
198
+ exportSchemas: undefined,
199
+ clean: undefined,
200
+ request: undefined,
201
+ interfacePrefix: undefined,
202
+ enumPrefix: undefined,
203
+ typePrefix: undefined,
204
+ useCancelableRequest: undefined,
205
+ items: [
206
+ {
207
+ input: 'url1',
208
+ output: 'res1',
209
+ outputCore: undefined,
210
+ outputServices: undefined,
211
+ outputModels: undefined,
212
+ outputSchemas: undefined,
213
+ },
214
+ {
215
+ input: 'url2',
216
+ output: 'res2',
217
+ outputCore: undefined,
218
+ outputServices: undefined,
219
+ outputModels: undefined,
220
+ outputSchemas: undefined,
221
+ },
222
+ ],
223
+ };
224
+ const result = (0, Utils_1.convertArrayToObject)(input);
225
+ node_assert_1.default.deepStrictEqual(result, expected);
226
+ });
227
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=determineBestMatchingSchemaVersion.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"determineBestMatchingSchemaVersion.test.d.ts","sourceRoot":"","sources":["../../../src/common/__tests__/determineBestMatchingSchemaVersion.test.ts"],"names":[],"mappings":""}