@openapi-qraft/plugin 1.11.0-beta.0 → 1.11.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @openapi-qraft/plugin
2
2
 
3
+ ## 1.11.0-beta.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 3d2dd60: Added initial implementation of `--operation-predefined-parameter` option
8
+
3
9
  ## 1.11.0-beta.0
4
10
 
5
11
  ## 1.10.1
@@ -1 +1 @@
1
- {"version":3,"file":"QraftCommand.d.ts","sourceRoot":"","sources":["../../src/lib/QraftCommand.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAIjD,OAAO,EAAiB,GAAG,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,qBAAa,YAAa,SAAQ,OAAO;IACvC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAC5B,SAAS,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,CAAM;;IAuCrE,MAAM,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAK5C,cAAc,CAAC,GAAG,UAAU,EAAE,GAAG,EAAE;IAwFzC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,0BAA0B;IAInE,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GACzC,IAAI;IACP,MAAM,CAAC,CAAC,EACN,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAC3C,YAAY,CAAC,EAAE,CAAC,GACf,IAAI;IACP,qEAAqE;IACrE,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GACzC,IAAI;IA8BP,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GACzC,IAAI;IACP,cAAc,CAAC,CAAC,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAC3C,YAAY,CAAC,EAAE,CAAC,GACf,IAAI;IACP,qEAAqE;IACrE,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GACzC,IAAI;IA8BP,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;CAe1E;AA+BD,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE;IACP;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC;IACb;;OAEG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;OAEG;IACH,MAAM,EAAE,aAAa,CAAC;CACvB,EACD,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;AAmFnB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM;;;EAoB7C"}
1
+ {"version":3,"file":"QraftCommand.d.ts","sourceRoot":"","sources":["../../src/lib/QraftCommand.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAIjD,OAAO,EAAiB,GAAG,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQnD,qBAAa,YAAa,SAAQ,OAAO;IACvC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAC5B,SAAS,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,CAAM;;IA2CrE,MAAM,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAK5C,cAAc,CAAC,GAAG,UAAU,EAAE,GAAG,EAAE;IA+GzC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,0BAA0B;IAInE,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GACzC,IAAI;IACP,MAAM,CAAC,CAAC,EACN,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAC3C,YAAY,CAAC,EAAE,CAAC,GACf,IAAI;IACP,qEAAqE;IACrE,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GACzC,IAAI;IA8BP,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GACzC,IAAI;IACP,cAAc,CAAC,CAAC,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAC3C,YAAY,CAAC,EAAE,CAAC,GACf,IAAI;IACP,qEAAqE;IACrE,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GACzC,IAAI;IA8BP,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;CAe1E;AAWD,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE;IACP;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC;IACb;;OAEG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;OAEG;IACH,MAAM,EAAE,aAAa,CAAC;CACvB,EACD,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;AAmFnB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM;;;EAoB7C"}
@@ -5,10 +5,12 @@ import { sep } from 'node:path';
5
5
  import process from 'node:process';
6
6
  import { pathToFileURL } from 'node:url';
7
7
  import ora from 'ora';
8
+ import { parsePathGlobs } from './createServicePathMatch.js';
8
9
  import { filterDocumentPaths } from './filterDocumentPaths.js';
9
10
  import { handleSchemaInput } from './handleSchemaInput.js';
10
11
  import { getServices } from './open-api/getServices.js';
11
12
  import { readSchema } from './open-api/readSchema.js';
13
+ import { parseOperationPredefinedParametersOption, createPredefinedParametersGlobMap, predefineSchemaParameters, } from './predefineSchemaParameters.js';
12
14
  import { writeGeneratorFiles } from './writeGeneratorFiles.js';
13
15
  export class QraftCommand extends Command {
14
16
  cwd;
@@ -21,6 +23,7 @@ export class QraftCommand extends Command {
21
23
  .requiredOption('-o, --output-dir <path>', 'Output directory for generated services')
22
24
  .option('-rm, --clean', 'Clean output directory before generating services')
23
25
  .option('--filter-services <glob-pattern>', 'Filter services to be generated by glob pattern. Eg: "/user/**,/post/**". See NPM `micromatch` package for more details.')
26
+ .option('--operation-predefined-parameters <patterns...>', 'Predefined parameters for services. The specified services parameters will be optional. Eg: "/**:header.x-monite-version,query.x-api-key.;/user/**,/post/**:header.x-monite-entity-id"')
24
27
  .option('--postfix-services <string>', 'Postfix to be added to the generated service name (eg: Service)')
25
28
  .option('--service-name-base <endpoint[<index>] | tags>', 'Use OpenAPI Operation `endpoint[<index>]` path part (e.g.: "/0/1/2") or `tags` as the base name of the service.', 'endpoint[0]')
26
29
  .option('--file-header <string>', 'Header to be added to the generated file (eg: /* eslint-disable */)');
@@ -45,7 +48,17 @@ export class QraftCommand extends Command {
45
48
  const spinner = ora('Starting ⛏︎').start();
46
49
  const input = handleSchemaInput(inputs[0], this.cwd, spinner);
47
50
  spinner.text = 'Reading OpenAPI Schema';
48
- const schema = filterDocumentPaths(await readSchema(input), parseServicesFilterOption(args.filterServices));
51
+ let schema = filterDocumentPaths(await readSchema(input), parsePathGlobs(args.filterServices));
52
+ if (args.operationPredefinedParameters) {
53
+ const predefinedParametersGlobMap = createPredefinedParametersGlobMap(schema, parseOperationPredefinedParametersOption(...args.operationPredefinedParameters));
54
+ const predefinedParametersErrors = Object.values(predefinedParametersGlobMap).flatMap(({ errors }) => errors);
55
+ if (predefinedParametersErrors.length) {
56
+ predefinedParametersErrors.forEach((error) => spinner.warn(error));
57
+ spinner.fail('Error occurred during operation predefined parameters setup.');
58
+ process.exit(1);
59
+ }
60
+ schema = predefineSchemaParameters(schema, predefinedParametersGlobMap);
61
+ }
49
62
  spinner.text = 'Getting OpenAPI Services';
50
63
  const services = getServices(schema, {
51
64
  postfixServices: args.postfixServices,
@@ -60,7 +73,7 @@ export class QraftCommand extends Command {
60
73
  args,
61
74
  spinner,
62
75
  services,
63
- schema,
76
+ schema: schema,
64
77
  output: {
65
78
  dir: outputDir,
66
79
  clean: args.clean,
@@ -132,21 +145,6 @@ export class QraftCommand extends Command {
132
145
  function normalizeOutputDirPath(outputDir) {
133
146
  return pathToFileURL(outputDir.endsWith(sep) ? outputDir : `${outputDir}${sep}`);
134
147
  }
135
- /**
136
- * Parse services filter option to array
137
- * @example
138
- * ```ts
139
- * parseServicesFilterOption('/user/**,/post/**')
140
- * ```
141
- * @param endpointGlobs
142
- */
143
- function parseServicesFilterOption(endpointGlobs) {
144
- return endpointGlobs
145
- ? endpointGlobs
146
- .split(',')
147
- .filter((item) => Boolean(typeof item === 'string' && item.trim()))
148
- : undefined;
149
- }
150
148
  function findSimilarOption({ flags, mandatory, }, options) {
151
149
  const newOptionParsedFlags = splitOptionFlags(flags);
152
150
  /** @see {@link https://github.com/tj/commander.js/blob/83c3f4e391754d2f80b179acc4bccc2d4d0c863d/lib/option.js#L15} Source implementation */
@@ -1 +1 @@
1
- {"version":3,"file":"QraftCommand.js","sourceRoot":"","sources":["../../src/lib/QraftCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QraftCommand.js","sourceRoot":"","sources":["../../src/lib/QraftCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Create a function to match service paths
3
+ * @param servicesGlob
4
+ */
5
+ export declare const createServicePathMatch: (servicesGlob: string[]) => (path: string) => boolean;
6
+ /**
7
+ * Parse services filter option to array
8
+ * @example
9
+ * ```ts
10
+ * parsePathGlobs('/user/**,/post/**')
11
+ * ```
12
+ * @param endpointGlobs
13
+ */
14
+ export declare function parsePathGlobs(endpointGlobs: string): string[] | undefined;
15
+ //# sourceMappingURL=createServicePathMatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createServicePathMatch.d.ts","sourceRoot":"","sources":["../../src/lib/createServicePathMatch.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,iBAAkB,MAAM,EAAE,YAgBjB,MAAM,YAKjD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAQ1E"}
@@ -0,0 +1,37 @@
1
+ import micromatch from 'micromatch';
2
+ /**
3
+ * Create a function to match service paths
4
+ * @param servicesGlob
5
+ */
6
+ export const createServicePathMatch = (servicesGlob) => {
7
+ const servicePathGlobs = servicesGlob.reduce((acc, glob) => {
8
+ glob.startsWith('!')
9
+ ? acc.ignore.push(glob.slice(1))
10
+ : acc.match.push(glob);
11
+ return acc;
12
+ }, {
13
+ match: [],
14
+ ignore: [],
15
+ });
16
+ return function isServicePatchMatch(path) {
17
+ return micromatch.isMatch(path, servicePathGlobs.match, {
18
+ ignore: servicePathGlobs.ignore,
19
+ });
20
+ };
21
+ };
22
+ /**
23
+ * Parse services filter option to array
24
+ * @example
25
+ * ```ts
26
+ * parsePathGlobs('/user/**,/post/**')
27
+ * ```
28
+ * @param endpointGlobs
29
+ */
30
+ export function parsePathGlobs(endpointGlobs) {
31
+ return endpointGlobs
32
+ ? endpointGlobs
33
+ .split(',')
34
+ .filter((item) => Boolean(typeof item === 'string' && item.trim()))
35
+ : undefined;
36
+ }
37
+ //# sourceMappingURL=createServicePathMatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createServicePathMatch.js","sourceRoot":"","sources":["../../src/lib/createServicePathMatch.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,YAAsB,EAAE,EAAE;IAC/D,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAG1C,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC,EACD;QACE,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;KACX,CACF,CAAC;IAEF,OAAO,SAAS,mBAAmB,CAAC,IAAY;QAC9C,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE;YACtD,MAAM,EAAE,gBAAgB,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,aAAqB;IAClD,OAAO,aAAa;QAClB,CAAC,CAAC,aAAa;aACV,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,CAAC,IAAa,EAAkB,EAAE,CACxC,OAAO,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CACjD;QACL,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { OpenAPISchemaType } from './open-api/OpenAPISchemaType.js';
1
+ import { type OpenAPI3 } from 'openapi-typescript/src/types.js';
2
2
  /**
3
3
  * Filter the schema to only include paths that match the servicesGlob
4
4
  * @param schema OpenAPI schema
@@ -9,10 +9,5 @@ import type { OpenAPISchemaType } from './open-api/OpenAPISchemaType.js';
9
9
  * filterDocumentPaths(schema, ['/user/**', '/post/**', '!/user/internal'])
10
10
  * ```
11
11
  */
12
- export declare const filterDocumentPaths: (schema: OpenAPISchemaType, servicesGlob: string[] | undefined) => OpenAPISchemaType;
13
- /**
14
- * Create a function to match service paths
15
- * @param servicesGlob
16
- */
17
- export declare const createServicePathMatch: (servicesGlob: string[]) => (path: string) => boolean;
12
+ export declare const filterDocumentPaths: (schema: OpenAPI3, servicesGlob: string[] | undefined) => OpenAPI3;
18
13
  //# sourceMappingURL=filterDocumentPaths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterDocumentPaths.d.ts","sourceRoot":"","sources":["../../src/lib/filterDocumentPaths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,WACtB,iBAAiB,gBACX,MAAM,EAAE,GAAG,SAAS,sBAcnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,iBAAkB,MAAM,EAAE,YAgBjB,MAAM,YAKjD,CAAC"}
1
+ {"version":3,"file":"filterDocumentPaths.d.ts","sourceRoot":"","sources":["../../src/lib/filterDocumentPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAIhE;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,WACtB,QAAQ,gBACF,MAAM,EAAE,GAAG,SAAS,KACjC,QAaF,CAAC"}
@@ -1,4 +1,4 @@
1
- import micromatch from 'micromatch';
1
+ import { createServicePathMatch } from './createServicePathMatch.js';
2
2
  /**
3
3
  * Filter the schema to only include paths that match the servicesGlob
4
4
  * @param schema OpenAPI schema
@@ -23,24 +23,4 @@ export const filterDocumentPaths = (schema, servicesGlob) => {
23
23
  }
24
24
  return { ...schema, paths };
25
25
  };
26
- /**
27
- * Create a function to match service paths
28
- * @param servicesGlob
29
- */
30
- export const createServicePathMatch = (servicesGlob) => {
31
- const servicePathGlobs = servicesGlob.reduce((acc, glob) => {
32
- glob.startsWith('!')
33
- ? acc.ignore.push(glob.slice(1))
34
- : acc.match.push(glob);
35
- return acc;
36
- }, {
37
- match: [],
38
- ignore: [],
39
- });
40
- return function isServicePatchMatch(path) {
41
- return micromatch.isMatch(path, servicePathGlobs.match, {
42
- ignore: servicePathGlobs.ignore,
43
- });
44
- };
45
- };
46
26
  //# sourceMappingURL=filterDocumentPaths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterDocumentPaths.js","sourceRoot":"","sources":["../../src/lib/filterDocumentPaths.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAyB,EACzB,YAAkC,EAClC,EAAE;IACF,IAAI,CAAC,YAAY;QAAE,OAAO,MAAM,CAAC;IAEjC,MAAM,WAAW,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,SAAS;QACxE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,SAAS;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,YAAsB,EAAE,EAAE;IAC/D,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAG1C,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC,EACD;QACE,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;KACX,CACF,CAAC;IAEF,OAAO,SAAS,mBAAmB,CAAC,IAAY;QAC9C,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE;YACtD,MAAM,EAAE,gBAAgB,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"filterDocumentPaths.js","sourceRoot":"","sources":["../../src/lib/filterDocumentPaths.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAgB,EAChB,YAAkC,EACxB,EAAE;IACZ,IAAI,CAAC,YAAY;QAAE,OAAO,MAAM,CAAC;IAEjC,MAAM,WAAW,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,SAAS;QACxE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,SAAS;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC,CAAC"}
@@ -11,7 +11,7 @@ export type OpenAPISchemaType = {
11
11
  description?: string;
12
12
  summary?: string;
13
13
  operationId?: string;
14
- parameters?: Record<string, any>;
14
+ parameters?: Array<any>;
15
15
  deprecated?: boolean;
16
16
  requestBody?: {
17
17
  content: {
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAPISchemaType.d.ts","sourceRoot":"","sources":["../../../src/lib/open-api/OpenAPISchemaType.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,CAAC,IAAI,EAAE,MAAM,GAAG;YACd,CAAC,MAAM,EAAE,MAAM,GAAG;gBAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;gBAChB,WAAW,CAAC,EAAE,MAAM,CAAC;gBACrB,OAAO,CAAC,EAAE,MAAM,CAAC;gBACjB,WAAW,CAAC,EAAE,MAAM,CAAC;gBACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACjC,UAAU,CAAC,EAAE,OAAO,CAAC;gBACrB,WAAW,CAAC,EAAE;oBACZ,OAAO,EAAE;wBACP,CAAC,WAAW,EAAE,MAAM,GAAG;4BACrB,MAAM,EAAE,GAAG,CAAC;yBACb,CAAC;qBACH,CAAC;iBACH,CAAC;gBACF,SAAS,EAAE;qBACR,UAAU,IAAI,MAAM,GAAG,SAAS,GAAG;wBAClC,WAAW,EAAE,MAAM,CAAC;wBACpB,OAAO,EAAE;4BACP,CAAC,WAAW,EAAE,MAAM,GAAG;gCACrB,MAAM,EAAE,GAAG,CAAC;6BACb,CAAC;yBACH,CAAC;qBACH;iBACF,CAAC;gBACF,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;aACxD,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"OpenAPISchemaType.d.ts","sourceRoot":"","sources":["../../../src/lib/open-api/OpenAPISchemaType.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,CAAC,IAAI,EAAE,MAAM,GAAG;YACd,CAAC,MAAM,EAAE,MAAM,GAAG;gBAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;gBAChB,WAAW,CAAC,EAAE,MAAM,CAAC;gBACrB,OAAO,CAAC,EAAE,MAAM,CAAC;gBACjB,WAAW,CAAC,EAAE,MAAM,CAAC;gBACrB,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,UAAU,CAAC,EAAE,OAAO,CAAC;gBACrB,WAAW,CAAC,EAAE;oBACZ,OAAO,EAAE;wBACP,CAAC,WAAW,EAAE,MAAM,GAAG;4BACrB,MAAM,EAAE,GAAG,CAAC;yBACb,CAAC;qBACH,CAAC;iBACH,CAAC;gBACF,SAAS,EAAE;qBACR,UAAU,IAAI,MAAM,GAAG,SAAS,GAAG;wBAClC,WAAW,EAAE,MAAM,CAAC;wBACpB,OAAO,EAAE;4BACP,CAAC,WAAW,EAAE,MAAM,GAAG;gCACrB,MAAM,EAAE,GAAG,CAAC;6BACb,CAAC;yBACH,CAAC;qBACH;iBACF,CAAC;gBACF,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;aACxD,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC"}
@@ -32,5 +32,5 @@ export interface ServiceOutputOptions {
32
32
  serviceNameBase?: ServiceBaseName;
33
33
  }
34
34
  export declare const getServices: (openApiJson: OpenAPISchemaType, { postfixServices, serviceNameBase, }?: ServiceOutputOptions) => Service[];
35
- export declare const supportedMethod: (method: unknown) => method is "get" | "put" | "post" | "patch" | "delete" | "options" | "head" | "trace";
35
+ export declare const supportedMethod: (method: unknown) => method is "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";
36
36
  //# sourceMappingURL=getServices.d.ts.map
@@ -2,6 +2,5 @@
2
2
  /// <reference types="node" resolution-mode="require"/>
3
3
  import type { Readable } from 'node:stream';
4
4
  import type { OpenAPI3 } from 'openapi-typescript';
5
- import { OpenAPISchemaType } from './OpenAPISchemaType.js';
6
- export declare const readSchema: (source: string | URL | OpenAPI3 | Readable | Buffer) => Promise<OpenAPISchemaType>;
5
+ export declare const readSchema: (source: string | URL | OpenAPI3 | Readable | Buffer) => Promise<OpenAPI3>;
7
6
  //# sourceMappingURL=readSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readSchema.d.ts","sourceRoot":"","sources":["../../../src/lib/open-api/readSchema.ts"],"names":[],"mappings":";;AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,eAAO,MAAM,UAAU,WACb,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,+BAiBpD,CAAC"}
1
+ {"version":3,"file":"readSchema.d.ts","sourceRoot":"","sources":["../../../src/lib/open-api/readSchema.ts"],"names":[],"mappings":";;AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,eAAO,MAAM,UAAU,WACb,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,sBAiBpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"readSchema.js","sourceRoot":"","sources":["../../../src/lib/open-api/readSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAIzE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,MAAmD,EACnD,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,YAAY,CAC9B;QACE,KAAK,EAAE;YACL,8BAA8B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,wCAAwC;SAChG;KACF,EACD,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CACzB,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE;QAC7C,KAAK;QACL,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,OAAO,MAA2B,CAAC;AACrC,CAAC,CAAC"}
1
+ {"version":3,"file":"readSchema.js","sourceRoot":"","sources":["../../../src/lib/open-api/readSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,MAAmD,EACnD,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,YAAY,CAC9B;QACE,KAAK,EAAE;YACL,8BAA8B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,wCAAwC;SAChG;KACF,EACD,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CACzB,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE;QAC7C,KAAK;QACL,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,OAAO,MAAkB,CAAC;AAC5B,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { OperationObject, ParameterObject } from 'openapi-typescript';
2
+ import { type OpenAPI3, ReferenceObject } from 'openapi-typescript/src/types.js';
3
+ export declare function predefineSchemaParameters(schema: OpenAPI3, predefinedParametersGlobMap: PredefinedParametersGlobMap): OpenAPI3;
4
+ type PredefinedParametersOptionMap = Record<string, Pick<ParameterObject, 'in' | 'name'>[]>;
5
+ /**
6
+ * Parses the given configuration string into a structured format.
7
+ *
8
+ * @param optionItems - The configuration string to parse. Eg. `/foo,/bar/**:header.x-monite-version,query.x-api-key`.
9
+ * @returns The parsed configuration.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const parsedConfig = parseOperationPredefinedParametersOption("/foo,/bar/**:header.x-monite-version,query.x-api-key");
14
+ * ```
15
+ */
16
+ declare function parseOperationPredefinedParametersOption(...optionItems: string[]): PredefinedParametersOptionMap;
17
+ type PredefinedParametersGlobMap = {
18
+ [glob: string]: {
19
+ paths: string[];
20
+ parameters: ParameterObject[];
21
+ errors: string[];
22
+ };
23
+ };
24
+ export declare function createPredefinedParametersGlobMap(schema: OpenAPI3, predefinedParameters: PredefinedParametersOptionMap): PredefinedParametersGlobMap;
25
+ export declare function assertIsOperationObject(operationItem: OperationObject | ReferenceObject): asserts operationItem is OperationObject;
26
+ export declare function assertIsParameterObjects(parameterObjects: Array<ParameterObject | ReferenceObject>): asserts parameterObjects is Array<ParameterObject>;
27
+ export { parseOperationPredefinedParametersOption };
28
+ //# sourceMappingURL=predefineSchemaParameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predefineSchemaParameters.d.ts","sourceRoot":"","sources":["../../src/lib/predefineSchemaParameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACL,KAAK,QAAQ,EAEb,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAOzC,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,EAChB,2BAA2B,EAAE,2BAA2B,GACvD,QAAQ,CAoEV;AAED,KAAK,6BAA6B,GAAG,MAAM,CACzC,MAAM,EACN,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CACvC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAS,wCAAwC,CAC/C,GAAG,WAAW,EAAE,MAAM,EAAE,GACvB,6BAA6B,CAuC/B;AAED,KAAK,2BAA2B,GAAG;IACjC,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,EAAE,eAAe,EAAE,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,QAAQ,EAChB,oBAAoB,EAAE,6BAA6B,GAClD,2BAA2B,CAyG7B;AA4BD,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,eAAe,GAAG,eAAe,GAC/C,OAAO,CAAC,aAAa,IAAI,eAAe,CAM1C;AAED,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC,GACzD,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC,eAAe,CAAC,CAQpD;AAED,OAAO,EAAE,wCAAwC,EAAE,CAAC"}
@@ -0,0 +1,188 @@
1
+ import { createServicePathMatch, parsePathGlobs, } from './createServicePathMatch.js';
2
+ export function predefineSchemaParameters(schema, predefinedParametersGlobMap) {
3
+ const predefinedSchemaPaths = {};
4
+ for (const path in schema.paths) {
5
+ if (!Object.prototype.hasOwnProperty.call(schema.paths, path))
6
+ continue;
7
+ const service = schema.paths[path];
8
+ assertIsPathItemObject(service);
9
+ predefinedSchemaPaths[path] = { ...service };
10
+ for (const _method in service) {
11
+ const method = _method;
12
+ if (!Object.prototype.hasOwnProperty.call(service, method))
13
+ continue;
14
+ const operation = service[method];
15
+ assertIsOperationObject(operation);
16
+ for (const predefinedParametersGlob of Object.values(predefinedParametersGlobMap)) {
17
+ if (!predefinedParametersGlob.paths.includes(path)) {
18
+ continue;
19
+ }
20
+ const predefinedPathItem = predefinedSchemaPaths[path];
21
+ if (predefinedPathItem)
22
+ assertIsPathItemObject(predefinedPathItem);
23
+ const predefinedOperation = predefinedPathItem?.[method];
24
+ if (predefinedOperation)
25
+ assertIsOperationObject(predefinedOperation);
26
+ const operationParameters = predefinedOperation?.parameters ?? operation.parameters ?? [];
27
+ assertIsParameterObjects(operationParameters);
28
+ const predefinedParameters = operationParameters.map((operationParameter) => {
29
+ if (findPredefinedOperationParameter(operationParameter, predefinedParametersGlob.parameters)) {
30
+ return {
31
+ ...operationParameter,
32
+ required: false,
33
+ };
34
+ }
35
+ return operationParameter;
36
+ });
37
+ Object.assign(predefinedSchemaPaths[path], {
38
+ [method]: {
39
+ ...operation,
40
+ parameters: predefinedParameters,
41
+ },
42
+ });
43
+ }
44
+ }
45
+ }
46
+ return {
47
+ ...schema,
48
+ paths: predefinedSchemaPaths,
49
+ };
50
+ }
51
+ /**
52
+ * Parses the given configuration string into a structured format.
53
+ *
54
+ * @param optionItems - The configuration string to parse. Eg. `/foo,/bar/**:header.x-monite-version,query.x-api-key`.
55
+ * @returns The parsed configuration.
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * const parsedConfig = parseOperationPredefinedParametersOption("/foo,/bar/**:header.x-monite-version,query.x-api-key");
60
+ * ```
61
+ */
62
+ function parseOperationPredefinedParametersOption(...optionItems) {
63
+ const globParametersMap = {};
64
+ for (const optionItem of optionItems) {
65
+ const [pathGlob, options] = optionItem.split(':').map((s) => s.trim());
66
+ const parameters = {
67
+ header: [],
68
+ query: [],
69
+ cookie: [],
70
+ };
71
+ if (options) {
72
+ options
73
+ .split(',')
74
+ .map((option) => option.trim())
75
+ .filter(Boolean)
76
+ .forEach((option) => {
77
+ const [type, key] = option.split('.').map((s) => s.trim());
78
+ if (type !== 'header' && type !== 'query' && type !== 'cookie')
79
+ throw new Error(`Invalid option type: ${type} in ${option}. Must be one of 'header', 'query', or 'cookie'`);
80
+ if (!parameters[type].includes(key))
81
+ parameters[type].push(key);
82
+ });
83
+ }
84
+ if (pathGlob in globParametersMap) {
85
+ throw new Error(`Duplicate path: ${pathGlob} in config string.`);
86
+ }
87
+ globParametersMap[pathGlob] = Object.entries(parameters).flatMap(([inLocation, names]) => names.map((name) => ({ in: inLocation, name })));
88
+ }
89
+ return globParametersMap;
90
+ }
91
+ export function createPredefinedParametersGlobMap(schema, predefinedParameters) {
92
+ const predefinedParametersGlobMap = {};
93
+ const servicePredefinedParametersList = Object.entries(predefinedParameters).map(([pathGlobs, parameters]) => {
94
+ const globs = parsePathGlobs(pathGlobs);
95
+ if (!globs)
96
+ throw new Error(`Invalid path glob: ${pathGlobs}. Must be a comma-separated list of globs.`);
97
+ return {
98
+ pathGlobs,
99
+ parameters,
100
+ isPathMatch: createServicePathMatch(globs),
101
+ };
102
+ });
103
+ for (const path in schema.paths) {
104
+ if (!Object.prototype.hasOwnProperty.call(schema.paths, path))
105
+ continue;
106
+ for (const { pathGlobs, parameters: parametersToPredefine, isPathMatch, } of servicePredefinedParametersList) {
107
+ if (!isPathMatch(path))
108
+ continue;
109
+ const service = schema.paths[path];
110
+ assertIsPathItemObject(service);
111
+ for (const _method in service) {
112
+ const method = _method;
113
+ if (!Object.prototype.hasOwnProperty.call(service, method))
114
+ continue;
115
+ const operation = service[method];
116
+ assertIsOperationObject(operation);
117
+ const operationParameters = operation.parameters ?? [];
118
+ assertIsParameterObjects(operationParameters);
119
+ if (!(pathGlobs in predefinedParametersGlobMap))
120
+ predefinedParametersGlobMap[pathGlobs] = {
121
+ paths: [],
122
+ parameters: [],
123
+ errors: [],
124
+ };
125
+ const predefinedPathGlob = predefinedParametersGlobMap[pathGlobs];
126
+ for (const parameterSchemaToPredefine of parametersToPredefine) {
127
+ const parameterToPredefine = findPredefinedOperationParameter(parameterSchemaToPredefine, operationParameters);
128
+ if (!parameterToPredefine) {
129
+ predefinedPathGlob.errors.push(`Missing predefined parameter '${parameterSchemaToPredefine.in}' '${parameterSchemaToPredefine.name}' in '${method} ${path}' in '${pathGlobs}'`);
130
+ continue;
131
+ }
132
+ const existingParameterToPredefine = findPredefinedOperationParameter(parameterToPredefine, predefinedPathGlob.parameters);
133
+ if (existingParameterToPredefine) {
134
+ if (!shallowEqualParameterTypes(parameterToPredefine, existingParameterToPredefine)) {
135
+ predefinedPathGlob.errors.push(`Parameter '${parameterSchemaToPredefine.in}' '${parameterToPredefine.name}' in '${method} ${path}' has conflicting types with predefined parameter '${parameterToPredefine.name}' in '${pathGlobs}'`);
136
+ }
137
+ else {
138
+ if (!predefinedPathGlob.paths.includes(path))
139
+ predefinedPathGlob.paths.push(path);
140
+ }
141
+ }
142
+ else {
143
+ predefinedPathGlob.parameters.push(parameterToPredefine);
144
+ if (!predefinedPathGlob.paths.includes(path))
145
+ predefinedPathGlob.paths.push(path);
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ Object.entries(predefinedParameters).forEach(([pathGlobs]) => {
152
+ if (!predefinedParametersGlobMap[pathGlobs]) {
153
+ predefinedParametersGlobMap[pathGlobs] = {
154
+ paths: [],
155
+ parameters: [],
156
+ errors: [`No matching paths found for '${pathGlobs}'`],
157
+ };
158
+ }
159
+ });
160
+ return predefinedParametersGlobMap;
161
+ }
162
+ function findPredefinedOperationParameter(parameterSchemaToPredefine, operationParameters) {
163
+ return operationParameters.find((operationParameter) => operationParameter.in === parameterSchemaToPredefine.in &&
164
+ operationParameter.name === parameterSchemaToPredefine.name);
165
+ }
166
+ function shallowEqualParameterTypes(a, b) {
167
+ if ('schema' in a || 'schema' in b)
168
+ return 'schema' in a && 'schema' in b && a.schema?.type === b.schema?.type;
169
+ }
170
+ function assertIsPathItemObject(pathItem) {
171
+ if ('$ref' in pathItem) {
172
+ throw new Error(`Expected a PathItemObject, but got a ReferenceObject: ${pathItem}`);
173
+ }
174
+ }
175
+ export function assertIsOperationObject(operationItem) {
176
+ if ('$ref' in operationItem) {
177
+ throw new Error(`Expected a OperationObject, but got a ReferenceObject: ${operationItem}`);
178
+ }
179
+ }
180
+ export function assertIsParameterObjects(parameterObjects) {
181
+ parameterObjects.forEach((parameterObject) => {
182
+ if ('$ref' in parameterObject) {
183
+ throw new Error(`Expected a ParameterObject, but got a ReferenceObject: ${parameterObject}`);
184
+ }
185
+ });
186
+ }
187
+ export { parseOperationPredefinedParametersOption };
188
+ //# sourceMappingURL=predefineSchemaParameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predefineSchemaParameters.js","sourceRoot":"","sources":["../../src/lib/predefineSchemaParameters.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openapi-qraft/plugin",
3
- "version": "1.11.0-beta.0",
3
+ "version": "1.11.0-beta.1",
4
4
  "packageManager": "yarn@4.0.2",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -6,6 +6,7 @@ import process from 'node:process';
6
6
  import { pathToFileURL, URL } from 'node:url';
7
7
  import ora, { Ora } from 'ora';
8
8
 
9
+ import { parsePathGlobs } from './createServicePathMatch.js';
9
10
  import { filterDocumentPaths } from './filterDocumentPaths.js';
10
11
  import { GeneratorFile } from './GeneratorFile.js';
11
12
  import { handleSchemaInput } from './handleSchemaInput.js';
@@ -13,6 +14,11 @@ import { getServices, type Service } from './open-api/getServices.js';
13
14
  import { OpenAPISchemaType } from './open-api/OpenAPISchemaType.js';
14
15
  import { readSchema } from './open-api/readSchema.js';
15
16
  import { OutputOptions } from './OutputOptions.js';
17
+ import {
18
+ parseOperationPredefinedParametersOption,
19
+ createPredefinedParametersGlobMap,
20
+ predefineSchemaParameters,
21
+ } from './predefineSchemaParameters.js';
16
22
  import { writeGeneratorFiles } from './writeGeneratorFiles.js';
17
23
 
18
24
  export class QraftCommand extends Command {
@@ -41,6 +47,10 @@ export class QraftCommand extends Command {
41
47
  '--filter-services <glob-pattern>',
42
48
  'Filter services to be generated by glob pattern. Eg: "/user/**,/post/**". See NPM `micromatch` package for more details.'
43
49
  )
50
+ .option(
51
+ '--operation-predefined-parameters <patterns...>',
52
+ 'Predefined parameters for services. The specified services parameters will be optional. Eg: "/**:header.x-monite-version,query.x-api-key.;/user/**,/post/**:header.x-monite-entity-id"'
53
+ )
44
54
  .option(
45
55
  '--postfix-services <string>',
46
56
  'Postfix to be added to the generated service name (eg: Service)'
@@ -90,13 +100,36 @@ export class QraftCommand extends Command {
90
100
  const input = handleSchemaInput(inputs[0], this.cwd, spinner);
91
101
 
92
102
  spinner.text = 'Reading OpenAPI Schema';
93
- const schema = filterDocumentPaths(
103
+ let schema = filterDocumentPaths(
94
104
  await readSchema(input),
95
- parseServicesFilterOption(args.filterServices)
105
+ parsePathGlobs(args.filterServices)
96
106
  );
97
107
 
108
+ if (args.operationPredefinedParameters) {
109
+ const predefinedParametersGlobMap = createPredefinedParametersGlobMap(
110
+ schema,
111
+ parseOperationPredefinedParametersOption(
112
+ ...args.operationPredefinedParameters
113
+ )
114
+ );
115
+
116
+ const predefinedParametersErrors = Object.values(
117
+ predefinedParametersGlobMap
118
+ ).flatMap(({ errors }) => errors);
119
+
120
+ if (predefinedParametersErrors.length) {
121
+ predefinedParametersErrors.forEach((error) => spinner.warn(error));
122
+ spinner.fail(
123
+ 'Error occurred during operation predefined parameters setup.'
124
+ );
125
+ process.exit(1);
126
+ }
127
+
128
+ schema = predefineSchemaParameters(schema, predefinedParametersGlobMap);
129
+ }
130
+
98
131
  spinner.text = 'Getting OpenAPI Services';
99
- const services = getServices(schema, {
132
+ const services = getServices(schema as OpenAPISchemaType, {
100
133
  postfixServices: args.postfixServices,
101
134
  serviceNameBase: args.serviceNameBase,
102
135
  });
@@ -114,7 +147,7 @@ export class QraftCommand extends Command {
114
147
  args,
115
148
  spinner,
116
149
  services,
117
- schema,
150
+ schema: schema as OpenAPISchemaType,
118
151
  output: {
119
152
  dir: outputDir,
120
153
  clean: args.clean,
@@ -273,26 +306,6 @@ function normalizeOutputDirPath(outputDir: string): URL {
273
306
  );
274
307
  }
275
308
 
276
- /**
277
- * Parse services filter option to array
278
- * @example
279
- * ```ts
280
- * parseServicesFilterOption('/user/**,/post/**')
281
- * ```
282
- * @param endpointGlobs
283
- */
284
- function parseServicesFilterOption(
285
- endpointGlobs: string
286
- ): string[] | undefined {
287
- return endpointGlobs
288
- ? endpointGlobs
289
- .split(',')
290
- .filter((item: unknown): item is string =>
291
- Boolean(typeof item === 'string' && item.trim())
292
- )
293
- : undefined;
294
- }
295
-
296
309
  export type QraftCommandActionCallback = (
297
310
  options: {
298
311
  /**
@@ -0,0 +1,46 @@
1
+ import micromatch from 'micromatch';
2
+
3
+ /**
4
+ * Create a function to match service paths
5
+ * @param servicesGlob
6
+ */
7
+ export const createServicePathMatch = (servicesGlob: string[]) => {
8
+ const servicePathGlobs = servicesGlob.reduce<
9
+ Record<'match' | 'ignore', string[]>
10
+ >(
11
+ (acc, glob) => {
12
+ glob.startsWith('!')
13
+ ? acc.ignore.push(glob.slice(1))
14
+ : acc.match.push(glob);
15
+ return acc;
16
+ },
17
+ {
18
+ match: [],
19
+ ignore: [],
20
+ }
21
+ );
22
+
23
+ return function isServicePatchMatch(path: string) {
24
+ return micromatch.isMatch(path, servicePathGlobs.match, {
25
+ ignore: servicePathGlobs.ignore,
26
+ });
27
+ };
28
+ };
29
+
30
+ /**
31
+ * Parse services filter option to array
32
+ * @example
33
+ * ```ts
34
+ * parsePathGlobs('/user/**,/post/**')
35
+ * ```
36
+ * @param endpointGlobs
37
+ */
38
+ export function parsePathGlobs(endpointGlobs: string): string[] | undefined {
39
+ return endpointGlobs
40
+ ? endpointGlobs
41
+ .split(',')
42
+ .filter((item: unknown): item is string =>
43
+ Boolean(typeof item === 'string' && item.trim())
44
+ )
45
+ : undefined;
46
+ }
@@ -1,6 +1,6 @@
1
- import micromatch from 'micromatch';
1
+ import { type OpenAPI3 } from 'openapi-typescript/src/types.js';
2
2
 
3
- import type { OpenAPISchemaType } from './open-api/OpenAPISchemaType.js';
3
+ import { createServicePathMatch } from './createServicePathMatch.js';
4
4
 
5
5
  /**
6
6
  * Filter the schema to only include paths that match the servicesGlob
@@ -13,9 +13,9 @@ import type { OpenAPISchemaType } from './open-api/OpenAPISchemaType.js';
13
13
  * ```
14
14
  */
15
15
  export const filterDocumentPaths = (
16
- schema: OpenAPISchemaType,
16
+ schema: OpenAPI3,
17
17
  servicesGlob: string[] | undefined
18
- ) => {
18
+ ): OpenAPI3 => {
19
19
  if (!servicesGlob) return schema;
20
20
 
21
21
  const isPathMatch = createServicePathMatch(servicesGlob);
@@ -29,30 +29,3 @@ export const filterDocumentPaths = (
29
29
 
30
30
  return { ...schema, paths };
31
31
  };
32
-
33
- /**
34
- * Create a function to match service paths
35
- * @param servicesGlob
36
- */
37
- export const createServicePathMatch = (servicesGlob: string[]) => {
38
- const servicePathGlobs = servicesGlob.reduce<
39
- Record<'match' | 'ignore', string[]>
40
- >(
41
- (acc, glob) => {
42
- glob.startsWith('!')
43
- ? acc.ignore.push(glob.slice(1))
44
- : acc.match.push(glob);
45
- return acc;
46
- },
47
- {
48
- match: [],
49
- ignore: [],
50
- }
51
- );
52
-
53
- return function isServicePatchMatch(path: string) {
54
- return micromatch.isMatch(path, servicePathGlobs.match, {
55
- ignore: servicePathGlobs.ignore,
56
- });
57
- };
58
- };
@@ -11,7 +11,7 @@ export type OpenAPISchemaType = {
11
11
  description?: string;
12
12
  summary?: string;
13
13
  operationId?: string;
14
- parameters?: Record<string, any>;
14
+ parameters?: Array<any>;
15
15
  deprecated?: boolean;
16
16
  requestBody?: {
17
17
  content: {
@@ -4,8 +4,6 @@ import type { Readable } from 'node:stream';
4
4
  import type { OpenAPI3 } from 'openapi-typescript';
5
5
  import { validateAndBundle } from 'openapi-typescript/dist/lib/redoc.js';
6
6
 
7
- import { OpenAPISchemaType } from './OpenAPISchemaType.js';
8
-
9
7
  export const readSchema = async (
10
8
  source: string | URL | OpenAPI3 | Readable | Buffer
11
9
  ) => {
@@ -23,5 +21,5 @@ export const readSchema = async (
23
21
  silent: false,
24
22
  });
25
23
 
26
- return parsed as OpenAPISchemaType;
24
+ return parsed as OpenAPI3;
27
25
  };
@@ -0,0 +1,311 @@
1
+ import { OperationObject, ParameterObject } from 'openapi-typescript';
2
+ import {
3
+ type OpenAPI3,
4
+ PathItemObject,
5
+ ReferenceObject,
6
+ } from 'openapi-typescript/src/types.js';
7
+
8
+ import {
9
+ createServicePathMatch,
10
+ parsePathGlobs,
11
+ } from './createServicePathMatch.js';
12
+
13
+ export function predefineSchemaParameters(
14
+ schema: OpenAPI3,
15
+ predefinedParametersGlobMap: PredefinedParametersGlobMap
16
+ ): OpenAPI3 {
17
+ const predefinedSchemaPaths: typeof schema.paths = {};
18
+
19
+ for (const path in schema.paths) {
20
+ if (!Object.prototype.hasOwnProperty.call(schema.paths, path)) continue;
21
+
22
+ const service = schema.paths[path];
23
+
24
+ assertIsPathItemObject(service);
25
+
26
+ predefinedSchemaPaths[path] = { ...service };
27
+
28
+ for (const _method in service) {
29
+ const method = _method as keyof typeof service;
30
+ if (!Object.prototype.hasOwnProperty.call(service, method)) continue;
31
+
32
+ const operation = service[method];
33
+ assertIsOperationObject(operation);
34
+
35
+ for (const predefinedParametersGlob of Object.values(
36
+ predefinedParametersGlobMap
37
+ )) {
38
+ if (!predefinedParametersGlob.paths.includes(path)) {
39
+ continue;
40
+ }
41
+
42
+ const predefinedPathItem = predefinedSchemaPaths[path];
43
+ if (predefinedPathItem) assertIsPathItemObject(predefinedPathItem);
44
+ const predefinedOperation = predefinedPathItem?.[method];
45
+ if (predefinedOperation) assertIsOperationObject(predefinedOperation);
46
+
47
+ const operationParameters =
48
+ predefinedOperation?.parameters ?? operation.parameters ?? [];
49
+
50
+ assertIsParameterObjects(operationParameters);
51
+
52
+ const predefinedParameters = operationParameters.map(
53
+ (operationParameter) => {
54
+ if (
55
+ findPredefinedOperationParameter(
56
+ operationParameter,
57
+ predefinedParametersGlob.parameters
58
+ )
59
+ ) {
60
+ return {
61
+ ...operationParameter,
62
+ required: false,
63
+ };
64
+ }
65
+
66
+ return operationParameter;
67
+ }
68
+ );
69
+
70
+ Object.assign(predefinedSchemaPaths[path], {
71
+ [method]: {
72
+ ...operation,
73
+ parameters: predefinedParameters,
74
+ },
75
+ });
76
+ }
77
+ }
78
+ }
79
+
80
+ return {
81
+ ...schema,
82
+ paths: predefinedSchemaPaths,
83
+ };
84
+ }
85
+
86
+ type PredefinedParametersOptionMap = Record<
87
+ string,
88
+ Pick<ParameterObject, 'in' | 'name'>[]
89
+ >;
90
+
91
+ /**
92
+ * Parses the given configuration string into a structured format.
93
+ *
94
+ * @param optionItems - The configuration string to parse. Eg. `/foo,/bar/**:header.x-monite-version,query.x-api-key`.
95
+ * @returns The parsed configuration.
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * const parsedConfig = parseOperationPredefinedParametersOption("/foo,/bar/**:header.x-monite-version,query.x-api-key");
100
+ * ```
101
+ */
102
+ function parseOperationPredefinedParametersOption(
103
+ ...optionItems: string[]
104
+ ): PredefinedParametersOptionMap {
105
+ const globParametersMap: PredefinedParametersOptionMap = {};
106
+
107
+ for (const optionItem of optionItems) {
108
+ const [pathGlob, options] = optionItem.split(':').map((s) => s.trim());
109
+ const parameters: Record<'header' | 'query' | 'cookie', string[]> = {
110
+ header: [],
111
+ query: [],
112
+ cookie: [],
113
+ };
114
+
115
+ if (options) {
116
+ options
117
+ .split(',')
118
+ .map((option) => option.trim())
119
+ .filter(Boolean)
120
+ .forEach((option) => {
121
+ const [type, key] = option.split('.').map((s) => s.trim());
122
+
123
+ if (type !== 'header' && type !== 'query' && type !== 'cookie')
124
+ throw new Error(
125
+ `Invalid option type: ${type} in ${option}. Must be one of 'header', 'query', or 'cookie'`
126
+ );
127
+
128
+ if (!parameters[type].includes(key)) parameters[type].push(key);
129
+ });
130
+ }
131
+
132
+ if (pathGlob in globParametersMap) {
133
+ throw new Error(`Duplicate path: ${pathGlob} in config string.`);
134
+ }
135
+
136
+ globParametersMap[pathGlob] = Object.entries(parameters).flatMap(
137
+ ([inLocation, names]) =>
138
+ names.map((name) => ({ in: inLocation as ParameterObject['in'], name }))
139
+ );
140
+ }
141
+
142
+ return globParametersMap;
143
+ }
144
+
145
+ type PredefinedParametersGlobMap = {
146
+ [glob: string]: {
147
+ paths: string[];
148
+ parameters: ParameterObject[];
149
+ errors: string[];
150
+ };
151
+ };
152
+
153
+ export function createPredefinedParametersGlobMap(
154
+ schema: OpenAPI3,
155
+ predefinedParameters: PredefinedParametersOptionMap
156
+ ): PredefinedParametersGlobMap {
157
+ const predefinedParametersGlobMap: PredefinedParametersGlobMap = {};
158
+
159
+ const servicePredefinedParametersList = Object.entries(
160
+ predefinedParameters
161
+ ).map(([pathGlobs, parameters]) => {
162
+ const globs = parsePathGlobs(pathGlobs);
163
+ if (!globs)
164
+ throw new Error(
165
+ `Invalid path glob: ${pathGlobs}. Must be a comma-separated list of globs.`
166
+ );
167
+
168
+ return {
169
+ pathGlobs,
170
+ parameters,
171
+ isPathMatch: createServicePathMatch(globs),
172
+ };
173
+ });
174
+
175
+ for (const path in schema.paths) {
176
+ if (!Object.prototype.hasOwnProperty.call(schema.paths, path)) continue;
177
+ for (const {
178
+ pathGlobs,
179
+ parameters: parametersToPredefine,
180
+ isPathMatch,
181
+ } of servicePredefinedParametersList) {
182
+ if (!isPathMatch(path)) continue;
183
+
184
+ const service = schema.paths[path];
185
+
186
+ assertIsPathItemObject(service);
187
+
188
+ for (const _method in service) {
189
+ const method = _method as keyof typeof service;
190
+ if (!Object.prototype.hasOwnProperty.call(service, method)) continue;
191
+
192
+ const operation = service[method];
193
+ assertIsOperationObject(operation);
194
+
195
+ const operationParameters = operation.parameters ?? [];
196
+ assertIsParameterObjects(operationParameters);
197
+
198
+ if (!(pathGlobs in predefinedParametersGlobMap))
199
+ predefinedParametersGlobMap[pathGlobs] = {
200
+ paths: [],
201
+ parameters: [],
202
+ errors: [],
203
+ };
204
+
205
+ const predefinedPathGlob = predefinedParametersGlobMap[pathGlobs];
206
+
207
+ for (const parameterSchemaToPredefine of parametersToPredefine) {
208
+ const parameterToPredefine = findPredefinedOperationParameter(
209
+ parameterSchemaToPredefine,
210
+ operationParameters
211
+ );
212
+
213
+ if (!parameterToPredefine) {
214
+ predefinedPathGlob.errors.push(
215
+ `Missing predefined parameter '${parameterSchemaToPredefine.in}' '${parameterSchemaToPredefine.name}' in '${method} ${path}' in '${pathGlobs}'`
216
+ );
217
+
218
+ continue;
219
+ }
220
+
221
+ const existingParameterToPredefine = findPredefinedOperationParameter(
222
+ parameterToPredefine,
223
+ predefinedPathGlob.parameters
224
+ );
225
+
226
+ if (existingParameterToPredefine) {
227
+ if (
228
+ !shallowEqualParameterTypes(
229
+ parameterToPredefine,
230
+ existingParameterToPredefine
231
+ )
232
+ ) {
233
+ predefinedPathGlob.errors.push(
234
+ `Parameter '${parameterSchemaToPredefine.in}' '${parameterToPredefine.name}' in '${method} ${path}' has conflicting types with predefined parameter '${parameterToPredefine.name}' in '${pathGlobs}'`
235
+ );
236
+ } else {
237
+ if (!predefinedPathGlob.paths.includes(path))
238
+ predefinedPathGlob.paths.push(path);
239
+ }
240
+ } else {
241
+ predefinedPathGlob.parameters.push(parameterToPredefine);
242
+ if (!predefinedPathGlob.paths.includes(path))
243
+ predefinedPathGlob.paths.push(path);
244
+ }
245
+ }
246
+ }
247
+ }
248
+ }
249
+
250
+ Object.entries(predefinedParameters).forEach(([pathGlobs]) => {
251
+ if (!predefinedParametersGlobMap[pathGlobs]) {
252
+ predefinedParametersGlobMap[pathGlobs] = {
253
+ paths: [],
254
+ parameters: [],
255
+ errors: [`No matching paths found for '${pathGlobs}'`],
256
+ };
257
+ }
258
+ });
259
+
260
+ return predefinedParametersGlobMap;
261
+ }
262
+
263
+ function findPredefinedOperationParameter(
264
+ parameterSchemaToPredefine: { in: string; name: string },
265
+ operationParameters: Array<ParameterObject>
266
+ ) {
267
+ return operationParameters.find(
268
+ (operationParameter) =>
269
+ operationParameter.in === parameterSchemaToPredefine.in &&
270
+ operationParameter.name === parameterSchemaToPredefine.name
271
+ );
272
+ }
273
+
274
+ function shallowEqualParameterTypes(a: ParameterObject, b: ParameterObject) {
275
+ if ('schema' in a || 'schema' in b)
276
+ return 'schema' in a && 'schema' in b && a.schema?.type === b.schema?.type;
277
+ }
278
+
279
+ function assertIsPathItemObject(
280
+ pathItem: PathItemObject | ReferenceObject
281
+ ): asserts pathItem is PathItemObject {
282
+ if ('$ref' in pathItem) {
283
+ throw new Error(
284
+ `Expected a PathItemObject, but got a ReferenceObject: ${pathItem}`
285
+ );
286
+ }
287
+ }
288
+
289
+ export function assertIsOperationObject(
290
+ operationItem: OperationObject | ReferenceObject
291
+ ): asserts operationItem is OperationObject {
292
+ if ('$ref' in operationItem) {
293
+ throw new Error(
294
+ `Expected a OperationObject, but got a ReferenceObject: ${operationItem}`
295
+ );
296
+ }
297
+ }
298
+
299
+ export function assertIsParameterObjects(
300
+ parameterObjects: Array<ParameterObject | ReferenceObject>
301
+ ): asserts parameterObjects is Array<ParameterObject> {
302
+ parameterObjects.forEach((parameterObject) => {
303
+ if ('$ref' in parameterObject) {
304
+ throw new Error(
305
+ `Expected a ParameterObject, but got a ReferenceObject: ${parameterObject}`
306
+ );
307
+ }
308
+ });
309
+ }
310
+
311
+ export { parseOperationPredefinedParametersOption };