@acrool/rtk-query-codegen-openapi 0.0.2-test.0 → 0.0.2-test.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +10 -7
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +10 -7
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/generate.ts +10 -7
package/lib/index.js
CHANGED
|
@@ -547,7 +547,7 @@ async function generateApi(spec, {
|
|
|
547
547
|
void 0,
|
|
548
548
|
factory.createIdentifier("body"),
|
|
549
549
|
void 0,
|
|
550
|
-
|
|
550
|
+
apiGen.getTypeFromSchema(bodySchema)
|
|
551
551
|
)
|
|
552
552
|
);
|
|
553
553
|
}
|
|
@@ -564,8 +564,8 @@ async function generateApi(spec, {
|
|
|
564
564
|
(param) => factory.createPropertySignature(
|
|
565
565
|
void 0,
|
|
566
566
|
factory.createIdentifier(param.name),
|
|
567
|
-
factory.createToken(import_typescript4.default.SyntaxKind.QuestionToken),
|
|
568
|
-
|
|
567
|
+
param.required ? void 0 : factory.createToken(import_typescript4.default.SyntaxKind.QuestionToken),
|
|
568
|
+
apiGen.getTypeFromSchema(param.schema)
|
|
569
569
|
)
|
|
570
570
|
)
|
|
571
571
|
)
|
|
@@ -583,9 +583,9 @@ async function generateApi(spec, {
|
|
|
583
583
|
headerParams.map(
|
|
584
584
|
(param) => factory.createPropertySignature(
|
|
585
585
|
void 0,
|
|
586
|
-
factory.createIdentifier(param.name),
|
|
587
|
-
factory.createToken(import_typescript4.default.SyntaxKind.QuestionToken),
|
|
588
|
-
|
|
586
|
+
factory.createIdentifier(param.name.includes("-") ? `'${param.name}'` : param.name),
|
|
587
|
+
param.required ? void 0 : factory.createToken(import_typescript4.default.SyntaxKind.QuestionToken),
|
|
588
|
+
apiGen.getTypeFromSchema(param.schema)
|
|
589
589
|
)
|
|
590
590
|
)
|
|
591
591
|
)
|
|
@@ -664,7 +664,10 @@ async function generateApi(spec, {
|
|
|
664
664
|
}
|
|
665
665
|
}
|
|
666
666
|
const QueryArg = generateQueryArgType(operationDefinition);
|
|
667
|
-
const wrappedQueryArg = factory.createTypeReferenceNode(
|
|
667
|
+
const wrappedQueryArg = factory.createTypeReferenceNode(
|
|
668
|
+
factory.createIdentifier("IUseFetcherArgs"),
|
|
669
|
+
[QueryArg]
|
|
670
|
+
);
|
|
668
671
|
const endpointBuilder = factory.createIdentifier("build");
|
|
669
672
|
const Response = factory.createTypeReferenceNode(
|
|
670
673
|
factory.createIdentifier(`${capitalize(operationName)}${responseSuffix}`),
|
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\n// Add IUseFetcherArgs import\nconst useFetcherImport = generateImportNode('@acrool/react-fetcher', {\n IUseFetcherArgs: 'IUseFetcherArgs',\n});\n\nfunction defaultIsDataResponse(\n code: string,\n includeDefault: boolean,\n response: OpenAPIV3.ResponseObject,\n allResponses: OpenAPIV3.ResponsesObject\n) {\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 const tags = verb && pathItem[verb]?.tags ? pathItem[verb].tags : [];\n return tags.map((tag) => tag.toString());\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 ...(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.createExportDeclaration(\n undefined,\n false,\n factory.createNamedExports([\n factory.createExportSpecifier(\n factory.createIdentifier(generatedApiName),\n factory.createIdentifier(exportName)\n ),\n ]),\n undefined\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 generateQueryArgType(operationDefinition: OperationDefinition): ts.TypeNode {\n const {\n operation: { parameters = [], requestBody },\n } = operationDefinition;\n\n const properties: ts.PropertySignature[] = [];\n\n // Add body property if needed\n if (requestBody && !isReference(requestBody)) {\n const bodySchema = requestBody.content?.['application/json']?.schema;\n if (bodySchema) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('body'),\n undefined,\n factory.createTypeReferenceNode(factory.createIdentifier('any'), undefined)\n )\n );\n }\n }\n\n // Add params property if needed\n const queryParams = parameters.filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'query');\n if (queryParams.length > 0) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('params'),\n undefined,\n factory.createTypeLiteralNode(\n queryParams.map((param) =>\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier(param.name),\n factory.createToken(ts.SyntaxKind.QuestionToken),\n factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)\n )\n )\n )\n )\n );\n }\n\n // Add headers property if needed\n const headerParams = parameters.filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'header');\n if (headerParams.length > 0) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('headers'),\n undefined,\n factory.createTypeLiteralNode(\n headerParams.map((param) =>\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier(param.name),\n factory.createToken(ts.SyntaxKind.QuestionToken),\n factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)\n )\n )\n )\n )\n );\n }\n\n return factory.createTypeLiteralNode([\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('variables'),\n undefined,\n factory.createTypeLiteralNode(properties)\n ),\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('fetchOptions'),\n factory.createToken(ts.SyntaxKind.QuestionToken),\n factory.createTypeReferenceNode(factory.createIdentifier('any'), undefined)\n ),\n ]);\n }\n\n function generateQueryArgDefinitions(operationDefinition: OperationDefinition): QueryArgDefinitions {\n const {\n operation: { parameters = [], requestBody },\n } = operationDefinition;\n\n const queryArg: QueryArgDefinitions = {};\n\n // Add body definition if needed\n if (requestBody && !isReference(requestBody)) {\n const bodySchema = requestBody.content?.['application/json']?.schema;\n if (bodySchema) {\n queryArg['body'] = {\n name: 'body',\n originalName: 'body',\n type: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n required: true,\n origin: 'body',\n body: requestBody,\n };\n }\n }\n\n // Add parameter definitions\n parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p))\n .forEach((param) => {\n queryArg[param.name] = {\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required || false,\n origin: 'param',\n param,\n };\n });\n\n return queryArg;\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(([code, response]) =>\n isDataResponse(code, includeDefault, response as OpenAPIV3.ResponseObject, responses as OpenAPIV3.ResponsesObject) && response\n ? apiGen.getTypeFromResponse(response as OpenAPIV3.ResponseObject)\n : undefined\n )\n .filter(removeUndefined);\n\n if (returnTypes.length === 1) {\n ResponseType = returnTypes[0];\n } else if (returnTypes.length > 1) {\n ResponseType = factory.createUnionTypeNode(returnTypes);\n }\n }\n\n const QueryArg = generateQueryArgType(operationDefinition);\n const wrappedQueryArg = factory.createTypeReferenceNode(factory.createIdentifier('IUseFetcherArgs'), [QueryArg]);\n\n const endpointBuilder = factory.createIdentifier('build');\n\n const Response = factory.createTypeReferenceNode(\n factory.createIdentifier(`${capitalize(operationName)}${responseSuffix}`),\n undefined\n );\n\n const queryArgDefinitions = generateQueryArgDefinitions(operationDefinition);\n\n const extraEndpointsProps = isQuery\n ? generateQueryEndpointProps({ operationDefinition })\n : generateMutationEndpointProps({ operationDefinition });\n\n return generateEndpointDefinition({\n operationName,\n type: isQuery ? 'query' : 'mutation',\n Response,\n QueryArg: wrappedQueryArg,\n queryFn: generateQueryFn({\n operationDefinition,\n queryArg: queryArgDefinitions,\n isFlatArg: flattenArg,\n isQuery,\n encodePathParams,\n encodeQueryParams,\n }),\n extraEndpointsProps,\n tags,\n endpointBuilder,\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 {\n operation: { parameters = [], requestBody },\n path,\n verb,\n } = operationDefinition;\n\n const bodyParameter = requestBody && !isReference(requestBody) ? requestBody.content?.['application/json']?.schema : undefined;\n const bodyArg = bodyParameter ? queryArg['body'] : undefined;\n\n const pathParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'path')\n .map((param) => ({\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const queryParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'query')\n .map((param) => ({\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const headerParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'header')\n .map((param) => ({\n name: param.name.includes('-') ? `'${param.name}'` : param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const rootObject = factory.createIdentifier('queryArg');\n\n const objectProperties: ts.ObjectLiteralElementLike[] = [\n factory.createPropertyAssignment(\n 'url',\n generatePathExpression(path, pathParameters, rootObject, isFlatArg, encodePathParams)\n ),\n factory.createPropertyAssignment('method', factory.createStringLiteral(verb.toUpperCase())),\n ];\n\n if (bodyArg) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'body',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('body')\n )\n )\n );\n }\n\n if (queryParameters.length) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'params',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('params')\n )\n )\n );\n }\n\n if (headerParameters.length) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'headers',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('headers')\n )\n )\n );\n }\n\n // Add fetchOptions\n objectProperties.push(\n factory.createPropertyAssignment(\n 'fetchOptions',\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('fetchOptions'))\n )\n );\n\n return factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, rootObject)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(factory.createObjectLiteralExpression(objectProperties, true))\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,\n isFlatArg: boolean,\n encodePathParams: boolean\n): ts.Expression {\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, head),\n expressions.map(([prop, literal], index) => {\n const value = factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier(prop)\n );\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, literal)\n : factory.createTemplateMiddle(literal, literal)\n );\n })\n )\n : factory.createStringLiteral(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.TypeNode;\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(\n tags.map((tag) => factory.createStringLiteral(tag)),\n false\n )\n )\n );\n }\n return factory.createPropertyAssignment(\n factory.createIdentifier(operationName),\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","ApiGenerator","ts","path","operationDefinitions","tag","getOperationName","isQuery","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\n// Add IUseFetcherArgs import\nconst useFetcherImport = generateImportNode('@acrool/react-fetcher', {\n IUseFetcherArgs: 'IUseFetcherArgs',\n});\n\nfunction defaultIsDataResponse(\n code: string,\n includeDefault: boolean,\n response: OpenAPIV3.ResponseObject,\n allResponses: OpenAPIV3.ResponsesObject\n) {\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 const tags = verb && pathItem[verb]?.tags ? pathItem[verb].tags : [];\n return tags.map((tag) => tag.toString());\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 ...(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.createExportDeclaration(\n undefined,\n false,\n factory.createNamedExports([\n factory.createExportSpecifier(\n factory.createIdentifier(generatedApiName),\n factory.createIdentifier(exportName)\n ),\n ]),\n undefined\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 generateQueryArgType(operationDefinition: OperationDefinition): ts.TypeNode {\n const {\n operation: { parameters = [], requestBody },\n } = operationDefinition;\n\n const properties: ts.PropertySignature[] = [];\n\n // Add body property if needed\n if (requestBody && !isReference(requestBody)) {\n const bodySchema = requestBody.content?.['application/json']?.schema;\n if (bodySchema) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('body'),\n undefined,\n apiGen.getTypeFromSchema(bodySchema)\n )\n );\n }\n }\n\n // Add params property if needed\n const queryParams = parameters.filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'query');\n if (queryParams.length > 0) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('params'),\n undefined,\n factory.createTypeLiteralNode(\n queryParams.map((param) =>\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier(param.name),\n param.required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken),\n apiGen.getTypeFromSchema(param.schema as OpenAPIV3.SchemaObject)\n )\n )\n )\n )\n );\n }\n\n // Add headers property if needed\n const headerParams = parameters.filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'header');\n if (headerParams.length > 0) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('headers'),\n undefined,\n factory.createTypeLiteralNode(\n headerParams.map((param) =>\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier(param.name.includes('-') ? `'${param.name}'` : param.name),\n param.required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken),\n apiGen.getTypeFromSchema(param.schema as OpenAPIV3.SchemaObject)\n )\n )\n )\n )\n );\n }\n\n return factory.createTypeLiteralNode([\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('variables'),\n undefined,\n factory.createTypeLiteralNode(properties)\n ),\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('fetchOptions'),\n factory.createToken(ts.SyntaxKind.QuestionToken),\n factory.createTypeReferenceNode(factory.createIdentifier('any'), undefined)\n ),\n ]);\n }\n\n function generateQueryArgDefinitions(operationDefinition: OperationDefinition): QueryArgDefinitions {\n const {\n operation: { parameters = [], requestBody },\n } = operationDefinition;\n\n const queryArg: QueryArgDefinitions = {};\n\n // Add body definition if needed\n if (requestBody && !isReference(requestBody)) {\n const bodySchema = requestBody.content?.['application/json']?.schema;\n if (bodySchema) {\n queryArg['body'] = {\n name: 'body',\n originalName: 'body',\n type: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n required: true,\n origin: 'body',\n body: requestBody,\n };\n }\n }\n\n // Add parameter definitions\n parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p))\n .forEach((param) => {\n queryArg[param.name] = {\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required || false,\n origin: 'param',\n param,\n };\n });\n\n return queryArg;\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(([code, response]) =>\n isDataResponse(code, includeDefault, response as OpenAPIV3.ResponseObject, responses as OpenAPIV3.ResponsesObject) && response\n ? apiGen.getTypeFromResponse(response as OpenAPIV3.ResponseObject)\n : undefined\n )\n .filter(removeUndefined);\n\n if (returnTypes.length === 1) {\n ResponseType = returnTypes[0];\n } else if (returnTypes.length > 1) {\n ResponseType = factory.createUnionTypeNode(returnTypes);\n }\n }\n\n const QueryArg = generateQueryArgType(operationDefinition);\n const wrappedQueryArg = factory.createTypeReferenceNode(\n factory.createIdentifier('IUseFetcherArgs'),\n [QueryArg]\n );\n\n const endpointBuilder = factory.createIdentifier('build');\n\n const Response = factory.createTypeReferenceNode(\n factory.createIdentifier(`${capitalize(operationName)}${responseSuffix}`),\n undefined\n );\n\n const queryArgDefinitions = generateQueryArgDefinitions(operationDefinition);\n\n const extraEndpointsProps = isQuery\n ? generateQueryEndpointProps({ operationDefinition })\n : generateMutationEndpointProps({ operationDefinition });\n\n return generateEndpointDefinition({\n operationName,\n type: isQuery ? 'query' : 'mutation',\n Response,\n QueryArg: wrappedQueryArg,\n queryFn: generateQueryFn({\n operationDefinition,\n queryArg: queryArgDefinitions,\n isFlatArg: flattenArg,\n isQuery,\n encodePathParams,\n encodeQueryParams,\n }),\n extraEndpointsProps,\n tags,\n endpointBuilder,\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 {\n operation: { parameters = [], requestBody },\n path,\n verb,\n } = operationDefinition;\n\n const bodyParameter = requestBody && !isReference(requestBody) ? requestBody.content?.['application/json']?.schema : undefined;\n const bodyArg = bodyParameter ? queryArg['body'] : undefined;\n\n const pathParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'path')\n .map((param) => ({\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const queryParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'query')\n .map((param) => ({\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const headerParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'header')\n .map((param) => ({\n name: param.name.includes('-') ? `'${param.name}'` : param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const rootObject = factory.createIdentifier('queryArg');\n\n const objectProperties: ts.ObjectLiteralElementLike[] = [\n factory.createPropertyAssignment(\n 'url',\n generatePathExpression(path, pathParameters, rootObject, isFlatArg, encodePathParams)\n ),\n factory.createPropertyAssignment('method', factory.createStringLiteral(verb.toUpperCase())),\n ];\n\n if (bodyArg) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'body',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('body')\n )\n )\n );\n }\n\n if (queryParameters.length) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'params',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('params')\n )\n )\n );\n }\n\n if (headerParameters.length) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'headers',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('headers')\n )\n )\n );\n }\n\n // Add fetchOptions\n objectProperties.push(\n factory.createPropertyAssignment(\n 'fetchOptions',\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('fetchOptions'))\n )\n );\n\n return factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, rootObject)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(factory.createObjectLiteralExpression(objectProperties, true))\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,\n isFlatArg: boolean,\n encodePathParams: boolean\n): ts.Expression {\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, head),\n expressions.map(([prop, literal], index) => {\n const value = factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier(prop)\n );\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, literal)\n : factory.createTemplateMiddle(literal, literal)\n );\n })\n )\n : factory.createStringLiteral(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.TypeNode;\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(\n tags.map((tag) => factory.createStringLiteral(tag)),\n false\n )\n )\n );\n }\n return factory.createPropertyAssignment(\n factory.createIdentifier(operationName),\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","ApiGenerator","ts","path","operationDefinitions","tag","getOperationName","isQuery","encodePathParams","encodeQueryParams","path","require","path","fs"]}
|
package/lib/index.mjs
CHANGED
|
@@ -521,7 +521,7 @@ async function generateApi(spec, {
|
|
|
521
521
|
void 0,
|
|
522
522
|
factory.createIdentifier("body"),
|
|
523
523
|
void 0,
|
|
524
|
-
|
|
524
|
+
apiGen.getTypeFromSchema(bodySchema)
|
|
525
525
|
)
|
|
526
526
|
);
|
|
527
527
|
}
|
|
@@ -538,8 +538,8 @@ async function generateApi(spec, {
|
|
|
538
538
|
(param) => factory.createPropertySignature(
|
|
539
539
|
void 0,
|
|
540
540
|
factory.createIdentifier(param.name),
|
|
541
|
-
factory.createToken(ts4.SyntaxKind.QuestionToken),
|
|
542
|
-
|
|
541
|
+
param.required ? void 0 : factory.createToken(ts4.SyntaxKind.QuestionToken),
|
|
542
|
+
apiGen.getTypeFromSchema(param.schema)
|
|
543
543
|
)
|
|
544
544
|
)
|
|
545
545
|
)
|
|
@@ -557,9 +557,9 @@ async function generateApi(spec, {
|
|
|
557
557
|
headerParams.map(
|
|
558
558
|
(param) => factory.createPropertySignature(
|
|
559
559
|
void 0,
|
|
560
|
-
factory.createIdentifier(param.name),
|
|
561
|
-
factory.createToken(ts4.SyntaxKind.QuestionToken),
|
|
562
|
-
|
|
560
|
+
factory.createIdentifier(param.name.includes("-") ? `'${param.name}'` : param.name),
|
|
561
|
+
param.required ? void 0 : factory.createToken(ts4.SyntaxKind.QuestionToken),
|
|
562
|
+
apiGen.getTypeFromSchema(param.schema)
|
|
563
563
|
)
|
|
564
564
|
)
|
|
565
565
|
)
|
|
@@ -638,7 +638,10 @@ async function generateApi(spec, {
|
|
|
638
638
|
}
|
|
639
639
|
}
|
|
640
640
|
const QueryArg = generateQueryArgType(operationDefinition);
|
|
641
|
-
const wrappedQueryArg = factory.createTypeReferenceNode(
|
|
641
|
+
const wrappedQueryArg = factory.createTypeReferenceNode(
|
|
642
|
+
factory.createIdentifier("IUseFetcherArgs"),
|
|
643
|
+
[QueryArg]
|
|
644
|
+
);
|
|
642
645
|
const endpointBuilder = factory.createIdentifier("build");
|
|
643
646
|
const Response = factory.createTypeReferenceNode(
|
|
644
647
|
factory.createIdentifier(`${capitalize(operationName)}${responseSuffix}`),
|
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../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":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","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\n// Add IUseFetcherArgs import\nconst useFetcherImport = generateImportNode('@acrool/react-fetcher', {\n IUseFetcherArgs: 'IUseFetcherArgs',\n});\n\nfunction defaultIsDataResponse(\n code: string,\n includeDefault: boolean,\n response: OpenAPIV3.ResponseObject,\n allResponses: OpenAPIV3.ResponsesObject\n) {\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 const tags = verb && pathItem[verb]?.tags ? pathItem[verb].tags : [];\n return tags.map((tag) => tag.toString());\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 ...(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.createExportDeclaration(\n undefined,\n false,\n factory.createNamedExports([\n factory.createExportSpecifier(\n factory.createIdentifier(generatedApiName),\n factory.createIdentifier(exportName)\n ),\n ]),\n undefined\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 generateQueryArgType(operationDefinition: OperationDefinition): ts.TypeNode {\n const {\n operation: { parameters = [], requestBody },\n } = operationDefinition;\n\n const properties: ts.PropertySignature[] = [];\n\n // Add body property if needed\n if (requestBody && !isReference(requestBody)) {\n const bodySchema = requestBody.content?.['application/json']?.schema;\n if (bodySchema) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('body'),\n undefined,\n factory.createTypeReferenceNode(factory.createIdentifier('any'), undefined)\n )\n );\n }\n }\n\n // Add params property if needed\n const queryParams = parameters.filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'query');\n if (queryParams.length > 0) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('params'),\n undefined,\n factory.createTypeLiteralNode(\n queryParams.map((param) =>\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier(param.name),\n factory.createToken(ts.SyntaxKind.QuestionToken),\n factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)\n )\n )\n )\n )\n );\n }\n\n // Add headers property if needed\n const headerParams = parameters.filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'header');\n if (headerParams.length > 0) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('headers'),\n undefined,\n factory.createTypeLiteralNode(\n headerParams.map((param) =>\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier(param.name),\n factory.createToken(ts.SyntaxKind.QuestionToken),\n factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)\n )\n )\n )\n )\n );\n }\n\n return factory.createTypeLiteralNode([\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('variables'),\n undefined,\n factory.createTypeLiteralNode(properties)\n ),\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('fetchOptions'),\n factory.createToken(ts.SyntaxKind.QuestionToken),\n factory.createTypeReferenceNode(factory.createIdentifier('any'), undefined)\n ),\n ]);\n }\n\n function generateQueryArgDefinitions(operationDefinition: OperationDefinition): QueryArgDefinitions {\n const {\n operation: { parameters = [], requestBody },\n } = operationDefinition;\n\n const queryArg: QueryArgDefinitions = {};\n\n // Add body definition if needed\n if (requestBody && !isReference(requestBody)) {\n const bodySchema = requestBody.content?.['application/json']?.schema;\n if (bodySchema) {\n queryArg['body'] = {\n name: 'body',\n originalName: 'body',\n type: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n required: true,\n origin: 'body',\n body: requestBody,\n };\n }\n }\n\n // Add parameter definitions\n parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p))\n .forEach((param) => {\n queryArg[param.name] = {\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required || false,\n origin: 'param',\n param,\n };\n });\n\n return queryArg;\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(([code, response]) =>\n isDataResponse(code, includeDefault, response as OpenAPIV3.ResponseObject, responses as OpenAPIV3.ResponsesObject) && response\n ? apiGen.getTypeFromResponse(response as OpenAPIV3.ResponseObject)\n : undefined\n )\n .filter(removeUndefined);\n\n if (returnTypes.length === 1) {\n ResponseType = returnTypes[0];\n } else if (returnTypes.length > 1) {\n ResponseType = factory.createUnionTypeNode(returnTypes);\n }\n }\n\n const QueryArg = generateQueryArgType(operationDefinition);\n const wrappedQueryArg = factory.createTypeReferenceNode(factory.createIdentifier('IUseFetcherArgs'), [QueryArg]);\n\n const endpointBuilder = factory.createIdentifier('build');\n\n const Response = factory.createTypeReferenceNode(\n factory.createIdentifier(`${capitalize(operationName)}${responseSuffix}`),\n undefined\n );\n\n const queryArgDefinitions = generateQueryArgDefinitions(operationDefinition);\n\n const extraEndpointsProps = isQuery\n ? generateQueryEndpointProps({ operationDefinition })\n : generateMutationEndpointProps({ operationDefinition });\n\n return generateEndpointDefinition({\n operationName,\n type: isQuery ? 'query' : 'mutation',\n Response,\n QueryArg: wrappedQueryArg,\n queryFn: generateQueryFn({\n operationDefinition,\n queryArg: queryArgDefinitions,\n isFlatArg: flattenArg,\n isQuery,\n encodePathParams,\n encodeQueryParams,\n }),\n extraEndpointsProps,\n tags,\n endpointBuilder,\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 {\n operation: { parameters = [], requestBody },\n path,\n verb,\n } = operationDefinition;\n\n const bodyParameter = requestBody && !isReference(requestBody) ? requestBody.content?.['application/json']?.schema : undefined;\n const bodyArg = bodyParameter ? queryArg['body'] : undefined;\n\n const pathParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'path')\n .map((param) => ({\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const queryParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'query')\n .map((param) => ({\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const headerParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'header')\n .map((param) => ({\n name: param.name.includes('-') ? `'${param.name}'` : param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const rootObject = factory.createIdentifier('queryArg');\n\n const objectProperties: ts.ObjectLiteralElementLike[] = [\n factory.createPropertyAssignment(\n 'url',\n generatePathExpression(path, pathParameters, rootObject, isFlatArg, encodePathParams)\n ),\n factory.createPropertyAssignment('method', factory.createStringLiteral(verb.toUpperCase())),\n ];\n\n if (bodyArg) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'body',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('body')\n )\n )\n );\n }\n\n if (queryParameters.length) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'params',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('params')\n )\n )\n );\n }\n\n if (headerParameters.length) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'headers',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('headers')\n )\n )\n );\n }\n\n // Add fetchOptions\n objectProperties.push(\n factory.createPropertyAssignment(\n 'fetchOptions',\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('fetchOptions'))\n )\n );\n\n return factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, rootObject)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(factory.createObjectLiteralExpression(objectProperties, true))\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,\n isFlatArg: boolean,\n encodePathParams: boolean\n): ts.Expression {\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, head),\n expressions.map(([prop, literal], index) => {\n const value = factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier(prop)\n );\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, literal)\n : factory.createTemplateMiddle(literal, literal)\n );\n })\n )\n : factory.createStringLiteral(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.TypeNode;\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(\n tags.map((tag) => factory.createStringLiteral(tag)),\n false\n )\n )\n );\n }\n return factory.createPropertyAssignment(\n factory.createIdentifier(operationName),\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":["path","path","ts","ts","ts","path","path","ts","getOperationName","path","ts","path","operationDefinitions","tag","getOperationName","isQuery","encodePathParams","encodeQueryParams","path","require","path"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../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":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","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\n// Add IUseFetcherArgs import\nconst useFetcherImport = generateImportNode('@acrool/react-fetcher', {\n IUseFetcherArgs: 'IUseFetcherArgs',\n});\n\nfunction defaultIsDataResponse(\n code: string,\n includeDefault: boolean,\n response: OpenAPIV3.ResponseObject,\n allResponses: OpenAPIV3.ResponsesObject\n) {\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 const tags = verb && pathItem[verb]?.tags ? pathItem[verb].tags : [];\n return tags.map((tag) => tag.toString());\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 ...(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.createExportDeclaration(\n undefined,\n false,\n factory.createNamedExports([\n factory.createExportSpecifier(\n factory.createIdentifier(generatedApiName),\n factory.createIdentifier(exportName)\n ),\n ]),\n undefined\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 generateQueryArgType(operationDefinition: OperationDefinition): ts.TypeNode {\n const {\n operation: { parameters = [], requestBody },\n } = operationDefinition;\n\n const properties: ts.PropertySignature[] = [];\n\n // Add body property if needed\n if (requestBody && !isReference(requestBody)) {\n const bodySchema = requestBody.content?.['application/json']?.schema;\n if (bodySchema) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('body'),\n undefined,\n apiGen.getTypeFromSchema(bodySchema)\n )\n );\n }\n }\n\n // Add params property if needed\n const queryParams = parameters.filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'query');\n if (queryParams.length > 0) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('params'),\n undefined,\n factory.createTypeLiteralNode(\n queryParams.map((param) =>\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier(param.name),\n param.required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken),\n apiGen.getTypeFromSchema(param.schema as OpenAPIV3.SchemaObject)\n )\n )\n )\n )\n );\n }\n\n // Add headers property if needed\n const headerParams = parameters.filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'header');\n if (headerParams.length > 0) {\n properties.push(\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('headers'),\n undefined,\n factory.createTypeLiteralNode(\n headerParams.map((param) =>\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier(param.name.includes('-') ? `'${param.name}'` : param.name),\n param.required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken),\n apiGen.getTypeFromSchema(param.schema as OpenAPIV3.SchemaObject)\n )\n )\n )\n )\n );\n }\n\n return factory.createTypeLiteralNode([\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('variables'),\n undefined,\n factory.createTypeLiteralNode(properties)\n ),\n factory.createPropertySignature(\n undefined,\n factory.createIdentifier('fetchOptions'),\n factory.createToken(ts.SyntaxKind.QuestionToken),\n factory.createTypeReferenceNode(factory.createIdentifier('any'), undefined)\n ),\n ]);\n }\n\n function generateQueryArgDefinitions(operationDefinition: OperationDefinition): QueryArgDefinitions {\n const {\n operation: { parameters = [], requestBody },\n } = operationDefinition;\n\n const queryArg: QueryArgDefinitions = {};\n\n // Add body definition if needed\n if (requestBody && !isReference(requestBody)) {\n const bodySchema = requestBody.content?.['application/json']?.schema;\n if (bodySchema) {\n queryArg['body'] = {\n name: 'body',\n originalName: 'body',\n type: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n required: true,\n origin: 'body',\n body: requestBody,\n };\n }\n }\n\n // Add parameter definitions\n parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p))\n .forEach((param) => {\n queryArg[param.name] = {\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required || false,\n origin: 'param',\n param,\n };\n });\n\n return queryArg;\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(([code, response]) =>\n isDataResponse(code, includeDefault, response as OpenAPIV3.ResponseObject, responses as OpenAPIV3.ResponsesObject) && response\n ? apiGen.getTypeFromResponse(response as OpenAPIV3.ResponseObject)\n : undefined\n )\n .filter(removeUndefined);\n\n if (returnTypes.length === 1) {\n ResponseType = returnTypes[0];\n } else if (returnTypes.length > 1) {\n ResponseType = factory.createUnionTypeNode(returnTypes);\n }\n }\n\n const QueryArg = generateQueryArgType(operationDefinition);\n const wrappedQueryArg = factory.createTypeReferenceNode(\n factory.createIdentifier('IUseFetcherArgs'),\n [QueryArg]\n );\n\n const endpointBuilder = factory.createIdentifier('build');\n\n const Response = factory.createTypeReferenceNode(\n factory.createIdentifier(`${capitalize(operationName)}${responseSuffix}`),\n undefined\n );\n\n const queryArgDefinitions = generateQueryArgDefinitions(operationDefinition);\n\n const extraEndpointsProps = isQuery\n ? generateQueryEndpointProps({ operationDefinition })\n : generateMutationEndpointProps({ operationDefinition });\n\n return generateEndpointDefinition({\n operationName,\n type: isQuery ? 'query' : 'mutation',\n Response,\n QueryArg: wrappedQueryArg,\n queryFn: generateQueryFn({\n operationDefinition,\n queryArg: queryArgDefinitions,\n isFlatArg: flattenArg,\n isQuery,\n encodePathParams,\n encodeQueryParams,\n }),\n extraEndpointsProps,\n tags,\n endpointBuilder,\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 {\n operation: { parameters = [], requestBody },\n path,\n verb,\n } = operationDefinition;\n\n const bodyParameter = requestBody && !isReference(requestBody) ? requestBody.content?.['application/json']?.schema : undefined;\n const bodyArg = bodyParameter ? queryArg['body'] : undefined;\n\n const pathParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'path')\n .map((param) => ({\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const queryParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'query')\n .map((param) => ({\n name: param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const headerParameters = parameters\n .filter((p): p is OpenAPIV3.ParameterObject => !isReference(p) && p.in === 'header')\n .map((param) => ({\n name: param.name.includes('-') ? `'${param.name}'` : param.name,\n originalName: param.name,\n type: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n required: param.required,\n param,\n origin: 'param' as const,\n }));\n\n const rootObject = factory.createIdentifier('queryArg');\n\n const objectProperties: ts.ObjectLiteralElementLike[] = [\n factory.createPropertyAssignment(\n 'url',\n generatePathExpression(path, pathParameters, rootObject, isFlatArg, encodePathParams)\n ),\n factory.createPropertyAssignment('method', factory.createStringLiteral(verb.toUpperCase())),\n ];\n\n if (bodyArg) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'body',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('body')\n )\n )\n );\n }\n\n if (queryParameters.length) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'params',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('params')\n )\n )\n );\n }\n\n if (headerParameters.length) {\n objectProperties.push(\n factory.createPropertyAssignment(\n 'headers',\n factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier('headers')\n )\n )\n );\n }\n\n // Add fetchOptions\n objectProperties.push(\n factory.createPropertyAssignment(\n 'fetchOptions',\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('fetchOptions'))\n )\n );\n\n return factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, rootObject)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(factory.createObjectLiteralExpression(objectProperties, true))\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,\n isFlatArg: boolean,\n encodePathParams: boolean\n): ts.Expression {\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, head),\n expressions.map(([prop, literal], index) => {\n const value = factory.createPropertyAccessExpression(\n factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables')),\n factory.createIdentifier(prop)\n );\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, literal)\n : factory.createTemplateMiddle(literal, literal)\n );\n })\n )\n : factory.createStringLiteral(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.TypeNode;\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(\n tags.map((tag) => factory.createStringLiteral(tag)),\n false\n )\n )\n );\n }\n return factory.createPropertyAssignment(\n factory.createIdentifier(operationName),\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":["path","path","ts","ts","ts","path","path","ts","getOperationName","path","ts","path","operationDefinitions","tag","getOperationName","isQuery","encodePathParams","encodeQueryParams","path","require","path"]}
|
package/package.json
CHANGED
package/src/generate.ts
CHANGED
|
@@ -251,7 +251,7 @@ export async function generateApi(
|
|
|
251
251
|
undefined,
|
|
252
252
|
factory.createIdentifier('body'),
|
|
253
253
|
undefined,
|
|
254
|
-
|
|
254
|
+
apiGen.getTypeFromSchema(bodySchema)
|
|
255
255
|
)
|
|
256
256
|
);
|
|
257
257
|
}
|
|
@@ -270,8 +270,8 @@ export async function generateApi(
|
|
|
270
270
|
factory.createPropertySignature(
|
|
271
271
|
undefined,
|
|
272
272
|
factory.createIdentifier(param.name),
|
|
273
|
-
factory.createToken(ts.SyntaxKind.QuestionToken),
|
|
274
|
-
|
|
273
|
+
param.required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken),
|
|
274
|
+
apiGen.getTypeFromSchema(param.schema as OpenAPIV3.SchemaObject)
|
|
275
275
|
)
|
|
276
276
|
)
|
|
277
277
|
)
|
|
@@ -291,9 +291,9 @@ export async function generateApi(
|
|
|
291
291
|
headerParams.map((param) =>
|
|
292
292
|
factory.createPropertySignature(
|
|
293
293
|
undefined,
|
|
294
|
-
factory.createIdentifier(param.name),
|
|
295
|
-
factory.createToken(ts.SyntaxKind.QuestionToken),
|
|
296
|
-
|
|
294
|
+
factory.createIdentifier(param.name.includes('-') ? `'${param.name}'` : param.name),
|
|
295
|
+
param.required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken),
|
|
296
|
+
apiGen.getTypeFromSchema(param.schema as OpenAPIV3.SchemaObject)
|
|
297
297
|
)
|
|
298
298
|
)
|
|
299
299
|
)
|
|
@@ -393,7 +393,10 @@ export async function generateApi(
|
|
|
393
393
|
}
|
|
394
394
|
|
|
395
395
|
const QueryArg = generateQueryArgType(operationDefinition);
|
|
396
|
-
const wrappedQueryArg = factory.createTypeReferenceNode(
|
|
396
|
+
const wrappedQueryArg = factory.createTypeReferenceNode(
|
|
397
|
+
factory.createIdentifier('IUseFetcherArgs'),
|
|
398
|
+
[QueryArg]
|
|
399
|
+
);
|
|
397
400
|
|
|
398
401
|
const endpointBuilder = factory.createIdentifier('build');
|
|
399
402
|
|