Skip to content

Commit 175d90d

Browse files
committed
Improve typescript export process
1 parent 0af4534 commit 175d90d

File tree

3 files changed

+70
-89
lines changed

3 files changed

+70
-89
lines changed

Containers/generate.js

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
const fs = require('fs');
22
const { exec } = require('child_process');
33

4-
// Generate the base TypeScript file from OpenAPI using the --enum flag
5-
exec('npx openapi-typescript /app/api.json -o /app/models.ts --enum', (error, stdout, stderr) => {
4+
// Generate the base TypeScript file from OpenAPI using the --enum flag and --transform to flatten refs
5+
exec('npx openapi-typescript /app/api.json -o /app/models.ts --enum --root-types --root-types-no-schema-prefix --export-type', (error, stdout, stderr) => {
66
if (error) {
77
console.error('Error generating TypeScript types:', error);
88
console.error(stderr);
@@ -16,23 +16,6 @@ exec('npx openapi-typescript /app/api.json -o /app/models.ts --enum', (error, st
1616
// Export all schemas from the OpenAPI specification
1717
export * from './models';
1818
export { components } from './models';
19-
20-
// Re-export schemas as top-level types for easier importing
21-
import { components } from './models';
22-
export type Schemas = components['schemas'];
23-
24-
// Make each schema available as a top-level export
25-
type SchemaNames = keyof components['schemas'];
26-
type ExtractSchema<K extends SchemaNames> = components['schemas'][K];
27-
28-
${Object.keys(require('/app/api.json').components.schemas)
29-
.filter(schemaName => {
30-
const schema = require('/app/api.json').components.schemas[schemaName];
31-
return schema.type !== 'string' || !schema.enum;
32-
})
33-
.map(schemaName => `export type ${schemaName} = ExtractSchema<'${schemaName}'>`)
34-
.join('\n')
35-
}
3619
`;
3720

3821
fs.writeFileSync('/app/index.ts', indexContent);

typescript/src/index.ts

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2,69 +2,3 @@
22
// Export all schemas from the OpenAPI specification
33
export * from './models';
44
export { components } from './models';
5-
6-
// Re-export schemas as top-level types for easier importing
7-
import { components } from './models';
8-
export type Schemas = components['schemas'];
9-
10-
// Make each schema available as a top-level export
11-
type SchemaNames = keyof components['schemas'];
12-
type ExtractSchema<K extends SchemaNames> = components['schemas'][K];
13-
14-
export type AuthenticationErrorResponseContent = ExtractSchema<'AuthenticationErrorResponseContent'>
15-
export type ContractSummaryItem = ExtractSchema<'ContractSummaryItem'>
16-
export type ContractVariable = ExtractSchema<'ContractVariable'>
17-
export type DeleteContractRequestContent = ExtractSchema<'DeleteContractRequestContent'>
18-
export type DeleteContractResponseContent = ExtractSchema<'DeleteContractResponseContent'>
19-
export type EQModeCard = ExtractSchema<'EQModeCard'>
20-
export type EQModeData = ExtractSchema<'EQModeData'>
21-
export type EQModeItem = ExtractSchema<'EQModeItem'>
22-
export type EmptyStructure = ExtractSchema<'EmptyStructure'>
23-
export type EqCardUniqueData = ExtractSchema<'EqCardUniqueData'>
24-
export type EqDurationCard = ExtractSchema<'EqDurationCard'>
25-
export type EqLegalCard = ExtractSchema<'EqLegalCard'>
26-
export type EqMoneyCard = ExtractSchema<'EqMoneyCard'>
27-
export type EqOwnershipCard = ExtractSchema<'EqOwnershipCard'>
28-
export type EqResponsibilitesCard = ExtractSchema<'EqResponsibilitesCard'>
29-
export type EqSection = ExtractSchema<'EqSection'>
30-
export type ExposeTypesResponseContent = ExtractSchema<'ExposeTypesResponseContent'>
31-
export type FixedTermValue = ExtractSchema<'FixedTermValue'>
32-
export type FixedValueTermInference = ExtractSchema<'FixedValueTermInference'>
33-
export type GetContractReadURLRequestContent = ExtractSchema<'GetContractReadURLRequestContent'>
34-
export type GetContractReadURLResponseContent = ExtractSchema<'GetContractReadURLResponseContent'>
35-
export type GetContractRequestContent = ExtractSchema<'GetContractRequestContent'>
36-
export type GetContractResponseContent = ExtractSchema<'GetContractResponseContent'>
37-
export type GetProfilePictureRequestContent = ExtractSchema<'GetProfilePictureRequestContent'>
38-
export type GetProfilePictureResponseContent = ExtractSchema<'GetProfilePictureResponseContent'>
39-
export type GetProfileRequestContent = ExtractSchema<'GetProfileRequestContent'>
40-
export type GetProfileResponseContent = ExtractSchema<'GetProfileResponseContent'>
41-
export type GetSpecialContractRequestContent = ExtractSchema<'GetSpecialContractRequestContent'>
42-
export type GetSpecialContractResponseContent = ExtractSchema<'GetSpecialContractResponseContent'>
43-
export type GetTTSURLsRequestContent = ExtractSchema<'GetTTSURLsRequestContent'>
44-
export type GetTTSURLsResponseContent = ExtractSchema<'GetTTSURLsResponseContent'>
45-
export type GetUploadURLRequestContent = ExtractSchema<'GetUploadURLRequestContent'>
46-
export type GetUploadURLResponseContent = ExtractSchema<'GetUploadURLResponseContent'>
47-
export type InternalServerErrorResponseContent = ExtractSchema<'InternalServerErrorResponseContent'>
48-
export type IqSection = ExtractSchema<'IqSection'>
49-
export type ListContractsResponseContent = ExtractSchema<'ListContractsResponseContent'>
50-
export type ListSpecialContractsResponseContent = ExtractSchema<'ListSpecialContractsResponseContent'>
51-
export type PingResponseContent = ExtractSchema<'PingResponseContent'>
52-
export type PresignedPostData = ExtractSchema<'PresignedPostData'>
53-
export type ProcessingIncompleteErrorResponseContent = ExtractSchema<'ProcessingIncompleteErrorResponseContent'>
54-
export type QA = ExtractSchema<'QA'>
55-
export type QASection = ExtractSchema<'QASection'>
56-
export type ResourceNotFoundErrorResponseContent = ExtractSchema<'ResourceNotFoundErrorResponseContent'>
57-
export type ShareContractRequestContent = ExtractSchema<'ShareContractRequestContent'>
58-
export type ShareContractResponseContent = ExtractSchema<'ShareContractResponseContent'>
59-
export type SharedUserDetails = ExtractSchema<'SharedUserDetails'>
60-
export type SimpleTermDescription = ExtractSchema<'SimpleTermDescription'>
61-
export type TTSPresignedUrlMap = ExtractSchema<'TTSPresignedUrlMap'>
62-
export type Term = ExtractSchema<'Term'>
63-
export type UpdateContractRequestContent = ExtractSchema<'UpdateContractRequestContent'>
64-
export type UpdateContractResponseContent = ExtractSchema<'UpdateContractResponseContent'>
65-
export type UpdateProfileRequestContent = ExtractSchema<'UpdateProfileRequestContent'>
66-
export type UpdateProfileResponseContent = ExtractSchema<'UpdateProfileResponseContent'>
67-
export type UploadProfilePictureRequestContent = ExtractSchema<'UploadProfilePictureRequestContent'>
68-
export type UploadProfilePictureResponseContent = ExtractSchema<'UploadProfilePictureResponseContent'>
69-
export type UserProfile = ExtractSchema<'UserProfile'>
70-
export type ValidationErrorResponseContent = ExtractSchema<'ValidationErrorResponseContent'>

typescript/src/models.ts

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Do not make direct changes to the file.
44
*/
55

6-
export interface paths {
6+
export type paths = {
77
"/deleteContract": {
88
parameters: {
99
query?: never;
@@ -260,9 +260,9 @@ export interface paths {
260260
patch?: never;
261261
trace?: never;
262262
};
263-
}
263+
};
264264
export type webhooks = Record<string, never>;
265-
export interface components {
265+
export type components = {
266266
schemas: {
267267
/** @enum {string} */
268268
AccountType: AccountType;
@@ -572,7 +572,71 @@ export interface components {
572572
requestBodies: never;
573573
headers: never;
574574
pathItems: never;
575-
}
575+
};
576+
export type AccountType = components['schemas']['AccountType'];
577+
export type AuthenticationErrorResponseContent = components['schemas']['AuthenticationErrorResponseContent'];
578+
export type ContractStatus = components['schemas']['ContractStatus'];
579+
export type ContractSummaryItem = components['schemas']['ContractSummaryItem'];
580+
export type ContractType = components['schemas']['ContractType'];
581+
export type ContractVariable = components['schemas']['ContractVariable'];
582+
export type ContractVariableType = components['schemas']['ContractVariableType'];
583+
export type DeleteContractRequestContent = components['schemas']['DeleteContractRequestContent'];
584+
export type DeleteContractResponseContent = components['schemas']['DeleteContractResponseContent'];
585+
export type DurationType = components['schemas']['DurationType'];
586+
export type EqModeCard = components['schemas']['EQModeCard'];
587+
export type EqModeData = components['schemas']['EQModeData'];
588+
export type EqModeItem = components['schemas']['EQModeItem'];
589+
export type EmptyStructure = components['schemas']['EmptyStructure'];
590+
export type EqCardKey = components['schemas']['EqCardKey'];
591+
export type EqCardType = components['schemas']['EqCardType'];
592+
export type EqCardUniqueData = components['schemas']['EqCardUniqueData'];
593+
export type EqDurationCard = components['schemas']['EqDurationCard'];
594+
export type EqLegalCard = components['schemas']['EqLegalCard'];
595+
export type EqMoneyCard = components['schemas']['EqMoneyCard'];
596+
export type EqOwnershipCard = components['schemas']['EqOwnershipCard'];
597+
export type EqResponsibilitesCard = components['schemas']['EqResponsibilitesCard'];
598+
export type EqSection = components['schemas']['EqSection'];
599+
export type ExposeTypesResponseContent = components['schemas']['ExposeTypesResponseContent'];
600+
export type FixedTermValue = components['schemas']['FixedTermValue'];
601+
export type FixedValueTermInference = components['schemas']['FixedValueTermInference'];
602+
export type GetContractReadUrlRequestContent = components['schemas']['GetContractReadURLRequestContent'];
603+
export type GetContractReadUrlResponseContent = components['schemas']['GetContractReadURLResponseContent'];
604+
export type GetContractRequestContent = components['schemas']['GetContractRequestContent'];
605+
export type GetContractResponseContent = components['schemas']['GetContractResponseContent'];
606+
export type GetProfilePictureRequestContent = components['schemas']['GetProfilePictureRequestContent'];
607+
export type GetProfilePictureResponseContent = components['schemas']['GetProfilePictureResponseContent'];
608+
export type GetProfileRequestContent = components['schemas']['GetProfileRequestContent'];
609+
export type GetProfileResponseContent = components['schemas']['GetProfileResponseContent'];
610+
export type GetSpecialContractRequestContent = components['schemas']['GetSpecialContractRequestContent'];
611+
export type GetSpecialContractResponseContent = components['schemas']['GetSpecialContractResponseContent'];
612+
export type GetTtsurLsRequestContent = components['schemas']['GetTTSURLsRequestContent'];
613+
export type GetTtsurLsResponseContent = components['schemas']['GetTTSURLsResponseContent'];
614+
export type GetUploadUrlRequestContent = components['schemas']['GetUploadURLRequestContent'];
615+
export type GetUploadUrlResponseContent = components['schemas']['GetUploadURLResponseContent'];
616+
export type InternalServerErrorResponseContent = components['schemas']['InternalServerErrorResponseContent'];
617+
export type IqSection = components['schemas']['IqSection'];
618+
export type ListContractsResponseContent = components['schemas']['ListContractsResponseContent'];
619+
export type ListSpecialContractsResponseContent = components['schemas']['ListSpecialContractsResponseContent'];
620+
export type PingResponseContent = components['schemas']['PingResponseContent'];
621+
export type PresignedPostData = components['schemas']['PresignedPostData'];
622+
export type ProcessingIncompleteErrorResponseContent = components['schemas']['ProcessingIncompleteErrorResponseContent'];
623+
export type Qa = components['schemas']['QA'];
624+
export type QaSection = components['schemas']['QASection'];
625+
export type ResourceNotFoundErrorResponseContent = components['schemas']['ResourceNotFoundErrorResponseContent'];
626+
export type ShareContractRequestContent = components['schemas']['ShareContractRequestContent'];
627+
export type ShareContractResponseContent = components['schemas']['ShareContractResponseContent'];
628+
export type SharedUserDetails = components['schemas']['SharedUserDetails'];
629+
export type SimpleTermDescription = components['schemas']['SimpleTermDescription'];
630+
export type TtsPresignedUrlMap = components['schemas']['TTSPresignedUrlMap'];
631+
export type Term = components['schemas']['Term'];
632+
export type UpdateContractRequestContent = components['schemas']['UpdateContractRequestContent'];
633+
export type UpdateContractResponseContent = components['schemas']['UpdateContractResponseContent'];
634+
export type UpdateProfileRequestContent = components['schemas']['UpdateProfileRequestContent'];
635+
export type UpdateProfileResponseContent = components['schemas']['UpdateProfileResponseContent'];
636+
export type UploadProfilePictureRequestContent = components['schemas']['UploadProfilePictureRequestContent'];
637+
export type UploadProfilePictureResponseContent = components['schemas']['UploadProfilePictureResponseContent'];
638+
export type UserProfile = components['schemas']['UserProfile'];
639+
export type ValidationErrorResponseContent = components['schemas']['ValidationErrorResponseContent'];
576640
export type $defs = Record<string, never>;
577641
export interface operations {
578642
DeleteContract: {

0 commit comments

Comments
 (0)