@acrool/rtk-query-codegen-openapi 0.0.2-test.5 → 0.0.2-test.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/lib/index.d.mts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +111 -21
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +111 -21
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/generate.ts +128 -23
- package/src/types.ts +1 -0
package/README.md
CHANGED
|
@@ -23,4 +23,5 @@ This is a utility library meant to be used with [RTK Query](https://redux-toolki
|
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
yarn build && npx acrool-rtk-query-codegen-openapi ./rtk-query-codegen.config.ts
|
|
26
|
+
yarn build && npx acrool-rtk-query-codegen-openapi ./rtk-query-codegen-slice.config.ts
|
|
26
27
|
```
|
package/lib/index.d.mts
CHANGED
|
@@ -122,6 +122,7 @@ interface OutputFileOptions extends Partial<CommonOptions> {
|
|
|
122
122
|
* If passed as true it will generate TS enums instead of union of strings
|
|
123
123
|
*/
|
|
124
124
|
useEnumType?: boolean;
|
|
125
|
+
sharedTypesFile?: string;
|
|
125
126
|
}
|
|
126
127
|
type EndpointOverrides = {
|
|
127
128
|
pattern: EndpointMatcher;
|
package/lib/index.d.ts
CHANGED
|
@@ -122,6 +122,7 @@ interface OutputFileOptions extends Partial<CommonOptions> {
|
|
|
122
122
|
* If passed as true it will generate TS enums instead of union of strings
|
|
123
123
|
*/
|
|
124
124
|
useEnumType?: boolean;
|
|
125
|
+
sharedTypesFile?: string;
|
|
125
126
|
}
|
|
126
127
|
type EndpointOverrides = {
|
|
127
128
|
pattern: EndpointMatcher;
|
package/lib/index.js
CHANGED
|
@@ -453,7 +453,8 @@ async function generateApi(spec, {
|
|
|
453
453
|
includeDefault = false,
|
|
454
454
|
useEnumType = false,
|
|
455
455
|
mergeReadWriteOnly = false,
|
|
456
|
-
httpResolverOptions
|
|
456
|
+
httpResolverOptions,
|
|
457
|
+
sharedTypesFile
|
|
457
458
|
}) {
|
|
458
459
|
const v3Doc = v3DocCache[spec] ??= await getV3Doc(spec, httpResolverOptions);
|
|
459
460
|
const apiGen = new import_generate3.default(v3Doc, {
|
|
@@ -461,6 +462,42 @@ async function generateApi(spec, {
|
|
|
461
462
|
useEnumType,
|
|
462
463
|
mergeReadWriteOnly
|
|
463
464
|
});
|
|
465
|
+
if (sharedTypesFile) {
|
|
466
|
+
const components = v3Doc.components;
|
|
467
|
+
if (components) {
|
|
468
|
+
const resultFile2 = import_typescript4.default.createSourceFile(
|
|
469
|
+
"sharedTypes.ts",
|
|
470
|
+
"",
|
|
471
|
+
import_typescript4.default.ScriptTarget.Latest,
|
|
472
|
+
/*setParentNodes*/
|
|
473
|
+
false,
|
|
474
|
+
import_typescript4.default.ScriptKind.TS
|
|
475
|
+
);
|
|
476
|
+
const printer2 = import_typescript4.default.createPrinter({ newLine: import_typescript4.default.NewLineKind.LineFeed });
|
|
477
|
+
const typeDefinitions = Object.entries(components).flatMap(([_, componentDefs]) => {
|
|
478
|
+
return Object.entries(componentDefs).map(([name, def]) => {
|
|
479
|
+
const typeNode = apiGen.getTypeFromSchema(def);
|
|
480
|
+
return factory.createTypeAliasDeclaration(
|
|
481
|
+
[factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
|
|
482
|
+
factory.createIdentifier(name),
|
|
483
|
+
void 0,
|
|
484
|
+
typeNode
|
|
485
|
+
);
|
|
486
|
+
});
|
|
487
|
+
});
|
|
488
|
+
const output = printer2.printNode(
|
|
489
|
+
import_typescript4.default.EmitHint.Unspecified,
|
|
490
|
+
factory.createSourceFile(
|
|
491
|
+
typeDefinitions,
|
|
492
|
+
factory.createToken(import_typescript4.default.SyntaxKind.EndOfFileToken),
|
|
493
|
+
import_typescript4.default.NodeFlags.None
|
|
494
|
+
),
|
|
495
|
+
resultFile2
|
|
496
|
+
);
|
|
497
|
+
const fs2 = await import("node:fs/promises");
|
|
498
|
+
await fs2.writeFile(sharedTypesFile, output, "utf-8");
|
|
499
|
+
}
|
|
500
|
+
}
|
|
464
501
|
if (apiGen.spec.components?.schemas) {
|
|
465
502
|
apiGen.preprocessComponents(apiGen.spec.components.schemas);
|
|
466
503
|
}
|
|
@@ -490,14 +527,34 @@ async function generateApi(spec, {
|
|
|
490
527
|
apiFile = apiFile.replace(/\\/g, "/");
|
|
491
528
|
if (!apiFile.startsWith(".")) apiFile = `./${apiFile}`;
|
|
492
529
|
}
|
|
530
|
+
if (sharedTypesFile && sharedTypesFile.startsWith(".")) {
|
|
531
|
+
sharedTypesFile = import_node_path2.default.relative(import_node_path2.default.dirname(outputFile), sharedTypesFile);
|
|
532
|
+
sharedTypesFile = sharedTypesFile.replace(/\\/g, "/");
|
|
533
|
+
if (!sharedTypesFile.startsWith(".")) sharedTypesFile = `./${sharedTypesFile}`;
|
|
534
|
+
}
|
|
493
535
|
}
|
|
494
536
|
apiFile = apiFile.replace(/\.[jt]sx?$/, "");
|
|
537
|
+
if (sharedTypesFile) {
|
|
538
|
+
sharedTypesFile = sharedTypesFile.replace(/\.[jt]sx?$/, "");
|
|
539
|
+
}
|
|
495
540
|
return printer.printNode(
|
|
496
541
|
import_typescript4.default.EmitHint.Unspecified,
|
|
497
542
|
factory.createSourceFile(
|
|
498
543
|
[
|
|
499
544
|
generateImportNode(apiFile, { [apiImport]: "api" }),
|
|
500
545
|
generateImportNode("@acrool/react-fetcher", { IRestFulEndpointsQueryReturn: "IRestFulEndpointsQueryReturn" }),
|
|
546
|
+
...sharedTypesFile ? [
|
|
547
|
+
factory.createImportDeclaration(
|
|
548
|
+
void 0,
|
|
549
|
+
factory.createImportClause(
|
|
550
|
+
false,
|
|
551
|
+
void 0,
|
|
552
|
+
factory.createNamespaceImport(factory.createIdentifier("SharedTypes"))
|
|
553
|
+
),
|
|
554
|
+
factory.createStringLiteral(sharedTypesFile),
|
|
555
|
+
void 0
|
|
556
|
+
)
|
|
557
|
+
] : [],
|
|
501
558
|
...tag ? [generateTagTypes({ addTagTypes: extractAllTagTypes({ operationDefinitions }) })] : [],
|
|
502
559
|
generateCreateApiCall({
|
|
503
560
|
tag,
|
|
@@ -517,8 +574,7 @@ async function generateApi(spec, {
|
|
|
517
574
|
factory.createIdentifier(generatedApiName)
|
|
518
575
|
),
|
|
519
576
|
...Object.values(interfaces),
|
|
520
|
-
...apiGen.aliases,
|
|
521
|
-
...apiGen.enumAliases,
|
|
577
|
+
...sharedTypesFile ? [] : [...apiGen.aliases, ...apiGen.enumAliases],
|
|
522
578
|
...hooks ? [
|
|
523
579
|
generateReactHooks({
|
|
524
580
|
exportName: generatedApiName,
|
|
@@ -559,13 +615,45 @@ async function generateApi(spec, {
|
|
|
559
615
|
const isQuery2 = isQuery(verb, overrides);
|
|
560
616
|
const returnsJson = apiGen.getResponseType(responses) === "json";
|
|
561
617
|
let ResponseType = factory.createKeywordTypeNode(import_typescript4.default.SyntaxKind.UnknownKeyword);
|
|
618
|
+
function replaceReferences(schema) {
|
|
619
|
+
if (!schema) return factory.createKeywordTypeNode(import_typescript4.default.SyntaxKind.UnknownKeyword);
|
|
620
|
+
const refName = (0, import_generate3.getReferenceName)(schema);
|
|
621
|
+
if (refName && sharedTypesFile) {
|
|
622
|
+
return factory.createTypeReferenceNode(
|
|
623
|
+
factory.createQualifiedName(
|
|
624
|
+
factory.createIdentifier("SharedTypes"),
|
|
625
|
+
factory.createIdentifier(refName)
|
|
626
|
+
),
|
|
627
|
+
void 0
|
|
628
|
+
);
|
|
629
|
+
}
|
|
630
|
+
if (schema.type === "object" && schema.properties) {
|
|
631
|
+
const members = Object.entries(schema.properties).map(([key, value]) => {
|
|
632
|
+
return factory.createPropertySignature(
|
|
633
|
+
void 0,
|
|
634
|
+
factory.createIdentifier(key),
|
|
635
|
+
schema.required?.includes(key) ? void 0 : factory.createToken(import_typescript4.default.SyntaxKind.QuestionToken),
|
|
636
|
+
replaceReferences(value)
|
|
637
|
+
);
|
|
638
|
+
});
|
|
639
|
+
return factory.createTypeLiteralNode(members);
|
|
640
|
+
}
|
|
641
|
+
if (schema.type === "array" && schema.items) {
|
|
642
|
+
return factory.createArrayTypeNode(replaceReferences(schema.items));
|
|
643
|
+
}
|
|
644
|
+
return apiGen.getTypeFromSchema(schema);
|
|
645
|
+
}
|
|
562
646
|
if (returnsJson) {
|
|
563
647
|
const returnTypes = Object.entries(responses || {}).map(
|
|
564
|
-
([code, response]) =>
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
648
|
+
([code, response]) => {
|
|
649
|
+
const resolvedResponse = apiGen.resolve(response);
|
|
650
|
+
if (!resolvedResponse.content?.["application/json"]?.schema) {
|
|
651
|
+
return [code, resolvedResponse, factory.createKeywordTypeNode(import_typescript4.default.SyntaxKind.UndefinedKeyword)];
|
|
652
|
+
}
|
|
653
|
+
const schema = resolvedResponse.content["application/json"].schema;
|
|
654
|
+
const type = replaceReferences(schema);
|
|
655
|
+
return [code, resolvedResponse, type];
|
|
656
|
+
}
|
|
569
657
|
).filter(
|
|
570
658
|
([status, response]) => isDataResponse(status, includeDefault, apiGen.resolve(response), responses || {})
|
|
571
659
|
).filter(([_1, _2, type]) => type !== import_generate3.keywordType.void).map(
|
|
@@ -610,21 +698,10 @@ async function generateApi(spec, {
|
|
|
610
698
|
}
|
|
611
699
|
return name;
|
|
612
700
|
}
|
|
613
|
-
for (const param of parameters) {
|
|
614
|
-
const name = generateName(param.name, param.in);
|
|
615
|
-
queryArg[name] = {
|
|
616
|
-
origin: "param",
|
|
617
|
-
name,
|
|
618
|
-
originalName: param.name,
|
|
619
|
-
type: apiGen.getTypeFromSchema((0, import_generate3.isReference)(param) ? param : param.schema, void 0, "writeOnly"),
|
|
620
|
-
required: param.required,
|
|
621
|
-
param
|
|
622
|
-
};
|
|
623
|
-
}
|
|
624
701
|
if (requestBody) {
|
|
625
702
|
const body = apiGen.resolve(requestBody);
|
|
626
703
|
const schema = apiGen.getSchemaFromContent(body.content);
|
|
627
|
-
const type =
|
|
704
|
+
const type = replaceReferences(schema);
|
|
628
705
|
const schemaName = (0, import_lodash.default)(
|
|
629
706
|
type.name || (0, import_generate3.getReferenceName)(schema) || typeof schema === "object" && "title" in schema && schema.title || "body"
|
|
630
707
|
);
|
|
@@ -633,11 +710,24 @@ async function generateApi(spec, {
|
|
|
633
710
|
origin: "body",
|
|
634
711
|
name,
|
|
635
712
|
originalName: schemaName,
|
|
636
|
-
type
|
|
713
|
+
type,
|
|
637
714
|
required: true,
|
|
638
715
|
body
|
|
639
716
|
};
|
|
640
717
|
}
|
|
718
|
+
for (const param of parameters) {
|
|
719
|
+
const name = generateName(param.name, param.in);
|
|
720
|
+
const paramSchema = (0, import_generate3.isReference)(param) ? param : param.schema;
|
|
721
|
+
const type = replaceReferences(paramSchema);
|
|
722
|
+
queryArg[name] = {
|
|
723
|
+
origin: "param",
|
|
724
|
+
name,
|
|
725
|
+
originalName: param.name,
|
|
726
|
+
type,
|
|
727
|
+
required: param.required,
|
|
728
|
+
param
|
|
729
|
+
};
|
|
730
|
+
}
|
|
641
731
|
const propertyName = (name) => {
|
|
642
732
|
if (typeof name === "string") {
|
|
643
733
|
return (0, import_generate3.isValidIdentifier)(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/generate.ts","../src/utils/factory.ts","../src/codegen.ts","../src/generators/react-hooks.ts","../src/utils/capitalize.ts","../src/types.ts","../src/utils/getOperationDefinitions.ts","../src/utils/getV3Doc.ts","../src/utils/isQuery.ts","../src/utils/isValidUrl.ts","../src/utils/prettier.ts","../src/utils/removeUndefined.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { generateApi } from './generate';\nimport type { CommonOptions, ConfigFile, GenerationOptions, OutputFileOptions } from './types';\nimport { isValidUrl, prettify } from './utils';\nexport type { ConfigFile } from './types';\n\nconst require = createRequire(__filename);\n\nexport async function generateEndpoints(options: GenerationOptions): Promise<string | void> {\n const schemaLocation = options.schemaFile;\n\n const schemaAbsPath = isValidUrl(options.schemaFile)\n ? options.schemaFile\n : path.resolve(process.cwd(), schemaLocation);\n\n const sourceCode = await enforceOazapftsTsVersion(async () => {\n return generateApi(schemaAbsPath, options);\n });\n const { outputFile, prettierConfigFile } = options;\n if (outputFile) {\n fs.writeFileSync(\n path.resolve(process.cwd(), outputFile),\n await prettify(outputFile, sourceCode, prettierConfigFile)\n );\n } else {\n return await prettify(null, sourceCode, prettierConfigFile);\n }\n}\n\nexport function parseConfig(fullConfig: ConfigFile) {\n const outFiles: (CommonOptions & OutputFileOptions)[] = [];\n\n if ('outputFiles' in fullConfig) {\n const { outputFiles, ...commonConfig } = fullConfig;\n for (const [outputFile, specificConfig] of Object.entries(outputFiles)) {\n outFiles.push({\n ...commonConfig,\n ...specificConfig,\n outputFile,\n });\n }\n } else {\n outFiles.push(fullConfig);\n }\n return outFiles;\n}\n\n/**\n * Enforces `oazapfts` to use the same TypeScript version as this module itself uses.\n * That should prevent enums from running out of sync if both libraries use different TS versions.\n */\nfunction enforceOazapftsTsVersion<T>(cb: () => T): T {\n const ozTsPath = require.resolve('typescript', { paths: [require.resolve('oazapfts')] });\n const tsPath = require.resolve('typescript');\n const originalEntry = require.cache[ozTsPath];\n try {\n require.cache[ozTsPath] = require.cache[tsPath];\n return cb();\n } finally {\n if (originalEntry) {\n require.cache[ozTsPath] = originalEntry;\n } else {\n delete require.cache[ozTsPath];\n }\n }\n}\n","import camelCase from 'lodash.camelcase';\nimport path from 'node:path';\nimport ApiGenerator, {\n getOperationName as _getOperationName,\n getReferenceName,\n isReference,\n supportDeepObjects,\n createPropertyAssignment,\n createQuestionToken,\n isValidIdentifier,\n keywordType,\n} from 'oazapfts/generate';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport ts from 'typescript';\nimport type { ObjectPropertyDefinitions } from './codegen';\nimport { generateCreateApiCall, generateEndpointDefinition, generateImportNode, generateTagTypes } from './codegen';\nimport { generateReactHooks } from './generators/react-hooks';\nimport type {\n EndpointMatcher,\n EndpointOverrides,\n GenerationOptions,\n OperationDefinition,\n ParameterDefinition,\n ParameterMatcher,\n TextMatcher,\n} from './types';\nimport { capitalize, getOperationDefinitions, getV3Doc, removeUndefined, isQuery as testIsQuery } from './utils';\nimport { factory } from './utils/factory';\n\nconst generatedApiName = 'injectedRtkApi';\nconst v3DocCache: Record<string, OpenAPIV3.Document> = {};\n\nfunction defaultIsDataResponse(code: string, includeDefault: boolean) {\n if (includeDefault && code === 'default') {\n return true;\n }\n const parsedCode = Number(code);\n return !Number.isNaN(parsedCode) && parsedCode >= 200 && parsedCode < 300;\n}\n\nfunction getOperationName({ verb, path, operation }: Pick<OperationDefinition, 'verb' | 'path' | 'operation'>) {\n return _getOperationName(verb, path, operation.operationId);\n}\n\nfunction getTags({ verb, pathItem }: Pick<OperationDefinition, 'verb' | 'pathItem'>): string[] {\n return verb ? pathItem[verb]?.tags || [] : [];\n}\n\nfunction patternMatches(pattern?: TextMatcher) {\n const filters = Array.isArray(pattern) ? pattern : [pattern];\n return function matcher(operationName: string) {\n if (!pattern) return true;\n return filters.some((filter) =>\n typeof filter === 'string' ? filter === operationName : filter?.test(operationName)\n );\n };\n}\n\nfunction operationMatches(pattern?: EndpointMatcher) {\n const checkMatch = typeof pattern === 'function' ? pattern : patternMatches(pattern);\n return function matcher(operationDefinition: OperationDefinition) {\n if (!pattern) return true;\n const operationName = getOperationName(operationDefinition);\n return checkMatch(operationName, operationDefinition);\n };\n}\n\nfunction argumentMatches(pattern?: ParameterMatcher) {\n const checkMatch = typeof pattern === 'function' ? pattern : patternMatches(pattern);\n return function matcher(argumentDefinition: ParameterDefinition) {\n if (!pattern || argumentDefinition.in === 'path') return true;\n const argumentName = argumentDefinition.name;\n return checkMatch(argumentName, argumentDefinition);\n };\n}\n\nfunction withQueryComment<T extends ts.Node>(node: T, def: QueryArgDefinition, hasTrailingNewLine: boolean): T {\n const comment = def.origin === 'param' ? def.param.description : def.body.description;\n if (comment) {\n return ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* ${comment} `,\n hasTrailingNewLine\n );\n }\n return node;\n}\n\nexport function getOverrides(\n operation: OperationDefinition,\n endpointOverrides?: EndpointOverrides[]\n): EndpointOverrides | undefined {\n return endpointOverrides?.find((override) => operationMatches(override.pattern)(operation));\n}\n\nexport async function generateApi(\n spec: string,\n {\n apiFile,\n apiImport = 'api',\n exportName = 'enhancedApi',\n argSuffix = 'ApiArg',\n responseSuffix = 'ApiResponse',\n operationNameSuffix = '',\n hooks = false,\n tag = false,\n outputFile,\n isDataResponse = defaultIsDataResponse,\n filterEndpoints,\n endpointOverrides,\n unionUndefined,\n encodePathParams = false,\n encodeQueryParams = false,\n flattenArg = false,\n includeDefault = false,\n useEnumType = false,\n mergeReadWriteOnly = false,\n httpResolverOptions,\n }: GenerationOptions\n) {\n const v3Doc = (v3DocCache[spec] ??= await getV3Doc(spec, httpResolverOptions));\n\n const apiGen = new ApiGenerator(v3Doc, {\n unionUndefined,\n useEnumType,\n mergeReadWriteOnly,\n });\n\n // temporary workaround for https://github.com/oazapfts/oazapfts/issues/491\n if (apiGen.spec.components?.schemas) {\n apiGen.preprocessComponents(apiGen.spec.components.schemas);\n }\n\n const operationDefinitions = getOperationDefinitions(v3Doc).filter(operationMatches(filterEndpoints));\n\n const resultFile = ts.createSourceFile(\n 'someFileName.ts',\n '',\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS\n );\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n const interfaces: Record<string, ts.InterfaceDeclaration | ts.TypeAliasDeclaration> = {};\n function registerInterface(declaration: ts.InterfaceDeclaration | ts.TypeAliasDeclaration) {\n const name = declaration.name.escapedText.toString();\n if (name in interfaces) {\n throw new Error(`interface/type alias ${name} already registered`);\n }\n interfaces[name] = declaration;\n return declaration;\n }\n\n if (outputFile) {\n outputFile = path.resolve(process.cwd(), outputFile);\n if (apiFile.startsWith('.')) {\n apiFile = path.relative(path.dirname(outputFile), apiFile);\n apiFile = apiFile.replace(/\\\\/g, '/');\n if (!apiFile.startsWith('.')) apiFile = `./${apiFile}`;\n }\n }\n apiFile = apiFile.replace(/\\.[jt]sx?$/, '');\n\n return printer.printNode(\n ts.EmitHint.Unspecified,\n factory.createSourceFile(\n [\n generateImportNode(apiFile, { [apiImport]: 'api' }),\n generateImportNode('@acrool/react-fetcher', { IRestFulEndpointsQueryReturn: 'IRestFulEndpointsQueryReturn' }),\n ...(tag ? [generateTagTypes({ addTagTypes: extractAllTagTypes({ operationDefinitions }) })] : []),\n generateCreateApiCall({\n tag,\n endpointDefinitions: factory.createObjectLiteralExpression(\n operationDefinitions.map((operationDefinition) =>\n generateEndpoint({\n operationDefinition,\n overrides: getOverrides(operationDefinition, endpointOverrides),\n })\n ),\n true\n ),\n }),\n factory.createExportAssignment(\n undefined,\n undefined,\n factory.createIdentifier(generatedApiName)\n ),\n ...Object.values(interfaces),\n ...apiGen.aliases,\n ...apiGen.enumAliases,\n ...(hooks\n ? [\n generateReactHooks({\n exportName: generatedApiName,\n operationDefinitions,\n endpointOverrides,\n config: hooks,\n }),\n ]\n : []),\n ],\n factory.createToken(ts.SyntaxKind.EndOfFileToken),\n ts.NodeFlags.None\n ),\n resultFile\n );\n\n function extractAllTagTypes({ operationDefinitions }: { operationDefinitions: OperationDefinition[] }) {\n const allTagTypes = new Set<string>();\n\n for (const operationDefinition of operationDefinitions) {\n const { verb, pathItem } = operationDefinition;\n for (const tag of getTags({ verb, pathItem })) {\n allTagTypes.add(tag);\n }\n }\n return [...allTagTypes];\n }\n\n function generateEndpoint({\n operationDefinition,\n overrides,\n }: {\n operationDefinition: OperationDefinition;\n overrides?: EndpointOverrides;\n }) {\n const {\n verb,\n path,\n pathItem,\n operation,\n operation: { responses, requestBody },\n } = operationDefinition;\n const operationName = getOperationName({ verb, path, operation });\n const tags = tag ? getTags({ verb, pathItem }) : [];\n const isQuery = testIsQuery(verb, overrides);\n\n const returnsJson = apiGen.getResponseType(responses) === 'json';\n let ResponseType: ts.TypeNode = factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n if (returnsJson) {\n const returnTypes = Object.entries(responses || {})\n .map(\n ([code, response]) =>\n [\n code,\n apiGen.resolve(response),\n apiGen.getTypeFromResponse(response, 'readOnly') ||\n factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n ] as const\n )\n .filter(([status, response]) =>\n isDataResponse(status, includeDefault, apiGen.resolve(response), responses || {})\n )\n .filter(([_1, _2, type]) => type !== keywordType.void)\n .map(([code, response, type]) =>\n ts.addSyntheticLeadingComment(\n { ...type },\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* status ${code} ${response.description} `,\n false\n )\n );\n if (returnTypes.length > 0) {\n ResponseType = factory.createUnionTypeNode(returnTypes);\n }\n }\n\n const ResponseTypeName = factory.createTypeReferenceNode(\n registerInterface(\n factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n capitalize(operationName + operationNameSuffix + responseSuffix),\n undefined,\n ResponseType\n )\n ).name\n );\n\n const operationParameters = apiGen.resolveArray(operation.parameters);\n const pathItemParameters = apiGen\n .resolveArray(pathItem.parameters)\n .filter((pp) => !operationParameters.some((op) => op.name === pp.name && op.in === pp.in));\n\n const parameters = supportDeepObjects([...pathItemParameters, ...operationParameters])\n .filter(argumentMatches(overrides?.parameterFilter))\n .filter(param => param.in !== 'header');\n\n const allNames = parameters.map((p) => p.name);\n const queryArg: QueryArgDefinitions = {};\n function generateName(name: string, potentialPrefix: string) {\n const isPureSnakeCase = /^[a-zA-Z][a-zA-Z0-9_]*$/.test(name);\n // prefix with `query`, `path` or `body` if there are multiple paramters with the same name\n const hasNamingConflict = allNames.filter((n) => n === name).length > 1;\n if (hasNamingConflict) {\n name = `${potentialPrefix}_${name}`;\n }\n // convert to camelCase if the name is pure snake_case and there are no naming conflicts\n const camelCaseName = camelCase(name);\n if (isPureSnakeCase && !allNames.includes(camelCaseName)) {\n name = camelCaseName;\n }\n // if there are still any naming conflicts, prepend with underscore\n while (name in queryArg) {\n name = `_${name}`;\n }\n return name;\n }\n\n for (const param of parameters) {\n const name = generateName(param.name, param.in);\n queryArg[name] = {\n origin: 'param',\n name,\n originalName: param.name,\n type: apiGen.getTypeFromSchema(isReference(param) ? param : param.schema, undefined, 'writeOnly'),\n required: param.required,\n param,\n };\n }\n\n if (requestBody) {\n const body = apiGen.resolve(requestBody);\n const schema = apiGen.getSchemaFromContent(body.content);\n const type = apiGen.getTypeFromSchema(schema);\n const schemaName = camelCase(\n (type as any).name ||\n getReferenceName(schema) ||\n (typeof schema === 'object' && 'title' in schema && schema.title) ||\n 'body'\n );\n const name = generateName(schemaName in queryArg ? 'body' : schemaName, 'body');\n\n queryArg[name] = {\n origin: 'body',\n name,\n originalName: schemaName,\n type: apiGen.getTypeFromSchema(schema, undefined, 'writeOnly'),\n required: true,\n body,\n };\n }\n\n const propertyName = (name: string | ts.PropertyName): ts.PropertyName => {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name);\n }\n return name;\n };\n\n const queryArgValues = Object.values(queryArg);\n\n const isFlatArg = flattenArg && queryArgValues.length === 1;\n const QueryArg = factory.createTypeReferenceNode(\n registerInterface(\n factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n capitalize(operationName + operationNameSuffix + argSuffix),\n undefined,\n queryArgValues.length > 0\n ? isFlatArg\n ? withQueryComment(\n factory.createUnionTypeNode([\n queryArgValues[0].type,\n ...(!queryArgValues[0].required\n ? [factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)]\n : []),\n ]),\n queryArgValues[0],\n false\n )\n : factory.createTypeLiteralNode(\n queryArgValues.map((def) =>\n withQueryComment(\n factory.createPropertySignature(\n undefined,\n propertyName(def.name),\n createQuestionToken(!def.required),\n def.type\n ),\n def,\n true\n )\n )\n )\n : factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword)\n )\n ).name\n );\n\n return generateEndpointDefinition({\n operationName: operationNameSuffix ? capitalize(operationName + operationNameSuffix) : operationName,\n type: isQuery ? 'query' : 'mutation',\n Response: ResponseTypeName,\n QueryArg: factory.createTypeReferenceNode(\n factory.createIdentifier('IRestFulEndpointsQueryReturn'),\n [QueryArg]\n ),\n queryFn: generateQueryFn({\n operationDefinition,\n queryArg,\n isQuery,\n isFlatArg,\n encodePathParams,\n encodeQueryParams,\n }),\n extraEndpointsProps: isQuery\n ? generateQueryEndpointProps({ operationDefinition })\n : generateMutationEndpointProps({ operationDefinition }),\n tags,\n });\n }\n\n function generateQueryFn({\n operationDefinition,\n queryArg,\n isFlatArg,\n isQuery,\n encodePathParams,\n encodeQueryParams,\n }: {\n operationDefinition: OperationDefinition;\n queryArg: QueryArgDefinitions;\n isFlatArg: boolean;\n isQuery: boolean;\n encodePathParams: boolean;\n encodeQueryParams: boolean;\n }) {\n const { path, verb } = operationDefinition;\n\n const bodyParameter = Object.values(queryArg).find((def) => def.origin === 'body');\n\n const rootObject = factory.createIdentifier('queryArg');\n const variablesObject = factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables'));\n\n function pickParams(paramIn: string) {\n return Object.values(queryArg).filter((def) => def.origin === 'param' && def.param.in === paramIn);\n }\n\n function createObjectLiteralProperty(parameters: QueryArgDefinition[], propertyName: string) {\n if (parameters.length === 0) return undefined;\n\n const properties = parameters.map((param) => {\n const value = isFlatArg \n ? variablesObject \n : factory.createPropertyAccessExpression(variablesObject, factory.createIdentifier(param.name));\n\n const encodedValue =\n encodeQueryParams && param.param?.in === 'query'\n ? factory.createConditionalExpression(\n value,\n undefined,\n factory.createCallExpression(factory.createIdentifier('encodeURIComponent'), undefined, [\n factory.createCallExpression(factory.createIdentifier('String'), undefined, [value]),\n ]),\n undefined,\n factory.createIdentifier('undefined')\n )\n : value;\n\n return createPropertyAssignment(param.originalName, encodedValue);\n });\n\n return factory.createPropertyAssignment(\n factory.createIdentifier(propertyName),\n factory.createObjectLiteralExpression(properties, true)\n );\n }\n\n return factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, rootObject, undefined, undefined, undefined)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(\n factory.createObjectLiteralExpression(\n [\n factory.createPropertyAssignment(\n factory.createIdentifier('url'),\n generatePathExpression(path, pickParams('path'), variablesObject, isFlatArg, encodePathParams)\n ),\n isQuery && verb.toUpperCase() === 'GET'\n ? undefined\n : factory.createPropertyAssignment(\n factory.createIdentifier('method'),\n factory.createStringLiteral(verb.toUpperCase())\n ),\n bodyParameter === undefined\n ? undefined\n : factory.createPropertyAssignment(\n factory.createIdentifier('body'),\n isFlatArg\n ? variablesObject\n : factory.createPropertyAccessExpression(variablesObject, factory.createIdentifier(bodyParameter.name))\n ),\n createObjectLiteralProperty(pickParams('cookie'), 'cookies'),\n createObjectLiteralProperty(pickParams('query'), 'params'),\n factory.createPropertyAssignment(\n factory.createIdentifier('fetchOptions'),\n factory.createPropertyAccessChain(\n rootObject,\n factory.createToken(ts.SyntaxKind.QuestionDotToken),\n factory.createIdentifier('fetchOptions')\n )\n ),\n ].filter(removeUndefined),\n false\n )\n )\n );\n }\n\n // eslint-disable-next-line no-empty-pattern\n function generateQueryEndpointProps({}: { operationDefinition: OperationDefinition }): ObjectPropertyDefinitions {\n return {}; /* TODO needs implementation - skip for now */\n }\n\n // eslint-disable-next-line no-empty-pattern\n function generateMutationEndpointProps({}: { operationDefinition: OperationDefinition }): ObjectPropertyDefinitions {\n return {}; /* TODO needs implementation - skip for now */\n }\n}\n\nfunction accessProperty(rootObject: ts.Identifier, propertyName: string) {\n return isValidIdentifier(propertyName)\n ? factory.createPropertyAccessExpression(rootObject, factory.createIdentifier(propertyName))\n : factory.createElementAccessExpression(rootObject, factory.createStringLiteral(propertyName));\n}\n\nfunction generatePathExpression(\n path: string,\n pathParameters: QueryArgDefinition[],\n rootObject: ts.Identifier | ts.PropertyAccessExpression,\n isFlatArg: boolean,\n encodePathParams: boolean\n) {\n const expressions: Array<[string, string]> = [];\n\n const head = path.replace(/\\{(.*?)}(.*?)(?=\\{|$)/g, (_, expression, literal) => {\n const param = pathParameters.find((p) => p.originalName === expression);\n if (!param) {\n throw new Error(`path parameter ${expression} does not seem to be defined in '${path}'!`);\n }\n expressions.push([param.name, literal]);\n return '';\n });\n\n return expressions.length\n ? factory.createTemplateExpression(\n factory.createTemplateHead(head),\n expressions.map(([prop, literal], index) => {\n const value = isFlatArg \n ? rootObject \n : factory.createPropertyAccessExpression(rootObject, factory.createIdentifier(prop));\n const encodedValue = encodePathParams\n ? factory.createCallExpression(factory.createIdentifier('encodeURIComponent'), undefined, [\n factory.createCallExpression(factory.createIdentifier('String'), undefined, [value]),\n ])\n : value;\n return factory.createTemplateSpan(\n encodedValue,\n index === expressions.length - 1\n ? factory.createTemplateTail(literal)\n : factory.createTemplateMiddle(literal)\n );\n })\n )\n : factory.createNoSubstitutionTemplateLiteral(head);\n}\n\ntype QueryArgDefinition = {\n name: string;\n originalName: string;\n type: ts.TypeNode;\n required?: boolean;\n param?: OpenAPIV3.ParameterObject;\n} & (\n | {\n origin: 'param';\n param: OpenAPIV3.ParameterObject;\n }\n | {\n origin: 'body';\n body: OpenAPIV3.RequestBodyObject;\n }\n);\ntype QueryArgDefinitions = Record<string, QueryArgDefinition>;\n","import ts from 'typescript';\nimport semver from 'semver';\n\nconst originalFactory = ts.factory;\n\nfunction createImportSpecifier(propertyName: ts.Identifier | undefined, name: ts.Identifier): ts.ImportSpecifier {\n if (semver.satisfies(ts.version, '>= 4.5'))\n // @ts-ignore\n return originalFactory.createImportSpecifier(false, propertyName, name);\n // @ts-ignore\n return originalFactory.createImportSpecifier(propertyName, name);\n}\n\nfunction createExportSpecifier(\n propertyName: string | ts.Identifier | undefined,\n name: string | ts.Identifier\n): ts.ExportSpecifier {\n if (semver.satisfies(ts.version, '>= 4.5'))\n // @ts-ignore\n return originalFactory.createExportSpecifier(false, propertyName, name);\n // @ts-ignore\n return originalFactory.createExportSpecifier(propertyName, name);\n}\n\nexport const factory = {\n ...originalFactory,\n createImportSpecifier,\n createExportSpecifier,\n};\n","import { factory } from './utils/factory';\nimport ts from 'typescript';\n\nconst defaultEndpointBuilder = factory.createIdentifier('build');\n\nexport type ObjectPropertyDefinitions = Record<string, ts.Expression | undefined>;\nexport function generateObjectProperties(obj: ObjectPropertyDefinitions) {\n return Object.entries(obj)\n .filter(([_, v]) => v)\n .map(([k, v]) => factory.createPropertyAssignment(factory.createIdentifier(k), v as ts.Expression));\n}\n\nexport function generateImportNode(pkg: string, namedImports: Record<string, string>, defaultImportName?: string) {\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n false,\n defaultImportName !== undefined ? factory.createIdentifier(defaultImportName) : undefined,\n factory.createNamedImports(\n Object.entries(namedImports).map(([propertyName, name]) =>\n factory.createImportSpecifier(\n name === propertyName ? undefined : factory.createIdentifier(propertyName),\n factory.createIdentifier(name)\n )\n )\n )\n ),\n factory.createStringLiteral(pkg)\n );\n}\n\nexport function generateCreateApiCall({\n endpointBuilder = defaultEndpointBuilder,\n endpointDefinitions,\n tag,\n}: {\n endpointBuilder?: ts.Identifier;\n endpointDefinitions: ts.ObjectLiteralExpression;\n tag: boolean;\n}) {\n const injectEndpointsObjectLiteralExpression = factory.createObjectLiteralExpression(\n generateObjectProperties({\n endpoints: factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, endpointBuilder, undefined, undefined, undefined)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(endpointDefinitions)\n ),\n overrideExisting: factory.createFalse(),\n }),\n true\n );\n if (tag) {\n const enhanceEndpointsObjectLiteralExpression = factory.createObjectLiteralExpression(\n [factory.createShorthandPropertyAssignment(factory.createIdentifier('addTagTypes'), undefined)],\n true\n );\n return factory.createVariableStatement(\n undefined,\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('injectedRtkApi'),\n undefined,\n undefined,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('api'),\n factory.createIdentifier('enhanceEndpoints')\n ),\n undefined,\n [enhanceEndpointsObjectLiteralExpression]\n ),\n factory.createIdentifier('injectEndpoints')\n ),\n undefined,\n [injectEndpointsObjectLiteralExpression]\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n }\n\n return factory.createVariableStatement(\n undefined,\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('injectedRtkApi'),\n undefined,\n undefined,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('api'),\n factory.createIdentifier('injectEndpoints')\n ),\n undefined,\n [injectEndpointsObjectLiteralExpression]\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n}\n\nexport function generateEndpointDefinition({\n operationName,\n type,\n Response,\n QueryArg,\n queryFn,\n endpointBuilder = defaultEndpointBuilder,\n extraEndpointsProps,\n tags,\n}: {\n operationName: string;\n type: 'query' | 'mutation';\n Response: ts.TypeReferenceNode;\n QueryArg: ts.TypeReferenceNode;\n queryFn: ts.Expression;\n endpointBuilder?: ts.Identifier;\n extraEndpointsProps: ObjectPropertyDefinitions;\n tags: string[];\n}) {\n const objectProperties = generateObjectProperties({ query: queryFn, ...extraEndpointsProps });\n if (tags.length > 0) {\n objectProperties.push(\n factory.createPropertyAssignment(\n factory.createIdentifier(type === 'query' ? 'providesTags' : 'invalidatesTags'),\n factory.createArrayLiteralExpression(tags.map((tag) => factory.createStringLiteral(tag), false))\n )\n );\n }\n return factory.createPropertyAssignment(\n factory.createIdentifier(operationName),\n\n factory.createCallExpression(\n factory.createPropertyAccessExpression(endpointBuilder, factory.createIdentifier(type)),\n [Response, QueryArg],\n [factory.createObjectLiteralExpression(objectProperties, true)]\n )\n );\n}\n\nexport function generateTagTypes({ addTagTypes }: { addTagTypes: string[] }) {\n return factory.createVariableStatement(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('addTagTypes'),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createArrayLiteralExpression(\n addTagTypes.map((tagType) => factory.createStringLiteral(tagType)),\n true\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined)\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n}\n","import ts from 'typescript';\nimport { getOperationName } from 'oazapfts/generate';\nimport { capitalize, isQuery } from '../utils';\nimport type { OperationDefinition, EndpointOverrides, ConfigFile } from '../types';\nimport { getOverrides } from '../generate';\nimport { factory } from '../utils/factory';\n\ntype HooksConfigOptions = NonNullable<ConfigFile['hooks']>;\n\ntype GetReactHookNameParams = {\n operationDefinition: OperationDefinition;\n endpointOverrides: EndpointOverrides[] | undefined;\n config: HooksConfigOptions;\n};\n\ntype CreateBindingParams = {\n operationDefinition: OperationDefinition;\n overrides?: EndpointOverrides;\n isLazy?: boolean;\n};\n\nconst createBinding = ({\n operationDefinition: { verb, path, operation },\n overrides,\n isLazy = false,\n}: CreateBindingParams) =>\n factory.createBindingElement(\n undefined,\n undefined,\n factory.createIdentifier(\n `use${isLazy ? 'Lazy' : ''}${capitalize(getOperationName(verb, path, operation.operationId))}${\n isQuery(verb, overrides) ? 'Query' : 'Mutation'\n }`\n ),\n undefined\n );\n\nconst getReactHookName = ({ operationDefinition, endpointOverrides, config }: GetReactHookNameParams) => {\n const overrides = getOverrides(operationDefinition, endpointOverrides);\n\n const baseParams = {\n operationDefinition,\n overrides,\n };\n\n const _isQuery = isQuery(operationDefinition.verb, overrides);\n\n // If `config` is true, just generate everything\n if (typeof config === 'boolean') {\n return createBinding(baseParams);\n }\n\n // `config` is an object and we need to check for the configuration of each property\n if (_isQuery) {\n return [\n ...(config.queries ? [createBinding(baseParams)] : []),\n ...(config.lazyQueries ? [createBinding({ ...baseParams, isLazy: true })] : []),\n ];\n }\n\n return config.mutations ? createBinding(baseParams) : [];\n};\n\ntype GenerateReactHooksParams = {\n exportName: string;\n operationDefinitions: OperationDefinition[];\n endpointOverrides: EndpointOverrides[] | undefined;\n config: HooksConfigOptions;\n};\nexport const generateReactHooks = ({\n exportName,\n operationDefinitions,\n endpointOverrides,\n config,\n}: GenerateReactHooksParams) =>\n factory.createVariableStatement(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createObjectBindingPattern(\n operationDefinitions\n .map((operationDefinition) => getReactHookName({ operationDefinition, endpointOverrides, config }))\n .flat()\n ),\n undefined,\n undefined,\n factory.createIdentifier(exportName)\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n","export function capitalize(str: string) {\n return str.replace(str[0], str[0].toUpperCase());\n}\n","import type SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nexport type OperationDefinition = {\n path: string;\n verb: (typeof operationKeys)[number];\n pathItem: OpenAPIV3.PathItemObject;\n operation: OpenAPIV3.OperationObject;\n};\n\nexport type ParameterDefinition = OpenAPIV3.ParameterObject;\n\ntype Require<T, K extends keyof T> = { [k in K]-?: NonNullable<T[k]> } & Omit<T, K>;\ntype Optional<T, K extends keyof T> = { [k in K]?: NonNullable<T[k]> } & Omit<T, K>;\ntype Id<T> = { [K in keyof T]: T[K] } & {};\ntype AtLeastOneKey<T> = {\n [K in keyof T]-?: Pick<T, K> & Partial<T>;\n}[keyof T];\n\nexport const operationKeys = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\n\nexport type GenerationOptions = Id<\n CommonOptions &\n Optional<OutputFileOptions, 'outputFile'> & {\n isDataResponse?(\n code: string,\n includeDefault: boolean,\n response: OpenAPIV3.ResponseObject,\n allResponses: OpenAPIV3.ResponsesObject\n ): boolean;\n }\n>;\n\nexport interface CommonOptions {\n apiFile: string;\n /**\n * filename or url\n */\n schemaFile: string;\n /**\n * defaults to \"api\"\n */\n apiImport?: string;\n /**\n * defaults to \"enhancedApi\"\n */\n exportName?: string;\n /**\n * defaults to \"ApiArg\"\n */\n argSuffix?: string;\n /**\n * defaults to \"ApiResponse\"\n */\n responseSuffix?: string;\n /**\n * defaults to empty\n */\n operationNameSuffix?: string;\n /**\n * defaults to `false`\n * `true` will generate hooks for queries and mutations, but no lazyQueries\n */\n hooks?: boolean | { queries: boolean; lazyQueries: boolean; mutations: boolean };\n /**\n * defaults to false\n * `true` will generate a union type for `undefined` properties like: `{ id?: string | undefined }` instead of `{ id?: string }`\n */\n unionUndefined?: boolean;\n /**\n * defaults to false\n * `true` will result in all generated endpoints having `providesTags`/`invalidatesTags` declarations for the `tags` of their respective operation definition\n * @see https://redux-toolkit.js.org/rtk-query/usage/code-generation for more information\n */\n tag?: boolean;\n /**\n * defaults to false\n * `true` will add `encodeURIComponent` to the generated path parameters\n */\n encodePathParams?: boolean;\n /**\n * defaults to false\n * `true` will add `encodeURIComponent` to the generated query parameters\n */\n encodeQueryParams?: boolean;\n /**\n * defaults to false\n * `true` will \"flatten\" the arg so that you can do things like `useGetEntityById(1)` instead of `useGetEntityById({ entityId: 1 })`\n */\n flattenArg?: boolean;\n /**\n * default to false\n * If set to `true`, the default response type will be included in the generated code for all endpoints.\n * @see https://swagger.io/docs/specification/describing-responses/#default\n */\n includeDefault?: boolean;\n /**\n * default to false\n * `true` will not generate separate types for read-only and write-only properties.\n */\n mergeReadWriteOnly?: boolean;\n /**\n *\n * HTTPResolverOptions object that is passed to the SwaggerParser bundle function.\n */\n httpResolverOptions?: SwaggerParser.HTTPResolverOptions;\n\n /**\n * defaults to undefined\n * If present the given file will be used as prettier config when formatting the generated code. If undefined the default prettier config\n * resolution mechanism will be used.\n */\n prettierConfigFile?: string;\n}\n\nexport type TextMatcher = string | RegExp | (string | RegExp)[];\n\nexport type EndpointMatcherFunction = (operationName: string, operationDefinition: OperationDefinition) => boolean;\n\nexport type EndpointMatcher = TextMatcher | EndpointMatcherFunction;\n\nexport type ParameterMatcherFunction = (parameterName: string, parameterDefinition: ParameterDefinition) => boolean;\n\nexport type ParameterMatcher = TextMatcher | ParameterMatcherFunction;\n\nexport interface OutputFileOptions extends Partial<CommonOptions> {\n outputFile: string;\n filterEndpoints?: EndpointMatcher;\n endpointOverrides?: EndpointOverrides[];\n /**\n * defaults to false\n * If passed as true it will generate TS enums instead of union of strings\n */\n useEnumType?: boolean;\n}\n\nexport type EndpointOverrides = {\n pattern: EndpointMatcher;\n} & AtLeastOneKey<{\n type: 'mutation' | 'query';\n parameterFilter: ParameterMatcher;\n}>;\n\nexport type ConfigFile =\n | Id<Require<CommonOptions & OutputFileOptions, 'outputFile'>>\n | Id<\n Omit<CommonOptions, 'outputFile'> & {\n outputFiles: { [outputFile: string]: Omit<OutputFileOptions, 'outputFile'> };\n }\n >;\n","import type { OpenAPIV3 } from 'openapi-types';\nimport type { OperationDefinition } from '../types';\nimport { operationKeys } from '../types';\n\nexport function getOperationDefinitions(v3Doc: OpenAPIV3.Document): OperationDefinition[] {\n return Object.entries(v3Doc.paths).flatMap(([path, pathItem]) =>\n !pathItem\n ? []\n : Object.entries(pathItem)\n .filter((arg): arg is [(typeof operationKeys)[number], OpenAPIV3.OperationObject] =>\n operationKeys.includes(arg[0] as any)\n )\n .map(([verb, operation]) => ({\n path,\n verb,\n pathItem,\n operation,\n }))\n );\n}\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\n// @ts-ignore\nimport converter from 'swagger2openapi';\n\nexport async function getV3Doc(\n spec: string,\n httpResolverOptions?: SwaggerParser.HTTPResolverOptions\n): Promise<OpenAPIV3.Document> {\n const doc = await SwaggerParser.bundle(spec, {\n resolve: {\n http: httpResolverOptions,\n },\n });\n\n const isOpenApiV3 = 'openapi' in doc && doc.openapi.startsWith('3');\n\n if (isOpenApiV3) {\n return doc as OpenAPIV3.Document;\n } else {\n const result = await converter.convertObj(doc, {});\n return result.openapi as OpenAPIV3.Document;\n }\n}\n","import type { EndpointOverrides, operationKeys } from '../types';\n\nexport function isQuery(verb: (typeof operationKeys)[number], overrides: EndpointOverrides | undefined) {\n if (overrides?.type) {\n return overrides.type === 'query';\n }\n return verb === 'get';\n}\n","export function isValidUrl(string: string) {\n try {\n new URL(string);\n } catch (_) {\n return false;\n }\n\n return true;\n}\n","import path from 'node:path';\nimport prettier from 'prettier';\nimport type { BuiltInParserName } from 'prettier';\n\nconst EXTENSION_TO_PARSER: Record<string, BuiltInParserName> = {\n ts: 'typescript',\n tsx: 'typescript',\n js: 'babel',\n jsx: 'babel',\n 'js.flow': 'flow',\n flow: 'flow',\n gql: 'graphql',\n graphql: 'graphql',\n css: 'scss',\n scss: 'scss',\n less: 'scss',\n stylus: 'scss',\n markdown: 'markdown',\n md: 'markdown',\n json: 'json',\n};\n\nexport async function prettify(filePath: string | null, content: string, prettierConfigFile?: string): Promise<string> {\n let config = null;\n let parser = 'typescript';\n\n if (filePath) {\n const fileExtension = path.extname(filePath).slice(1);\n parser = EXTENSION_TO_PARSER[fileExtension];\n config = await prettier.resolveConfig(process.cwd(), {\n useCache: true,\n editorconfig: !prettierConfigFile,\n config: prettierConfigFile,\n });\n } else if (prettierConfigFile) {\n config = await prettier.resolveConfig(process.cwd(), {\n useCache: true,\n config: prettierConfigFile,\n });\n }\n\n return prettier.format(content, {\n parser,\n ...config,\n });\n}\n","export function removeUndefined<T>(t: T | undefined): t is T {\n return typeof t !== 'undefined';\n}\n"],"mappings":"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","names":["import_node_path","import_node_path","import_generate","import_typescript","ts","semver","import_typescript","ts","import_typescript","path","SwaggerParser","converter","path","prettier","path","ts","getOperationName","path","_getOperationName","ts","ApiGenerator","operationDefinitions","tag","isQuery","camelCase","encodePathParams","encodeQueryParams","path","require","path","fs"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/generate.ts","../src/utils/factory.ts","../src/codegen.ts","../src/generators/react-hooks.ts","../src/utils/capitalize.ts","../src/types.ts","../src/utils/getOperationDefinitions.ts","../src/utils/getV3Doc.ts","../src/utils/isQuery.ts","../src/utils/isValidUrl.ts","../src/utils/prettier.ts","../src/utils/removeUndefined.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { generateApi } from './generate';\nimport type { CommonOptions, ConfigFile, GenerationOptions, OutputFileOptions } from './types';\nimport { isValidUrl, prettify } from './utils';\nexport type { ConfigFile } from './types';\n\nconst require = createRequire(__filename);\n\nexport async function generateEndpoints(options: GenerationOptions): Promise<string | void> {\n const schemaLocation = options.schemaFile;\n\n const schemaAbsPath = isValidUrl(options.schemaFile)\n ? options.schemaFile\n : path.resolve(process.cwd(), schemaLocation);\n\n const sourceCode = await enforceOazapftsTsVersion(async () => {\n return generateApi(schemaAbsPath, options);\n });\n const { outputFile, prettierConfigFile } = options;\n if (outputFile) {\n fs.writeFileSync(\n path.resolve(process.cwd(), outputFile),\n await prettify(outputFile, sourceCode, prettierConfigFile)\n );\n } else {\n return await prettify(null, sourceCode, prettierConfigFile);\n }\n}\n\nexport function parseConfig(fullConfig: ConfigFile) {\n const outFiles: (CommonOptions & OutputFileOptions)[] = [];\n\n if ('outputFiles' in fullConfig) {\n const { outputFiles, ...commonConfig } = fullConfig;\n for (const [outputFile, specificConfig] of Object.entries(outputFiles)) {\n outFiles.push({\n ...commonConfig,\n ...specificConfig,\n outputFile,\n });\n }\n } else {\n outFiles.push(fullConfig);\n }\n return outFiles;\n}\n\n/**\n * Enforces `oazapfts` to use the same TypeScript version as this module itself uses.\n * That should prevent enums from running out of sync if both libraries use different TS versions.\n */\nfunction enforceOazapftsTsVersion<T>(cb: () => T): T {\n const ozTsPath = require.resolve('typescript', { paths: [require.resolve('oazapfts')] });\n const tsPath = require.resolve('typescript');\n const originalEntry = require.cache[ozTsPath];\n try {\n require.cache[ozTsPath] = require.cache[tsPath];\n return cb();\n } finally {\n if (originalEntry) {\n require.cache[ozTsPath] = originalEntry;\n } else {\n delete require.cache[ozTsPath];\n }\n }\n}\n","import camelCase from 'lodash.camelcase';\nimport path from 'node:path';\nimport ApiGenerator, {\n getOperationName as _getOperationName,\n getReferenceName,\n isReference,\n supportDeepObjects,\n createPropertyAssignment,\n createQuestionToken,\n isValidIdentifier,\n keywordType,\n} from 'oazapfts/generate';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport ts from 'typescript';\nimport type { ObjectPropertyDefinitions } from './codegen';\nimport { generateCreateApiCall, generateEndpointDefinition, generateImportNode, generateTagTypes } from './codegen';\nimport { generateReactHooks } from './generators/react-hooks';\nimport type {\n EndpointMatcher,\n EndpointOverrides,\n GenerationOptions,\n OperationDefinition,\n ParameterDefinition,\n ParameterMatcher,\n TextMatcher,\n} from './types';\nimport { capitalize, getOperationDefinitions, getV3Doc, removeUndefined, isQuery as testIsQuery } from './utils';\nimport { factory } from './utils/factory';\n\nconst generatedApiName = 'injectedRtkApi';\nconst v3DocCache: Record<string, OpenAPIV3.Document> = {};\n\nfunction defaultIsDataResponse(code: string, includeDefault: boolean) {\n if (includeDefault && code === 'default') {\n return true;\n }\n const parsedCode = Number(code);\n return !Number.isNaN(parsedCode) && parsedCode >= 200 && parsedCode < 300;\n}\n\nfunction getOperationName({ verb, path, operation }: Pick<OperationDefinition, 'verb' | 'path' | 'operation'>) {\n return _getOperationName(verb, path, operation.operationId);\n}\n\nfunction getTags({ verb, pathItem }: Pick<OperationDefinition, 'verb' | 'pathItem'>): string[] {\n return verb ? pathItem[verb]?.tags || [] : [];\n}\n\nfunction patternMatches(pattern?: TextMatcher) {\n const filters = Array.isArray(pattern) ? pattern : [pattern];\n return function matcher(operationName: string) {\n if (!pattern) return true;\n return filters.some((filter) =>\n typeof filter === 'string' ? filter === operationName : filter?.test(operationName)\n );\n };\n}\n\nfunction operationMatches(pattern?: EndpointMatcher) {\n const checkMatch = typeof pattern === 'function' ? pattern : patternMatches(pattern);\n return function matcher(operationDefinition: OperationDefinition) {\n if (!pattern) return true;\n const operationName = getOperationName(operationDefinition);\n return checkMatch(operationName, operationDefinition);\n };\n}\n\nfunction argumentMatches(pattern?: ParameterMatcher) {\n const checkMatch = typeof pattern === 'function' ? pattern : patternMatches(pattern);\n return function matcher(argumentDefinition: ParameterDefinition) {\n if (!pattern || argumentDefinition.in === 'path') return true;\n const argumentName = argumentDefinition.name;\n return checkMatch(argumentName, argumentDefinition);\n };\n}\n\nfunction withQueryComment<T extends ts.Node>(node: T, def: QueryArgDefinition, hasTrailingNewLine: boolean): T {\n const comment = def.origin === 'param' ? def.param.description : def.body.description;\n if (comment) {\n return ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* ${comment} `,\n hasTrailingNewLine\n );\n }\n return node;\n}\n\nexport function getOverrides(\n operation: OperationDefinition,\n endpointOverrides?: EndpointOverrides[]\n): EndpointOverrides | undefined {\n return endpointOverrides?.find((override) => operationMatches(override.pattern)(operation));\n}\n\nexport async function generateApi(\n spec: string,\n {\n apiFile,\n apiImport = 'api',\n exportName = 'enhancedApi',\n argSuffix = 'ApiArg',\n responseSuffix = 'ApiResponse',\n operationNameSuffix = '',\n hooks = false,\n tag = false,\n outputFile,\n isDataResponse = defaultIsDataResponse,\n filterEndpoints,\n endpointOverrides,\n unionUndefined,\n encodePathParams = false,\n encodeQueryParams = false,\n flattenArg = false,\n includeDefault = false,\n useEnumType = false,\n mergeReadWriteOnly = false,\n httpResolverOptions,\n sharedTypesFile,\n }: GenerationOptions\n) {\n const v3Doc = (v3DocCache[spec] ??= await getV3Doc(spec, httpResolverOptions));\n\n const apiGen = new ApiGenerator(v3Doc, {\n unionUndefined,\n useEnumType,\n mergeReadWriteOnly,\n });\n\n // 如果提供了 sharedTypesFile,則將 components 輸出到該文件\n if (sharedTypesFile) {\n const components = v3Doc.components;\n if (components) {\n const resultFile = ts.createSourceFile(\n 'sharedTypes.ts',\n '',\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS\n );\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n // 將 components 轉換為 TypeScript 類型定義\n const typeDefinitions = Object.entries(components).flatMap(([_, componentDefs]) => {\n return Object.entries(componentDefs as Record<string, unknown>).map(([name, def]) => {\n const typeNode = apiGen.getTypeFromSchema(def as OpenAPIV3.SchemaObject);\n return factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(name),\n undefined,\n typeNode\n );\n });\n });\n\n const output = printer.printNode(\n ts.EmitHint.Unspecified,\n factory.createSourceFile(\n typeDefinitions,\n factory.createToken(ts.SyntaxKind.EndOfFileToken),\n ts.NodeFlags.None\n ),\n resultFile\n );\n\n // 寫入文件\n const fs = await import('node:fs/promises');\n await fs.writeFile(sharedTypesFile, output, 'utf-8');\n }\n }\n\n // temporary workaround for https://github.com/oazapfts/oazapfts/issues/491\n if (apiGen.spec.components?.schemas) {\n apiGen.preprocessComponents(apiGen.spec.components.schemas);\n }\n\n const operationDefinitions = getOperationDefinitions(v3Doc).filter(operationMatches(filterEndpoints));\n\n const resultFile = ts.createSourceFile(\n 'someFileName.ts',\n '',\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS\n );\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n const interfaces: Record<string, ts.InterfaceDeclaration | ts.TypeAliasDeclaration> = {};\n function registerInterface(declaration: ts.InterfaceDeclaration | ts.TypeAliasDeclaration) {\n const name = declaration.name.escapedText.toString();\n if (name in interfaces) {\n throw new Error(`interface/type alias ${name} already registered`);\n }\n interfaces[name] = declaration;\n return declaration;\n }\n\n if (outputFile) {\n outputFile = path.resolve(process.cwd(), outputFile);\n if (apiFile.startsWith('.')) {\n apiFile = path.relative(path.dirname(outputFile), apiFile);\n apiFile = apiFile.replace(/\\\\/g, '/');\n if (!apiFile.startsWith('.')) apiFile = `./${apiFile}`;\n }\n // 處理 sharedTypesFile 的路徑\n if (sharedTypesFile && sharedTypesFile.startsWith('.')) {\n sharedTypesFile = path.relative(path.dirname(outputFile), sharedTypesFile);\n sharedTypesFile = sharedTypesFile.replace(/\\\\/g, '/');\n if (!sharedTypesFile.startsWith('.')) sharedTypesFile = `./${sharedTypesFile}`;\n }\n }\n apiFile = apiFile.replace(/\\.[jt]sx?$/, '');\n if (sharedTypesFile) {\n sharedTypesFile = sharedTypesFile.replace(/\\.[jt]sx?$/, '');\n }\n\n return printer.printNode(\n ts.EmitHint.Unspecified,\n factory.createSourceFile(\n [\n generateImportNode(apiFile, { [apiImport]: 'api' }),\n generateImportNode('@acrool/react-fetcher', { IRestFulEndpointsQueryReturn: 'IRestFulEndpointsQueryReturn' }),\n ...(sharedTypesFile ? [\n factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n false,\n undefined,\n factory.createNamespaceImport(factory.createIdentifier('SharedTypes'))\n ),\n factory.createStringLiteral(sharedTypesFile),\n undefined\n )\n ] : []),\n ...(tag ? [generateTagTypes({ addTagTypes: extractAllTagTypes({ operationDefinitions }) })] : []),\n generateCreateApiCall({\n tag,\n endpointDefinitions: factory.createObjectLiteralExpression(\n operationDefinitions.map((operationDefinition) =>\n generateEndpoint({\n operationDefinition,\n overrides: getOverrides(operationDefinition, endpointOverrides),\n })\n ),\n true\n ),\n }),\n factory.createExportAssignment(\n undefined,\n undefined,\n factory.createIdentifier(generatedApiName)\n ),\n ...Object.values(interfaces),\n ...(sharedTypesFile ? [] : [...apiGen.aliases, ...apiGen.enumAliases]),\n ...(hooks\n ? [\n generateReactHooks({\n exportName: generatedApiName,\n operationDefinitions,\n endpointOverrides,\n config: hooks,\n }),\n ]\n : []),\n ],\n factory.createToken(ts.SyntaxKind.EndOfFileToken),\n ts.NodeFlags.None\n ),\n resultFile\n );\n\n function extractAllTagTypes({ operationDefinitions }: { operationDefinitions: OperationDefinition[] }) {\n const allTagTypes = new Set<string>();\n\n for (const operationDefinition of operationDefinitions) {\n const { verb, pathItem } = operationDefinition;\n for (const tag of getTags({ verb, pathItem })) {\n allTagTypes.add(tag);\n }\n }\n return [...allTagTypes];\n }\n\n function generateEndpoint({\n operationDefinition,\n overrides,\n }: {\n operationDefinition: OperationDefinition;\n overrides?: EndpointOverrides;\n }) {\n const {\n verb,\n path,\n pathItem,\n operation,\n operation: { responses, requestBody },\n } = operationDefinition;\n const operationName = getOperationName({ verb, path, operation });\n const tags = tag ? getTags({ verb, pathItem }) : [];\n const isQuery = testIsQuery(verb, overrides);\n\n const returnsJson = apiGen.getResponseType(responses) === 'json';\n let ResponseType: ts.TypeNode = factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n\n function replaceReferences(schema: any): ts.TypeNode {\n if (!schema) return factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n \n const refName = getReferenceName(schema);\n if (refName && sharedTypesFile) {\n return factory.createTypeReferenceNode(\n factory.createQualifiedName(\n factory.createIdentifier('SharedTypes'),\n factory.createIdentifier(refName)\n ),\n undefined\n );\n }\n\n if (schema.type === 'object' && schema.properties) {\n const members = Object.entries(schema.properties).map(([key, value]: [string, any]) => {\n return factory.createPropertySignature(\n undefined,\n factory.createIdentifier(key),\n schema.required?.includes(key) ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken),\n replaceReferences(value)\n );\n });\n return factory.createTypeLiteralNode(members);\n }\n\n if (schema.type === 'array' && schema.items) {\n return factory.createArrayTypeNode(replaceReferences(schema.items));\n }\n\n return apiGen.getTypeFromSchema(schema);\n }\n\n if (returnsJson) {\n const returnTypes = Object.entries(responses || {})\n .map(\n ([code, response]) => {\n const resolvedResponse = apiGen.resolve(response);\n if (!resolvedResponse.content?.['application/json']?.schema) {\n return [code, resolvedResponse, factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)] as const;\n }\n \n const schema = resolvedResponse.content['application/json'].schema;\n const type = replaceReferences(schema);\n \n return [code, resolvedResponse, type] as const;\n }\n )\n .filter(([status, response]) =>\n isDataResponse(status, includeDefault, apiGen.resolve(response), responses || {})\n )\n .filter(([_1, _2, type]) => type !== keywordType.void)\n .map(([code, response, type]) =>\n ts.addSyntheticLeadingComment(\n { ...type },\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* status ${code} ${response.description} `,\n false\n )\n );\n if (returnTypes.length > 0) {\n ResponseType = factory.createUnionTypeNode(returnTypes);\n }\n }\n\n const ResponseTypeName = factory.createTypeReferenceNode(\n registerInterface(\n factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n capitalize(operationName + operationNameSuffix + responseSuffix),\n undefined,\n ResponseType\n )\n ).name\n );\n\n const operationParameters = apiGen.resolveArray(operation.parameters);\n const pathItemParameters = apiGen\n .resolveArray(pathItem.parameters)\n .filter((pp) => !operationParameters.some((op) => op.name === pp.name && op.in === pp.in));\n\n const parameters = supportDeepObjects([...pathItemParameters, ...operationParameters])\n .filter(argumentMatches(overrides?.parameterFilter))\n .filter(param => param.in !== 'header');\n\n const allNames = parameters.map((p) => p.name);\n const queryArg: QueryArgDefinitions = {};\n function generateName(name: string, potentialPrefix: string) {\n const isPureSnakeCase = /^[a-zA-Z][a-zA-Z0-9_]*$/.test(name);\n // prefix with `query`, `path` or `body` if there are multiple paramters with the same name\n const hasNamingConflict = allNames.filter((n) => n === name).length > 1;\n if (hasNamingConflict) {\n name = `${potentialPrefix}_${name}`;\n }\n // convert to camelCase if the name is pure snake_case and there are no naming conflicts\n const camelCaseName = camelCase(name);\n if (isPureSnakeCase && !allNames.includes(camelCaseName)) {\n name = camelCaseName;\n }\n // if there are still any naming conflicts, prepend with underscore\n while (name in queryArg) {\n name = `_${name}`;\n }\n return name;\n }\n\n if (requestBody) {\n const body = apiGen.resolve(requestBody);\n const schema = apiGen.getSchemaFromContent(body.content);\n const type = replaceReferences(schema);\n\n const schemaName = camelCase(\n (type as any).name ||\n getReferenceName(schema) ||\n (typeof schema === 'object' && 'title' in schema && schema.title) ||\n 'body'\n );\n const name = generateName(schemaName in queryArg ? 'body' : schemaName, 'body');\n\n queryArg[name] = {\n origin: 'body',\n name,\n originalName: schemaName,\n type,\n required: true,\n body,\n };\n }\n\n for (const param of parameters) {\n const name = generateName(param.name, param.in);\n const paramSchema = isReference(param) ? param : param.schema;\n const type = replaceReferences(paramSchema);\n\n queryArg[name] = {\n origin: 'param',\n name,\n originalName: param.name,\n type,\n required: param.required,\n param,\n };\n }\n\n const propertyName = (name: string | ts.PropertyName): ts.PropertyName => {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name);\n }\n return name;\n };\n\n const queryArgValues = Object.values(queryArg);\n\n const isFlatArg = flattenArg && queryArgValues.length === 1;\n const QueryArg = factory.createTypeReferenceNode(\n registerInterface(\n factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n capitalize(operationName + operationNameSuffix + argSuffix),\n undefined,\n queryArgValues.length > 0\n ? isFlatArg\n ? withQueryComment(\n factory.createUnionTypeNode([\n queryArgValues[0].type,\n ...(!queryArgValues[0].required\n ? [factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)]\n : []),\n ]),\n queryArgValues[0],\n false\n )\n : factory.createTypeLiteralNode(\n queryArgValues.map((def) =>\n withQueryComment(\n factory.createPropertySignature(\n undefined,\n propertyName(def.name),\n createQuestionToken(!def.required),\n def.type\n ),\n def,\n true\n )\n )\n )\n : factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword)\n )\n ).name\n );\n\n return generateEndpointDefinition({\n operationName: operationNameSuffix ? capitalize(operationName + operationNameSuffix) : operationName,\n type: isQuery ? 'query' : 'mutation',\n Response: ResponseTypeName,\n QueryArg: factory.createTypeReferenceNode(\n factory.createIdentifier('IRestFulEndpointsQueryReturn'),\n [QueryArg]\n ),\n queryFn: generateQueryFn({\n operationDefinition,\n queryArg,\n isQuery,\n isFlatArg,\n encodePathParams,\n encodeQueryParams,\n }),\n extraEndpointsProps: isQuery\n ? generateQueryEndpointProps({ operationDefinition })\n : generateMutationEndpointProps({ operationDefinition }),\n tags,\n });\n }\n\n function generateQueryFn({\n operationDefinition,\n queryArg,\n isFlatArg,\n isQuery,\n encodePathParams,\n encodeQueryParams,\n }: {\n operationDefinition: OperationDefinition;\n queryArg: QueryArgDefinitions;\n isFlatArg: boolean;\n isQuery: boolean;\n encodePathParams: boolean;\n encodeQueryParams: boolean;\n }) {\n const { path, verb } = operationDefinition;\n\n const bodyParameter = Object.values(queryArg).find((def) => def.origin === 'body');\n\n const rootObject = factory.createIdentifier('queryArg');\n const variablesObject = factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables'));\n\n function pickParams(paramIn: string) {\n return Object.values(queryArg).filter((def) => def.origin === 'param' && def.param.in === paramIn);\n }\n\n function createObjectLiteralProperty(parameters: QueryArgDefinition[], propertyName: string) {\n if (parameters.length === 0) return undefined;\n\n const properties = parameters.map((param) => {\n const value = isFlatArg \n ? variablesObject \n : factory.createPropertyAccessExpression(variablesObject, factory.createIdentifier(param.name));\n\n const encodedValue =\n encodeQueryParams && param.param?.in === 'query'\n ? factory.createConditionalExpression(\n value,\n undefined,\n factory.createCallExpression(factory.createIdentifier('encodeURIComponent'), undefined, [\n factory.createCallExpression(factory.createIdentifier('String'), undefined, [value]),\n ]),\n undefined,\n factory.createIdentifier('undefined')\n )\n : value;\n\n return createPropertyAssignment(param.originalName, encodedValue);\n });\n\n return factory.createPropertyAssignment(\n factory.createIdentifier(propertyName),\n factory.createObjectLiteralExpression(properties, true)\n );\n }\n\n return factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, rootObject, undefined, undefined, undefined)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(\n factory.createObjectLiteralExpression(\n [\n factory.createPropertyAssignment(\n factory.createIdentifier('url'),\n generatePathExpression(path, pickParams('path'), variablesObject, isFlatArg, encodePathParams)\n ),\n isQuery && verb.toUpperCase() === 'GET'\n ? undefined\n : factory.createPropertyAssignment(\n factory.createIdentifier('method'),\n factory.createStringLiteral(verb.toUpperCase())\n ),\n bodyParameter === undefined\n ? undefined\n : factory.createPropertyAssignment(\n factory.createIdentifier('body'),\n isFlatArg\n ? variablesObject\n : factory.createPropertyAccessExpression(variablesObject, factory.createIdentifier(bodyParameter.name))\n ),\n createObjectLiteralProperty(pickParams('cookie'), 'cookies'),\n createObjectLiteralProperty(pickParams('query'), 'params'),\n factory.createPropertyAssignment(\n factory.createIdentifier('fetchOptions'),\n factory.createPropertyAccessChain(\n rootObject,\n factory.createToken(ts.SyntaxKind.QuestionDotToken),\n factory.createIdentifier('fetchOptions')\n )\n ),\n ].filter(removeUndefined),\n false\n )\n )\n );\n }\n\n // eslint-disable-next-line no-empty-pattern\n function generateQueryEndpointProps({}: { operationDefinition: OperationDefinition }): ObjectPropertyDefinitions {\n return {}; /* TODO needs implementation - skip for now */\n }\n\n // eslint-disable-next-line no-empty-pattern\n function generateMutationEndpointProps({}: { operationDefinition: OperationDefinition }): ObjectPropertyDefinitions {\n return {}; /* TODO needs implementation - skip for now */\n }\n}\n\nfunction accessProperty(rootObject: ts.Identifier, propertyName: string) {\n return isValidIdentifier(propertyName)\n ? factory.createPropertyAccessExpression(rootObject, factory.createIdentifier(propertyName))\n : factory.createElementAccessExpression(rootObject, factory.createStringLiteral(propertyName));\n}\n\nfunction generatePathExpression(\n path: string,\n pathParameters: QueryArgDefinition[],\n rootObject: ts.Identifier | ts.PropertyAccessExpression,\n isFlatArg: boolean,\n encodePathParams: boolean\n) {\n const expressions: Array<[string, string]> = [];\n\n const head = path.replace(/\\{(.*?)}(.*?)(?=\\{|$)/g, (_, expression, literal) => {\n const param = pathParameters.find((p) => p.originalName === expression);\n if (!param) {\n throw new Error(`path parameter ${expression} does not seem to be defined in '${path}'!`);\n }\n expressions.push([param.name, literal]);\n return '';\n });\n\n return expressions.length\n ? factory.createTemplateExpression(\n factory.createTemplateHead(head),\n expressions.map(([prop, literal], index) => {\n const value = isFlatArg \n ? rootObject \n : factory.createPropertyAccessExpression(rootObject, factory.createIdentifier(prop));\n const encodedValue = encodePathParams\n ? factory.createCallExpression(factory.createIdentifier('encodeURIComponent'), undefined, [\n factory.createCallExpression(factory.createIdentifier('String'), undefined, [value]),\n ])\n : value;\n return factory.createTemplateSpan(\n encodedValue,\n index === expressions.length - 1\n ? factory.createTemplateTail(literal)\n : factory.createTemplateMiddle(literal)\n );\n })\n )\n : factory.createNoSubstitutionTemplateLiteral(head);\n}\n\ntype QueryArgDefinition = {\n name: string;\n originalName: string;\n type: ts.TypeNode;\n required?: boolean;\n param?: OpenAPIV3.ParameterObject;\n} & (\n | {\n origin: 'param';\n param: OpenAPIV3.ParameterObject;\n }\n | {\n origin: 'body';\n body: OpenAPIV3.RequestBodyObject;\n }\n);\ntype QueryArgDefinitions = Record<string, QueryArgDefinition>;\n","import ts from 'typescript';\nimport semver from 'semver';\n\nconst originalFactory = ts.factory;\n\nfunction createImportSpecifier(propertyName: ts.Identifier | undefined, name: ts.Identifier): ts.ImportSpecifier {\n if (semver.satisfies(ts.version, '>= 4.5'))\n // @ts-ignore\n return originalFactory.createImportSpecifier(false, propertyName, name);\n // @ts-ignore\n return originalFactory.createImportSpecifier(propertyName, name);\n}\n\nfunction createExportSpecifier(\n propertyName: string | ts.Identifier | undefined,\n name: string | ts.Identifier\n): ts.ExportSpecifier {\n if (semver.satisfies(ts.version, '>= 4.5'))\n // @ts-ignore\n return originalFactory.createExportSpecifier(false, propertyName, name);\n // @ts-ignore\n return originalFactory.createExportSpecifier(propertyName, name);\n}\n\nexport const factory = {\n ...originalFactory,\n createImportSpecifier,\n createExportSpecifier,\n};\n","import { factory } from './utils/factory';\nimport ts from 'typescript';\n\nconst defaultEndpointBuilder = factory.createIdentifier('build');\n\nexport type ObjectPropertyDefinitions = Record<string, ts.Expression | undefined>;\nexport function generateObjectProperties(obj: ObjectPropertyDefinitions) {\n return Object.entries(obj)\n .filter(([_, v]) => v)\n .map(([k, v]) => factory.createPropertyAssignment(factory.createIdentifier(k), v as ts.Expression));\n}\n\nexport function generateImportNode(pkg: string, namedImports: Record<string, string>, defaultImportName?: string) {\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n false,\n defaultImportName !== undefined ? factory.createIdentifier(defaultImportName) : undefined,\n factory.createNamedImports(\n Object.entries(namedImports).map(([propertyName, name]) =>\n factory.createImportSpecifier(\n name === propertyName ? undefined : factory.createIdentifier(propertyName),\n factory.createIdentifier(name)\n )\n )\n )\n ),\n factory.createStringLiteral(pkg)\n );\n}\n\nexport function generateCreateApiCall({\n endpointBuilder = defaultEndpointBuilder,\n endpointDefinitions,\n tag,\n}: {\n endpointBuilder?: ts.Identifier;\n endpointDefinitions: ts.ObjectLiteralExpression;\n tag: boolean;\n}) {\n const injectEndpointsObjectLiteralExpression = factory.createObjectLiteralExpression(\n generateObjectProperties({\n endpoints: factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, endpointBuilder, undefined, undefined, undefined)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(endpointDefinitions)\n ),\n overrideExisting: factory.createFalse(),\n }),\n true\n );\n if (tag) {\n const enhanceEndpointsObjectLiteralExpression = factory.createObjectLiteralExpression(\n [factory.createShorthandPropertyAssignment(factory.createIdentifier('addTagTypes'), undefined)],\n true\n );\n return factory.createVariableStatement(\n undefined,\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('injectedRtkApi'),\n undefined,\n undefined,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('api'),\n factory.createIdentifier('enhanceEndpoints')\n ),\n undefined,\n [enhanceEndpointsObjectLiteralExpression]\n ),\n factory.createIdentifier('injectEndpoints')\n ),\n undefined,\n [injectEndpointsObjectLiteralExpression]\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n }\n\n return factory.createVariableStatement(\n undefined,\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('injectedRtkApi'),\n undefined,\n undefined,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('api'),\n factory.createIdentifier('injectEndpoints')\n ),\n undefined,\n [injectEndpointsObjectLiteralExpression]\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n}\n\nexport function generateEndpointDefinition({\n operationName,\n type,\n Response,\n QueryArg,\n queryFn,\n endpointBuilder = defaultEndpointBuilder,\n extraEndpointsProps,\n tags,\n}: {\n operationName: string;\n type: 'query' | 'mutation';\n Response: ts.TypeReferenceNode;\n QueryArg: ts.TypeReferenceNode;\n queryFn: ts.Expression;\n endpointBuilder?: ts.Identifier;\n extraEndpointsProps: ObjectPropertyDefinitions;\n tags: string[];\n}) {\n const objectProperties = generateObjectProperties({ query: queryFn, ...extraEndpointsProps });\n if (tags.length > 0) {\n objectProperties.push(\n factory.createPropertyAssignment(\n factory.createIdentifier(type === 'query' ? 'providesTags' : 'invalidatesTags'),\n factory.createArrayLiteralExpression(tags.map((tag) => factory.createStringLiteral(tag), false))\n )\n );\n }\n return factory.createPropertyAssignment(\n factory.createIdentifier(operationName),\n\n factory.createCallExpression(\n factory.createPropertyAccessExpression(endpointBuilder, factory.createIdentifier(type)),\n [Response, QueryArg],\n [factory.createObjectLiteralExpression(objectProperties, true)]\n )\n );\n}\n\nexport function generateTagTypes({ addTagTypes }: { addTagTypes: string[] }) {\n return factory.createVariableStatement(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('addTagTypes'),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createArrayLiteralExpression(\n addTagTypes.map((tagType) => factory.createStringLiteral(tagType)),\n true\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined)\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n}\n","import ts from 'typescript';\nimport { getOperationName } from 'oazapfts/generate';\nimport { capitalize, isQuery } from '../utils';\nimport type { OperationDefinition, EndpointOverrides, ConfigFile } from '../types';\nimport { getOverrides } from '../generate';\nimport { factory } from '../utils/factory';\n\ntype HooksConfigOptions = NonNullable<ConfigFile['hooks']>;\n\ntype GetReactHookNameParams = {\n operationDefinition: OperationDefinition;\n endpointOverrides: EndpointOverrides[] | undefined;\n config: HooksConfigOptions;\n};\n\ntype CreateBindingParams = {\n operationDefinition: OperationDefinition;\n overrides?: EndpointOverrides;\n isLazy?: boolean;\n};\n\nconst createBinding = ({\n operationDefinition: { verb, path, operation },\n overrides,\n isLazy = false,\n}: CreateBindingParams) =>\n factory.createBindingElement(\n undefined,\n undefined,\n factory.createIdentifier(\n `use${isLazy ? 'Lazy' : ''}${capitalize(getOperationName(verb, path, operation.operationId))}${\n isQuery(verb, overrides) ? 'Query' : 'Mutation'\n }`\n ),\n undefined\n );\n\nconst getReactHookName = ({ operationDefinition, endpointOverrides, config }: GetReactHookNameParams) => {\n const overrides = getOverrides(operationDefinition, endpointOverrides);\n\n const baseParams = {\n operationDefinition,\n overrides,\n };\n\n const _isQuery = isQuery(operationDefinition.verb, overrides);\n\n // If `config` is true, just generate everything\n if (typeof config === 'boolean') {\n return createBinding(baseParams);\n }\n\n // `config` is an object and we need to check for the configuration of each property\n if (_isQuery) {\n return [\n ...(config.queries ? [createBinding(baseParams)] : []),\n ...(config.lazyQueries ? [createBinding({ ...baseParams, isLazy: true })] : []),\n ];\n }\n\n return config.mutations ? createBinding(baseParams) : [];\n};\n\ntype GenerateReactHooksParams = {\n exportName: string;\n operationDefinitions: OperationDefinition[];\n endpointOverrides: EndpointOverrides[] | undefined;\n config: HooksConfigOptions;\n};\nexport const generateReactHooks = ({\n exportName,\n operationDefinitions,\n endpointOverrides,\n config,\n}: GenerateReactHooksParams) =>\n factory.createVariableStatement(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createObjectBindingPattern(\n operationDefinitions\n .map((operationDefinition) => getReactHookName({ operationDefinition, endpointOverrides, config }))\n .flat()\n ),\n undefined,\n undefined,\n factory.createIdentifier(exportName)\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n","export function capitalize(str: string) {\n return str.replace(str[0], str[0].toUpperCase());\n}\n","import type SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nexport type OperationDefinition = {\n path: string;\n verb: (typeof operationKeys)[number];\n pathItem: OpenAPIV3.PathItemObject;\n operation: OpenAPIV3.OperationObject;\n};\n\nexport type ParameterDefinition = OpenAPIV3.ParameterObject;\n\ntype Require<T, K extends keyof T> = { [k in K]-?: NonNullable<T[k]> } & Omit<T, K>;\ntype Optional<T, K extends keyof T> = { [k in K]?: NonNullable<T[k]> } & Omit<T, K>;\ntype Id<T> = { [K in keyof T]: T[K] } & {};\ntype AtLeastOneKey<T> = {\n [K in keyof T]-?: Pick<T, K> & Partial<T>;\n}[keyof T];\n\nexport const operationKeys = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\n\nexport type GenerationOptions = Id<\n CommonOptions &\n Optional<OutputFileOptions, 'outputFile'> & {\n isDataResponse?(\n code: string,\n includeDefault: boolean,\n response: OpenAPIV3.ResponseObject,\n allResponses: OpenAPIV3.ResponsesObject\n ): boolean;\n }\n>;\n\nexport interface CommonOptions {\n apiFile: string;\n /**\n * filename or url\n */\n schemaFile: string;\n /**\n * defaults to \"api\"\n */\n apiImport?: string;\n /**\n * defaults to \"enhancedApi\"\n */\n exportName?: string;\n /**\n * defaults to \"ApiArg\"\n */\n argSuffix?: string;\n /**\n * defaults to \"ApiResponse\"\n */\n responseSuffix?: string;\n /**\n * defaults to empty\n */\n operationNameSuffix?: string;\n /**\n * defaults to `false`\n * `true` will generate hooks for queries and mutations, but no lazyQueries\n */\n hooks?: boolean | { queries: boolean; lazyQueries: boolean; mutations: boolean };\n /**\n * defaults to false\n * `true` will generate a union type for `undefined` properties like: `{ id?: string | undefined }` instead of `{ id?: string }`\n */\n unionUndefined?: boolean;\n /**\n * defaults to false\n * `true` will result in all generated endpoints having `providesTags`/`invalidatesTags` declarations for the `tags` of their respective operation definition\n * @see https://redux-toolkit.js.org/rtk-query/usage/code-generation for more information\n */\n tag?: boolean;\n /**\n * defaults to false\n * `true` will add `encodeURIComponent` to the generated path parameters\n */\n encodePathParams?: boolean;\n /**\n * defaults to false\n * `true` will add `encodeURIComponent` to the generated query parameters\n */\n encodeQueryParams?: boolean;\n /**\n * defaults to false\n * `true` will \"flatten\" the arg so that you can do things like `useGetEntityById(1)` instead of `useGetEntityById({ entityId: 1 })`\n */\n flattenArg?: boolean;\n /**\n * default to false\n * If set to `true`, the default response type will be included in the generated code for all endpoints.\n * @see https://swagger.io/docs/specification/describing-responses/#default\n */\n includeDefault?: boolean;\n /**\n * default to false\n * `true` will not generate separate types for read-only and write-only properties.\n */\n mergeReadWriteOnly?: boolean;\n /**\n *\n * HTTPResolverOptions object that is passed to the SwaggerParser bundle function.\n */\n httpResolverOptions?: SwaggerParser.HTTPResolverOptions;\n\n /**\n * defaults to undefined\n * If present the given file will be used as prettier config when formatting the generated code. If undefined the default prettier config\n * resolution mechanism will be used.\n */\n prettierConfigFile?: string;\n}\n\nexport type TextMatcher = string | RegExp | (string | RegExp)[];\n\nexport type EndpointMatcherFunction = (operationName: string, operationDefinition: OperationDefinition) => boolean;\n\nexport type EndpointMatcher = TextMatcher | EndpointMatcherFunction;\n\nexport type ParameterMatcherFunction = (parameterName: string, parameterDefinition: ParameterDefinition) => boolean;\n\nexport type ParameterMatcher = TextMatcher | ParameterMatcherFunction;\n\nexport interface OutputFileOptions extends Partial<CommonOptions> {\n outputFile: string;\n filterEndpoints?: EndpointMatcher;\n endpointOverrides?: EndpointOverrides[];\n /**\n * defaults to false\n * If passed as true it will generate TS enums instead of union of strings\n */\n useEnumType?: boolean;\n sharedTypesFile?: string;\n}\n\nexport type EndpointOverrides = {\n pattern: EndpointMatcher;\n} & AtLeastOneKey<{\n type: 'mutation' | 'query';\n parameterFilter: ParameterMatcher;\n}>;\n\nexport type ConfigFile =\n | Id<Require<CommonOptions & OutputFileOptions, 'outputFile'>>\n | Id<\n Omit<CommonOptions, 'outputFile'> & {\n outputFiles: { [outputFile: string]: Omit<OutputFileOptions, 'outputFile'> };\n }\n >;\n","import type { OpenAPIV3 } from 'openapi-types';\nimport type { OperationDefinition } from '../types';\nimport { operationKeys } from '../types';\n\nexport function getOperationDefinitions(v3Doc: OpenAPIV3.Document): OperationDefinition[] {\n return Object.entries(v3Doc.paths).flatMap(([path, pathItem]) =>\n !pathItem\n ? []\n : Object.entries(pathItem)\n .filter((arg): arg is [(typeof operationKeys)[number], OpenAPIV3.OperationObject] =>\n operationKeys.includes(arg[0] as any)\n )\n .map(([verb, operation]) => ({\n path,\n verb,\n pathItem,\n operation,\n }))\n );\n}\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\n// @ts-ignore\nimport converter from 'swagger2openapi';\n\nexport async function getV3Doc(\n spec: string,\n httpResolverOptions?: SwaggerParser.HTTPResolverOptions\n): Promise<OpenAPIV3.Document> {\n const doc = await SwaggerParser.bundle(spec, {\n resolve: {\n http: httpResolverOptions,\n },\n });\n\n const isOpenApiV3 = 'openapi' in doc && doc.openapi.startsWith('3');\n\n if (isOpenApiV3) {\n return doc as OpenAPIV3.Document;\n } else {\n const result = await converter.convertObj(doc, {});\n return result.openapi as OpenAPIV3.Document;\n }\n}\n","import type { EndpointOverrides, operationKeys } from '../types';\n\nexport function isQuery(verb: (typeof operationKeys)[number], overrides: EndpointOverrides | undefined) {\n if (overrides?.type) {\n return overrides.type === 'query';\n }\n return verb === 'get';\n}\n","export function isValidUrl(string: string) {\n try {\n new URL(string);\n } catch (_) {\n return false;\n }\n\n return true;\n}\n","import path from 'node:path';\nimport prettier from 'prettier';\nimport type { BuiltInParserName } from 'prettier';\n\nconst EXTENSION_TO_PARSER: Record<string, BuiltInParserName> = {\n ts: 'typescript',\n tsx: 'typescript',\n js: 'babel',\n jsx: 'babel',\n 'js.flow': 'flow',\n flow: 'flow',\n gql: 'graphql',\n graphql: 'graphql',\n css: 'scss',\n scss: 'scss',\n less: 'scss',\n stylus: 'scss',\n markdown: 'markdown',\n md: 'markdown',\n json: 'json',\n};\n\nexport async function prettify(filePath: string | null, content: string, prettierConfigFile?: string): Promise<string> {\n let config = null;\n let parser = 'typescript';\n\n if (filePath) {\n const fileExtension = path.extname(filePath).slice(1);\n parser = EXTENSION_TO_PARSER[fileExtension];\n config = await prettier.resolveConfig(process.cwd(), {\n useCache: true,\n editorconfig: !prettierConfigFile,\n config: prettierConfigFile,\n });\n } else if (prettierConfigFile) {\n config = await prettier.resolveConfig(process.cwd(), {\n useCache: true,\n config: prettierConfigFile,\n });\n }\n\n return prettier.format(content, {\n parser,\n ...config,\n });\n}\n","export function removeUndefined<T>(t: T | undefined): t is T {\n return typeof t !== 'undefined';\n}\n"],"mappings":"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","names":["import_node_path","import_node_path","import_generate","import_typescript","ts","semver","import_typescript","ts","import_typescript","path","SwaggerParser","converter","path","prettier","path","ts","getOperationName","path","_getOperationName","ts","ApiGenerator","resultFile","printer","fs","operationDefinitions","tag","isQuery","camelCase","encodePathParams","encodeQueryParams","path","require","path","fs"]}
|