@openapi-qraft/openapi-typescript-plugin 1.1.0-beta.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @openapi-qraft/openapi-typescript
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 0df334b: Added `--explicit-component-exports` option to export API components as separate type aliases alongside `components` interface by [@EcksDy](https://github.com/EcksDy)
8
+ - 787f568: Updated `openapi-typescript` to `^7.3.0`.
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies [77f0812]
13
+ - Updated dependencies [7430754]
14
+ - Updated dependencies [346a408]
15
+ - Updated dependencies [787f568]
16
+ - @openapi-qraft/plugin@1.14.0
17
+
18
+ ## 1.1.0-beta.5
19
+
20
+ ### Minor Changes
21
+
22
+ - 0df334b: Added `--explicit-component-exports` option to export API components as separate type aliases alongside `components` interface by [@EcksDy](https://github.com/EcksDy)
23
+
24
+ ### Patch Changes
25
+
26
+ - @openapi-qraft/plugin@1.14.0-beta.5
27
+
3
28
  ## 1.1.0-beta.4
4
29
 
5
30
  ### Patch Changes
@@ -7,6 +7,7 @@ export declare function generateSchemaTypes(schema: string | URL | OpenAPI3 | Re
7
7
  silent: boolean;
8
8
  args: Pick<OpenAPITSOptions, 'additionalProperties' | 'alphabetize' | 'arrayLength' | 'defaultNonNullable' | 'emptyObjectsUnknown' | 'enum' | 'enumValues' | 'dedupeEnums' | 'excludeDeprecated' | 'exportType' | 'immutable' | 'pathParamsAsTypes' | 'propertiesRequiredByDefault'> & {
9
9
  blobFromBinary?: boolean;
10
+ explicitComponentExports?: boolean;
10
11
  };
11
12
  }): Promise<string>;
12
13
  //# sourceMappingURL=generateSchemaTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateSchemaTypes.d.ts","sourceRoot":"","sources":["../src/generateSchemaTypes.ts"],"names":[],"mappings":";;;AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKrE,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,EACnD,EACE,MAAM,EACN,IAAI,GACL,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,IAAI,CACR,gBAAgB,EACd,sBAAsB,GACtB,aAAa,GACb,aAAa,GACb,oBAAoB,GACpB,qBAAqB,GACrB,MAAM,GACN,YAAY,GACZ,aAAa,GACb,mBAAmB,GACnB,YAAY,GACZ,WAAW,GACX,mBAAmB,GACnB,6BAA6B,CAChC,GAAG;QACF,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;CACH,mBAqBF"}
1
+ {"version":3,"file":"generateSchemaTypes.d.ts","sourceRoot":"","sources":["../src/generateSchemaTypes.ts"],"names":[],"mappings":";;;AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMrE,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,EACnD,EACE,MAAM,EACN,IAAI,GACL,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,IAAI,CACR,gBAAgB,EACd,sBAAsB,GACtB,aAAa,GACb,aAAa,GACb,oBAAoB,GACpB,qBAAqB,GACrB,MAAM,GACN,YAAY,GACZ,aAAa,GACb,mBAAmB,GACnB,YAAY,GACZ,WAAW,GACX,mBAAmB,GACnB,6BAA6B,CAChC,GAAG;QACF,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;KACpC,CAAC;CACH,mBAwBF"}
@@ -1,8 +1,9 @@
1
1
  import { createConfig } from '@redocly/openapi-core';
2
2
  import openapiTS, { astToString } from 'openapi-typescript';
3
3
  import ts from 'typescript';
4
+ import { createExportsForComponentSchemas } from './lib/createExportsForComponentSchemas.js';
4
5
  export async function generateSchemaTypes(schema, { silent, args, }) {
5
- return astToString(await openapiTS(schema, {
6
+ const ast = await openapiTS(schema, {
6
7
  transform: args.blobFromBinary ? transformFormatBinary : undefined,
7
8
  additionalProperties: args.additionalProperties,
8
9
  alphabetize: args.alphabetize,
@@ -18,7 +19,10 @@ export async function generateSchemaTypes(schema, { silent, args, }) {
18
19
  redocly: await createConfig({}, { extends: ['minimal'] }),
19
20
  propertiesRequiredByDefault: args.propertiesRequiredByDefault,
20
21
  silent,
21
- }));
22
+ });
23
+ if (args.explicitComponentExports)
24
+ return astToString(ast.concat(createExportsForComponentSchemas(ast)));
25
+ return astToString(ast);
22
26
  }
23
27
  function transformFormatBinary(schemaObject) {
24
28
  if (schemaObject.format !== 'binary')
@@ -1 +1 @@
1
- {"version":3,"file":"generateSchemaTypes.js","sourceRoot":"","sources":["../src/generateSchemaTypes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,SAAS,EAAE,EAAE,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAmD,EACnD,EACE,MAAM,EACN,IAAI,GAqBL;IAED,OAAO,WAAW,CAChB,MAAM,SAAS,CAAC,MAAM,EAAE;QACtB,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QAClE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,8EAA8E;QAC9E,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,OAAO,EAAE,MAAM,YAAY,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;QAC7D,MAAM;KACP,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,YAA0B;IACvD,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO;IAE7C,OAAO;QACL,MAAM,EAAE,YAAY,CAAC,QAAQ;YAC3B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBAC7B,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,SAAS,CACV;gBACD,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;aAC1D,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,SAAS,CACV;QACL,0FAA0F;QAC1F,aAAa,EAAE,KAAK;KACrB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"generateSchemaTypes.js","sourceRoot":"","sources":["../src/generateSchemaTypes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,SAAS,EAAE,EAAE,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,gCAAgC,EAAE,MAAM,2CAA2C,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAmD,EACnD,EACE,MAAM,EACN,IAAI,GAsBL;IAED,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE;QAClC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QAClE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,8EAA8E;QAC9E,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,OAAO,EAAE,MAAM,YAAY,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;QAC7D,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,wBAAwB;QAC/B,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAExE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,qBAAqB,CAAC,YAA0B;IACvD,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO;IAE7C,OAAO;QACL,MAAM,EAAE,YAAY,CAAC,QAAQ;YAC3B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBAC7B,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,SAAS,CACV;gBACD,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;aAC1D,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,SAAS,CACV;QACL,0FAA0F;QAC1F,aAAa,EAAE,KAAK;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import ts from 'typescript';
2
+ export declare function createExportsForComponentSchemas(ast: ts.Node[]): ts.TypeAliasDeclaration[];
3
+ export declare function getExportedNames(ast: ts.Node[]): string[];
4
+ //# sourceMappingURL=createExportsForComponentSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExportsForComponentSchemas.d.ts","sourceRoot":"","sources":["../../src/lib/createExportsForComponentSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,6BA6C9D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,YAa9C"}
@@ -0,0 +1,40 @@
1
+ import ts from 'typescript';
2
+ export function createExportsForComponentSchemas(ast) {
3
+ const componentsInterface = ast
4
+ .filter(ts.isInterfaceDeclaration)
5
+ .find((node) => node.name.text === 'components');
6
+ if (!componentsInterface)
7
+ return [];
8
+ const componentSchemas = componentsInterface.members
9
+ .filter(ts.isPropertySignature)
10
+ .find((node) => ts.isIdentifier(node.name) && node.name.text === 'schemas');
11
+ if (!componentSchemas)
12
+ return [];
13
+ const exportedNames = getExportedNames(ast);
14
+ const schemaNames = componentSchemas.type &&
15
+ ts.isTypeLiteralNode(componentSchemas.type) &&
16
+ componentSchemas.type.members.reduce((acc, node) => {
17
+ if (ts.isPropertySignature(node) && ts.isIdentifier(node.name)) {
18
+ const componentName = node.name.text;
19
+ if (!exportedNames.includes(componentName))
20
+ acc.push(componentName);
21
+ }
22
+ return acc;
23
+ }, []);
24
+ if (!schemaNames)
25
+ return [];
26
+ const exportStatements = schemaNames.map((name) => {
27
+ return ts.factory.createTypeAliasDeclaration([ts.factory.createToken(ts.SyntaxKind.ExportKeyword)], ts.factory.createIdentifier(name), undefined, ts.factory.createIndexedAccessTypeNode(ts.factory.createIndexedAccessTypeNode(ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('components'), undefined), ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral('schemas'))), ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(name))));
28
+ });
29
+ return exportStatements;
30
+ }
31
+ export function getExportedNames(ast) {
32
+ return ast.reduce((acc, node) => {
33
+ if (ts.isInterfaceDeclaration(node) &&
34
+ ts.isIdentifier(node.name) &&
35
+ node.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword))
36
+ acc.push(node.name.text);
37
+ return acc;
38
+ }, []);
39
+ }
40
+ //# sourceMappingURL=createExportsForComponentSchemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExportsForComponentSchemas.js","sourceRoot":"","sources":["../../src/lib/createExportsForComponentSchemas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAQlF,eAAO,MAAM,MAAM,EAAE,kBAuIpB,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,MAAM,UA0B7D"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAQlF,eAAO,MAAM,MAAM,EAAE,kBA2IpB,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,MAAM,UA0B7D"}
package/dist/plugin.js CHANGED
@@ -22,6 +22,7 @@ export const plugin = {
22
22
  .option('--alphabetize', 'Sort object keys alphabetically')
23
23
  .option('--exclude-deprecated', 'Exclude deprecated types')
24
24
  .option('--no-blob-from-binary', 'If this option is enabled, binary format fields will not be converted to Blob types, preserving the native representation')
25
+ .option('--explicit-component-exports', 'Enabling this option will export API components as separate type aliases, alongside `components` interface')
25
26
  .action(async ({ output, args, spinner, schema }, resolve) => {
26
27
  spinner.text = 'Generating OpenAPI Document Types';
27
28
  const code = await generateSchemaTypes(schema, {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,uCAAuC,CAAC;AAE/C,MAAM,CAAC,MAAM,MAAM,GAAuB;IACxC,YAAY,CAAC,OAAO;QAClB,OAAO;aACJ,WAAW,CACV,oIAAoI,CACrI;aACA,MAAM,CACL,kCAAkC,EAClC,mDAAmD,EACnD,gCAAgC,EAChC,WAAW,CACZ;aACA,MAAM,CAAC,QAAQ,EAAE,wCAAwC,CAAC;aAC1D,MAAM,CAAC,eAAe,EAAE,+BAA+B,CAAC;aACxD,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;aAClE,MAAM,CACL,mBAAmB,EACnB,gDAAgD,CACjD;aACA,MAAM,CAAC,aAAa,EAAE,yBAAyB,CAAC;aAChD,MAAM,CACL,yBAAyB,EACzB,gEAAgE,CACjE;aACA,MAAM,CACL,yBAAyB,EACzB,yEAAyE,CAC1E;aACA,MAAM,CACL,wBAAwB,EACxB,4EAA4E,CAC7E;aACA,MAAM,CACL,kCAAkC,EAClC,2EAA2E,CAC5E;aACA,MAAM,CACL,gBAAgB,EAChB,iDAAiD,CAClD;aACA,MAAM,CACL,wBAAwB,EACxB,yCAAyC,CAC1C;aACA,MAAM,CAAC,eAAe,EAAE,iCAAiC,CAAC;aAC1D,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;aAC1D,MAAM,CACL,uBAAuB,EACvB,2HAA2H,CAC5H;aACA,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE;YAC3D,OAAO,CAAC,IAAI,GAAG,mCAAmC,CAAC;YAEnD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE;gBAC7C,IAAI;gBACJ,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YAEH,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YAEpD,OAAO,CAAC;gBACN;oBACE,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,GAAG,CAAC;oBACpD,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,IAAI;iBAC7D;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IACD,gBAAgB,CAAC,OAAO,EAAE,OAAO;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAAE,OAAO;QAEtD,4DAA4D;QAC5D,OAAO,CAAC,OAAO;aACZ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,wBAAwB,CAAC;YACtE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAE/B,8DAA8D;QAC9D,OAAO,CAAC,OAAO;aACZ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,OAAO,MAAM,CAAC,aAAa,EAAE,KAAK,oBAAoB,CAAC;QACzD,CAAC,CAAC;YACF,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAElB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;YACxC,mDAAmD;YACnD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACtD,IAAI,oBAAoB,GAAG,WAAW,CAAC,cAAc,CACnD,sBAAsB,CACvB,CAAC;gBAEF,IACE,WAAW,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,SAAS,EACtE,CAAC;oBACD,oBAAoB,GAAG,oBAAoB,CAAC,KAAK,CAC/C,CAAC,EACD,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAClC,CAAC;gBACJ,CAAC;gBAED,oDAAoD;gBACpD,WAAW,CAAC,cAAc,CACxB,wBAAwB,EACxB,4BAA4B,CAC1B,oBAAoB,EACpB,WAAW,CAAC,cAAc,CAAC,0BAA0B,CAAC,CACvD,CACF,CAAC;YACJ,CAAC;YAED,MAAM,sBAAsB,GAAG,WAAW,CAAC,cAAc,CACvD,wBAAwB,CACzB,CAAC;YAEF,qEAAqE;YACrE,IACE,WAAW,CAAC,cAAc,CAAC,0BAA0B,CAAC;gBACtD,WAAW;qBACR,cAAc,CAAC,sBAAsB,CAAC;oBACvC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC;gBACvB,sBAAsB;gBACtB,CAAC,sBAAsB,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAC5C,CAAC;gBACD,MAAM,IAAI,cAAc,CACtB,CAAC,EACD,qCAAqC,EACrC,kJAAkJ,CACnJ,CAAC;YACJ,CAAC;YAED,2CAA2C;YAC3C,IAAI,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC/D,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,KAAa;IAC5D,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,cAAc,CACtB,CAAC,EACD,8BAA8B,EAC9B,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,cAAc,CACtB,CAAC,EACD,8BAA8B,EAC9B,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,cAAc,CACtB,CAAC,EACD,8BAA8B,EAC9B,wDAAwD,CACzD,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openapi-qraft/openapi-typescript-plugin",
3
- "version": "1.1.0-beta.4",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "build": "tsc --project tsconfig.build.json",
@@ -26,7 +26,7 @@
26
26
  }
27
27
  },
28
28
  "dependencies": {
29
- "@openapi-qraft/plugin": "^1.14.0-beta.4",
29
+ "@openapi-qraft/plugin": "^1.14.0",
30
30
  "openapi-typescript": "^7.3.0",
31
31
  "typescript": "^5.3.3"
32
32
  },
@@ -3,6 +3,7 @@ import type { OpenAPI3, OpenAPITSOptions } from 'openapi-typescript';
3
3
  import { createConfig } from '@redocly/openapi-core';
4
4
  import openapiTS, { astToString, SchemaObject } from 'openapi-typescript';
5
5
  import ts from 'typescript';
6
+ import { createExportsForComponentSchemas } from './lib/createExportsForComponentSchemas.js';
6
7
 
7
8
  export async function generateSchemaTypes(
8
9
  schema: string | URL | OpenAPI3 | Readable | Buffer,
@@ -28,28 +29,32 @@ export async function generateSchemaTypes(
28
29
  | 'propertiesRequiredByDefault'
29
30
  > & {
30
31
  blobFromBinary?: boolean;
32
+ explicitComponentExports?: boolean;
31
33
  };
32
34
  }
33
35
  ) {
34
- return astToString(
35
- await openapiTS(schema, {
36
- transform: args.blobFromBinary ? transformFormatBinary : undefined,
37
- additionalProperties: args.additionalProperties,
38
- alphabetize: args.alphabetize,
39
- arrayLength: args.arrayLength,
40
- // contentNever: args.contentNever, // todo::add `contentNever` in new version
41
- defaultNonNullable: args.defaultNonNullable,
42
- emptyObjectsUnknown: args.emptyObjectsUnknown,
43
- enum: args.enum,
44
- excludeDeprecated: args.excludeDeprecated,
45
- exportType: args.exportType,
46
- immutable: args.immutable,
47
- pathParamsAsTypes: args.pathParamsAsTypes,
48
- redocly: await createConfig({}, { extends: ['minimal'] }),
49
- propertiesRequiredByDefault: args.propertiesRequiredByDefault,
50
- silent,
51
- })
52
- );
36
+ const ast = await openapiTS(schema, {
37
+ transform: args.blobFromBinary ? transformFormatBinary : undefined,
38
+ additionalProperties: args.additionalProperties,
39
+ alphabetize: args.alphabetize,
40
+ arrayLength: args.arrayLength,
41
+ // contentNever: args.contentNever, // todo::add `contentNever` in new version
42
+ defaultNonNullable: args.defaultNonNullable,
43
+ emptyObjectsUnknown: args.emptyObjectsUnknown,
44
+ enum: args.enum,
45
+ excludeDeprecated: args.excludeDeprecated,
46
+ exportType: args.exportType,
47
+ immutable: args.immutable,
48
+ pathParamsAsTypes: args.pathParamsAsTypes,
49
+ redocly: await createConfig({}, { extends: ['minimal'] }),
50
+ propertiesRequiredByDefault: args.propertiesRequiredByDefault,
51
+ silent,
52
+ });
53
+
54
+ if (args.explicitComponentExports)
55
+ return astToString(ast.concat(createExportsForComponentSchemas(ast)));
56
+
57
+ return astToString(ast);
53
58
  }
54
59
 
55
60
  function transformFormatBinary(schemaObject: SchemaObject) {
@@ -0,0 +1,63 @@
1
+ import ts from 'typescript';
2
+
3
+ export function createExportsForComponentSchemas(ast: ts.Node[]) {
4
+ const componentsInterface = ast
5
+ .filter(ts.isInterfaceDeclaration)
6
+ .find((node) => node.name.text === 'components');
7
+ if (!componentsInterface) return [];
8
+
9
+ const componentSchemas = componentsInterface.members
10
+ .filter(ts.isPropertySignature)
11
+ .find((node) => ts.isIdentifier(node.name) && node.name.text === 'schemas');
12
+ if (!componentSchemas) return [];
13
+
14
+ const exportedNames = getExportedNames(ast);
15
+ const schemaNames =
16
+ componentSchemas.type &&
17
+ ts.isTypeLiteralNode(componentSchemas.type) &&
18
+ componentSchemas.type.members.reduce<string[]>((acc, node) => {
19
+ if (ts.isPropertySignature(node) && ts.isIdentifier(node.name)) {
20
+ const componentName = node.name.text;
21
+ if (!exportedNames.includes(componentName)) acc.push(componentName);
22
+ }
23
+ return acc;
24
+ }, []);
25
+ if (!schemaNames) return [];
26
+
27
+ const exportStatements = schemaNames.map((name) => {
28
+ return ts.factory.createTypeAliasDeclaration(
29
+ [ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
30
+ ts.factory.createIdentifier(name),
31
+ undefined,
32
+ ts.factory.createIndexedAccessTypeNode(
33
+ ts.factory.createIndexedAccessTypeNode(
34
+ ts.factory.createTypeReferenceNode(
35
+ ts.factory.createIdentifier('components'),
36
+ undefined
37
+ ),
38
+ ts.factory.createLiteralTypeNode(
39
+ ts.factory.createStringLiteral('schemas')
40
+ )
41
+ ),
42
+ ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(name))
43
+ )
44
+ );
45
+ });
46
+
47
+ return exportStatements;
48
+ }
49
+
50
+ export function getExportedNames(ast: ts.Node[]) {
51
+ return ast.reduce<string[]>((acc, node) => {
52
+ if (
53
+ ts.isInterfaceDeclaration(node) &&
54
+ ts.isIdentifier(node.name) &&
55
+ node.modifiers?.some(
56
+ (modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword
57
+ )
58
+ )
59
+ acc.push(node.name.text);
60
+
61
+ return acc;
62
+ }, []);
63
+ }
package/src/plugin.ts CHANGED
@@ -58,6 +58,10 @@ export const plugin: QraftCommandPlugin = {
58
58
  '--no-blob-from-binary',
59
59
  'If this option is enabled, binary format fields will not be converted to Blob types, preserving the native representation'
60
60
  )
61
+ .option(
62
+ '--explicit-component-exports',
63
+ 'Enabling this option will export API components as separate type aliases, alongside `components` interface'
64
+ )
61
65
  .action(async ({ output, args, spinner, schema }, resolve) => {
62
66
  spinner.text = 'Generating OpenAPI Document Types';
63
67