@acrool/rtk-query-codegen-openapi 0.0.2-test.8 → 0.0.2-test.9

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 CHANGED
@@ -479,12 +479,14 @@ async function generateApi(spec, {
479
479
  );
480
480
  const printer2 = import_typescript4.default.createPrinter({ newLine: import_typescript4.default.NewLineKind.LineFeed });
481
481
  const allTypeDefinitions = [];
482
+ const definedTypeNames = /* @__PURE__ */ new Set();
482
483
  const components = v3Doc.components;
483
484
  if (components) {
484
485
  const componentDefinitions = Object.entries(components).map(([componentType, componentDefs]) => {
485
486
  const typeEntries = Object.entries(componentDefs).map(([name, def]) => {
486
487
  addSchemeTypeName(name);
487
488
  const typeName = capitalize((0, import_lodash.default)(name));
489
+ definedTypeNames.add(typeName);
488
490
  const typeNode = wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(def));
489
491
  return factory.createTypeAliasDeclaration(
490
492
  [factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
@@ -502,10 +504,101 @@ async function generateApi(spec, {
502
504
  });
503
505
  allTypeDefinitions.push(...componentDefinitions);
504
506
  }
505
- if (useEnumType) {
506
- allTypeDefinitions.push(...apiGen.enumAliases);
507
+ const enumEntries = [
508
+ ...apiGen.enumAliases.filter((e) => import_typescript4.default.isEnumDeclaration(e)),
509
+ ...apiGen.enumAliases.filter((e) => import_typescript4.default.isTypeAliasDeclaration(e))
510
+ ].map((enumDecl) => {
511
+ if (import_typescript4.default.isEnumDeclaration(enumDecl)) {
512
+ return factory.createEnumDeclaration(
513
+ [factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
514
+ enumDecl.name,
515
+ enumDecl.members
516
+ );
517
+ } else if (import_typescript4.default.isTypeAliasDeclaration(enumDecl)) {
518
+ return factory.createTypeAliasDeclaration(
519
+ [factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
520
+ enumDecl.name,
521
+ enumDecl.typeParameters,
522
+ enumDecl.type
523
+ );
524
+ }
525
+ return enumDecl;
526
+ });
527
+ const unionTypeEnums = apiGen.aliases.filter((alias) => {
528
+ if (import_typescript4.default.isTypeAliasDeclaration(alias) && alias.type) {
529
+ return import_typescript4.default.isUnionTypeNode(alias.type);
530
+ }
531
+ return false;
532
+ }).map((alias) => {
533
+ if (import_typescript4.default.isTypeAliasDeclaration(alias)) {
534
+ return factory.createTypeAliasDeclaration(
535
+ [factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
536
+ alias.name,
537
+ alias.typeParameters,
538
+ alias.type
539
+ );
540
+ }
541
+ return alias;
542
+ });
543
+ const allEnumEntries = [...enumEntries, ...unionTypeEnums];
544
+ if (allEnumEntries.length > 0) {
545
+ allTypeDefinitions.push(
546
+ factory.createModuleDeclaration(
547
+ [factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
548
+ factory.createIdentifier("Enum"),
549
+ factory.createModuleBlock(allEnumEntries),
550
+ import_typescript4.default.NodeFlags.Namespace
551
+ )
552
+ );
553
+ }
554
+ if (apiGen.aliases.length > 0) {
555
+ const aliasEntries = apiGen.aliases.filter((alias) => {
556
+ if (import_typescript4.default.isTypeAliasDeclaration(alias)) {
557
+ const isDefinedInComponents = definedTypeNames.has(alias.name.text);
558
+ const isUnionTypeEnum = import_typescript4.default.isUnionTypeNode(alias.type);
559
+ return !isDefinedInComponents && !isUnionTypeEnum;
560
+ }
561
+ return false;
562
+ }).map((alias) => {
563
+ if (import_typescript4.default.isTypeAliasDeclaration(alias)) {
564
+ return factory.createTypeAliasDeclaration(
565
+ [factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
566
+ alias.name,
567
+ alias.typeParameters,
568
+ alias.type
569
+ );
570
+ }
571
+ return alias;
572
+ });
573
+ if (aliasEntries.length > 0) {
574
+ const existingSchemeIndex = allTypeDefinitions.findIndex(
575
+ (def) => import_typescript4.default.isModuleDeclaration(def) && import_typescript4.default.isIdentifier(def.name) && def.name.text === "Scheme"
576
+ );
577
+ if (existingSchemeIndex >= 0) {
578
+ const existingScheme = allTypeDefinitions[existingSchemeIndex];
579
+ const mergedMembers = [...existingScheme.body.statements, ...aliasEntries];
580
+ allTypeDefinitions[existingSchemeIndex] = factory.createModuleDeclaration(
581
+ [factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
582
+ factory.createIdentifier("Scheme"),
583
+ factory.createModuleBlock(mergedMembers),
584
+ import_typescript4.default.NodeFlags.Namespace
585
+ );
586
+ } else {
587
+ allTypeDefinitions.push(
588
+ factory.createModuleDeclaration(
589
+ [factory.createModifier(import_typescript4.default.SyntaxKind.ExportKeyword)],
590
+ factory.createIdentifier("Scheme"),
591
+ factory.createModuleBlock(aliasEntries),
592
+ import_typescript4.default.NodeFlags.Namespace
593
+ )
594
+ );
595
+ }
596
+ }
507
597
  }
508
- allTypeDefinitions.push(...apiGen.aliases);
598
+ const fs2 = await import("node:fs/promises");
599
+ const path4 = await import("node:path");
600
+ const sharedTypesDir = path4.dirname(sharedTypesFile);
601
+ await fs2.mkdir(sharedTypesDir, { recursive: true });
509
602
  const output = printer2.printNode(
510
603
  import_typescript4.default.EmitHint.Unspecified,
511
604
  factory.createSourceFile(
@@ -515,7 +608,6 @@ async function generateApi(spec, {
515
608
  ),
516
609
  resultFile2
517
610
  );
518
- const fs2 = await import("node:fs/promises");
519
611
  await fs2.writeFile(sharedTypesFile, output, "utf-8");
520
612
  }
521
613
  if (apiGen.spec.components?.schemas) {
@@ -560,7 +652,12 @@ async function generateApi(spec, {
560
652
  [
561
653
  generateImportNode(apiFile, { [apiImport]: "api" }),
562
654
  generateImportNode("@acrool/react-fetcher", { IRestFulEndpointsQueryReturn: "IRestFulEndpointsQueryReturn" }),
563
- ...sharedTypesFile ? [generateImportNode(sharedTypesImportPath, { Scheme: "Scheme" })] : [],
655
+ ...sharedTypesFile ? [
656
+ generateImportNode(sharedTypesImportPath, {
657
+ Scheme: "Scheme",
658
+ ...useEnumType ? { Enum: "Enum" } : {}
659
+ })
660
+ ] : [],
564
661
  ...tag ? [generateTagTypes({ addTagTypes: extractAllTagTypes({ operationDefinitions }) })] : [],
565
662
  generateCreateApiCall({
566
663
  tag,
@@ -635,25 +732,6 @@ async function generateApi(spec, {
635
732
  ).filter(
636
733
  ([status, response]) => isDataResponse(status, includeDefault, apiGen.resolve(response), responses || {})
637
734
  ).filter(([_1, _2, type]) => type !== import_generate3.keywordType.void).map(([code, response, type]) => {
638
- if (sharedTypesFile2 && import_typescript4.default.isTypeReferenceNode(type) && type.typeName) {
639
- if (import_typescript4.default.isIdentifier(type.typeName)) {
640
- const typeName = type.typeName.text;
641
- if (typeName in apiGen.aliases || typeName in apiGen.enumAliases) {
642
- return import_typescript4.default.addSyntheticLeadingComment(
643
- factory.createTypeReferenceNode(
644
- factory.createQualifiedName(
645
- factory.createIdentifier("sharedTypes"),
646
- factory.createIdentifier((0, import_lodash.default)(typeName))
647
- ),
648
- type.typeArguments
649
- ),
650
- import_typescript4.default.SyntaxKind.MultiLineCommentTrivia,
651
- `* status ${code} ${response.description} `,
652
- false
653
- );
654
- }
655
- }
656
- }
657
735
  return import_typescript4.default.addSyntheticLeadingComment(
658
736
  type,
659
737
  import_typescript4.default.SyntaxKind.MultiLineCommentTrivia,
@@ -862,6 +940,28 @@ async function generateApi(spec, {
862
940
  function wrapWithSchemeIfComponent(typeNode) {
863
941
  if (import_typescript4.default.isTypeReferenceNode(typeNode) && import_typescript4.default.isIdentifier(typeNode.typeName)) {
864
942
  const typeName = typeNode.typeName.text;
943
+ const isEnumType = useEnumType && (apiGen.enumAliases.some((enumDecl) => {
944
+ if (import_typescript4.default.isEnumDeclaration(enumDecl) || import_typescript4.default.isTypeAliasDeclaration(enumDecl)) {
945
+ return enumDecl.name.text === typeName;
946
+ }
947
+ return false;
948
+ }) || apiGen.aliases.some((alias) => {
949
+ if (import_typescript4.default.isTypeAliasDeclaration(alias) && alias.type) {
950
+ if (import_typescript4.default.isUnionTypeNode(alias.type)) {
951
+ return alias.name.text === typeName;
952
+ }
953
+ }
954
+ return false;
955
+ }));
956
+ if (isEnumType) {
957
+ return factory.createTypeReferenceNode(
958
+ factory.createQualifiedName(
959
+ factory.createIdentifier("Enum"),
960
+ typeNode.typeName
961
+ ),
962
+ typeNode.typeArguments?.map(wrapWithSchemeIfComponent)
963
+ );
964
+ }
865
965
  if (schemeTypeNames.has(typeName)) {
866
966
  return factory.createTypeReferenceNode(
867
967
  factory.createQualifiedName(
@@ -882,6 +982,40 @@ async function generateApi(spec, {
882
982
  return factory.createArrayTypeNode(wrapWithSchemeIfComponent(typeNode.elementType));
883
983
  }
884
984
  if (import_typescript4.default.isUnionTypeNode(typeNode)) {
985
+ const unionTypes = typeNode.types;
986
+ if (unionTypes.length > 0 && unionTypes.every(
987
+ (type) => import_typescript4.default.isLiteralTypeNode(type) && (import_typescript4.default.isStringLiteral(type.literal) || import_typescript4.default.isNumericLiteral(type.literal))
988
+ )) {
989
+ const enumValues = unionTypes.map((type) => {
990
+ if (import_typescript4.default.isLiteralTypeNode(type)) {
991
+ if (import_typescript4.default.isStringLiteral(type.literal)) {
992
+ return type.literal.text;
993
+ } else if (import_typescript4.default.isNumericLiteral(type.literal)) {
994
+ return type.literal.text;
995
+ }
996
+ }
997
+ return null;
998
+ }).filter(Boolean);
999
+ const matchingEnum = apiGen.aliases.find((alias) => {
1000
+ if (import_typescript4.default.isTypeAliasDeclaration(alias) && import_typescript4.default.isUnionTypeNode(alias.type)) {
1001
+ const aliasValues = alias.type.types.map((type) => {
1002
+ if (import_typescript4.default.isLiteralTypeNode(type)) {
1003
+ if (import_typescript4.default.isStringLiteral(type.literal)) {
1004
+ return type.literal.text;
1005
+ } else if (import_typescript4.default.isNumericLiteral(type.literal)) {
1006
+ return type.literal.text;
1007
+ }
1008
+ }
1009
+ return null;
1010
+ }).filter(Boolean);
1011
+ return aliasValues.length === enumValues.length && aliasValues.every((val) => enumValues.includes(val));
1012
+ }
1013
+ return false;
1014
+ });
1015
+ if (matchingEnum && import_typescript4.default.isTypeAliasDeclaration(matchingEnum)) {
1016
+ return typeNode;
1017
+ }
1018
+ }
885
1019
  return factory.createUnionTypeNode(typeNode.types.map(wrapWithSchemeIfComponent));
886
1020
  }
887
1021
  if (import_typescript4.default.isTypeLiteralNode(typeNode)) {
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';\nimport camelCase from 'lodash.camelcase';\nexport type { OutputFilesConfig, ConfigFile } from './types';\n\nconst require = createRequire(__filename);\n\n\n\n// 確保目錄存在的函數\nasync function ensureDirectoryExists(filePath: string) {\n const dirname = path.dirname(filePath);\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true });\n }\n}\n\n\n// 檢查檔案是否存在的函數\nfunction fileExists(filePath: string): boolean {\n try {\n return fs.statSync(filePath).isFile();\n } catch {\n return false;\n }\n}\n\n// 獲取資料夾名稱並轉換為 API 名稱\nfunction getApiNameFromDir(dirPath: string): string {\n const dirName = path.basename(dirPath);\n return `${dirName}Api`;\n}\n\n// 確保基礎文件存在的函數\nasync function ensureBaseFilesExist(outputDir: string) {\n const enhanceEndpointsPath = path.join(outputDir, 'enhanceEndpoints.ts');\n const indexPath = path.join(outputDir, 'index.ts');\n const apiName = getApiNameFromDir(outputDir);\n\n // 如果 enhanceEndpoints.ts 不存在,創建它\n if (!fileExists(enhanceEndpointsPath)) {\n const enhanceEndpointsContent = `import api from './query.generated';\n\nconst enhancedApi = api.enhanceEndpoints({\n endpoints: {\n },\n});\n\nexport default enhancedApi;\n`;\n await fs.promises.writeFile(enhanceEndpointsPath, enhanceEndpointsContent, 'utf-8');\n }\n\n // 如果 index.ts 不存在,創建它\n if (!fileExists(indexPath)) {\n const indexContent = `export * from './query.generated';\nexport {default as ${apiName}} from './enhanceEndpoints';\n`;\n await fs.promises.writeFile(indexPath, indexContent, 'utf-8');\n }\n}\n\n\n// 從路徑中提取分類名稱\nfunction getGroupNameFromPath(path: string, pattern: RegExp): string {\n // console.log('pattern', pattern);\n\n const match = path.match(pattern);\n // console.log('match', path, match);\n\n if (match && match[1]) {\n return camelCase(match[1]);\n }\n return 'common';\n}\n\n\n\n\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 const outputPath = path.resolve(process.cwd(), outputFile);\n await ensureDirectoryExists(outputPath);\n\n // 確保基礎文件存在\n const outputDir = path.dirname(outputPath);\n await ensureBaseFilesExist(outputDir);\n\n fs.writeFileSync(\n outputPath,\n await prettify(outputFile, sourceCode, prettierConfigFile)\n );\n } else {\n return await prettify(null, sourceCode, prettierConfigFile);\n }\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\n // 讀取 OpenAPI 文檔\n const openApiDoc = JSON.parse(fs.readFileSync(fullConfig.schemaFile, 'utf-8'));\n const paths = Object.keys(openApiDoc.paths);\n\n // 從配置中獲取分類規則\n const [outputPath, config] = Object.entries(outputFiles)[0];\n const patterns = config.groupMatch;\n const filterEndpoint = config.filterEndpoint;\n\n const pattern = patterns;\n // 根據路徑自動分類\n const groupedPaths = paths.reduce((acc, path) => {\n const groupName = getGroupNameFromPath(path, pattern);\n if (!acc[groupName]) {\n acc[groupName] = [];\n }\n acc[groupName].push(path);\n return acc;\n }, {} as Record<string, string[]>);\n\n // 為每個分類生成配置\n Object.entries(groupedPaths).forEach(([groupName, paths]) => {\n const finalOutputPath = outputPath.replace('$1', groupName);\n\n if (filterEndpoint) {\n // 如果有 filterEndpoint,使用基於路徑的篩選函數\n const pathBasedFilter = (operationName: string, operationDefinition: any) => {\n const path = operationDefinition.path;\n \n // 檢查路徑是否匹配當前分組\n const pathGroupName = getGroupNameFromPath(path, pattern);\n if (pathGroupName !== groupName) {\n return false;\n }\n\n // 使用 filterEndpoint 進行額外篩選\n const endpointFilter = filterEndpoint(groupName);\n if (endpointFilter instanceof RegExp) {\n return endpointFilter.test(operationName);\n }\n\n return true;\n };\n\n outFiles.push({\n ...commonConfig,\n outputFile: finalOutputPath,\n filterEndpoints: pathBasedFilter,\n });\n } else {\n // 如果沒有 filterEndpoint,只使用路徑分組\n const pathBasedFilter = (operationName: string, operationDefinition: any) => {\n const path = operationDefinition.path;\n \n // 檢查路徑是否匹配當前分組\n const pathGroupName = getGroupNameFromPath(path, pattern);\n return pathGroupName === groupName;\n };\n\n outFiles.push({\n ...commonConfig,\n outputFile: finalOutputPath,\n filterEndpoints: pathBasedFilter,\n });\n }\n });\n\n } else {\n outFiles.push(fullConfig);\n }\n return outFiles;\n}\n\n/**\n * Enforces `oazapfts` to use the same TypeScript version as this module itself uses.\n * That should prevent enums from running out of sync if both libraries use different TS versions.\n */\nfunction enforceOazapftsTsVersion<T>(cb: () => T): T {\n const ozTsPath = require.resolve('typescript', { paths: [require.resolve('oazapfts')] });\n const tsPath = require.resolve('typescript');\n const originalEntry = require.cache[ozTsPath];\n try {\n require.cache[ozTsPath] = require.cache[tsPath];\n return cb();\n } finally {\n if (originalEntry) {\n require.cache[ozTsPath] = originalEntry;\n } else {\n delete require.cache[ozTsPath];\n }\n }\n}\n","import camelCase from 'lodash.camelcase';\nimport path from 'node:path';\nimport ApiGenerator, {\n getOperationName as _getOperationName,\n getReferenceName,\n isReference,\n supportDeepObjects,\n createPropertyAssignment,\n createQuestionToken,\n isValidIdentifier,\n keywordType,\n} from 'oazapfts/generate';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport ts from 'typescript';\nimport type { ObjectPropertyDefinitions } from './codegen';\nimport { generateCreateApiCall, generateEndpointDefinition, generateImportNode, generateTagTypes } from './codegen';\nimport { generateReactHooks } from './generators/react-hooks';\nimport type {\n EndpointMatcher,\n EndpointOverrides,\n GenerationOptions,\n OperationDefinition,\n ParameterDefinition,\n ParameterMatcher,\n TextMatcher,\n} from './types';\nimport { capitalize, getOperationDefinitions, getV3Doc, removeUndefined, isQuery as testIsQuery } from './utils';\nimport { factory } from './utils/factory';\n\nconst generatedApiName = 'injectedRtkApi';\nconst v3DocCache: Record<string, OpenAPIV3.Document> = {};\n\nfunction defaultIsDataResponse(code: string, includeDefault: boolean) {\n if (includeDefault && code === 'default') {\n return true;\n }\n const parsedCode = Number(code);\n return !Number.isNaN(parsedCode) && parsedCode >= 200 && parsedCode < 300;\n}\n\nfunction getOperationName({ verb, path }: Pick<OperationDefinition, 'verb' | 'path' >) {\n return _getOperationName(verb, path, undefined);\n}\n\nfunction getTags({ verb, pathItem }: Pick<OperationDefinition, 'verb' | 'pathItem'>): string[] {\n return verb ? pathItem[verb]?.tags || [] : [];\n}\n\nfunction patternMatches(pattern?: TextMatcher) {\n const filters = Array.isArray(pattern) ? pattern : [pattern];\n return function matcher(operationName: string) {\n if (!pattern) return true;\n return filters.some((filter) =>\n typeof filter === 'string' ? filter === operationName : filter?.test(operationName)\n );\n };\n}\n\nfunction operationMatches(pattern?: EndpointMatcher) {\n const checkMatch = typeof pattern === 'function' ? pattern : patternMatches(pattern);\n return function matcher(operationDefinition: OperationDefinition) {\n if (!pattern) return true;\n const operationName = getOperationName(operationDefinition);\n return checkMatch(operationName, operationDefinition);\n };\n}\n\nfunction argumentMatches(pattern?: ParameterMatcher) {\n const checkMatch = typeof pattern === 'function' ? pattern : patternMatches(pattern);\n return function matcher(argumentDefinition: ParameterDefinition) {\n if (!pattern || argumentDefinition.in === 'path') return true;\n const argumentName = argumentDefinition.name;\n return checkMatch(argumentName, argumentDefinition);\n };\n}\n\nfunction withQueryComment<T extends ts.Node>(node: T, def: QueryArgDefinition, hasTrailingNewLine: boolean): T {\n const comment = def.origin === 'param' ? def.param.description : def.body.description;\n if (comment) {\n return ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* ${comment} `,\n hasTrailingNewLine\n );\n }\n return node;\n}\n\nexport function getOverrides(\n operation: OperationDefinition,\n endpointOverrides?: EndpointOverrides[]\n): EndpointOverrides | undefined {\n return endpointOverrides?.find((override) => operationMatches(override.pattern)(operation));\n}\n\nexport async function generateApi(\n spec: string,\n {\n apiFile,\n apiImport = 'api',\n exportName = 'enhancedApi',\n argSuffix = 'ApiArg',\n responseSuffix = 'ApiResponse',\n operationNameSuffix = '',\n hooks = false,\n tag = false,\n outputFile,\n isDataResponse = defaultIsDataResponse,\n filterEndpoints,\n endpointOverrides,\n unionUndefined,\n encodePathParams = false,\n encodeQueryParams = false,\n flattenArg = false,\n includeDefault = false,\n useEnumType = false,\n mergeReadWriteOnly = false,\n httpResolverOptions,\n sharedTypesFile,\n }: GenerationOptions\n) {\n const v3Doc = (v3DocCache[spec] ??= await getV3Doc(spec, httpResolverOptions));\n\n const apiGen = new ApiGenerator(v3Doc, {\n unionUndefined,\n useEnumType,\n mergeReadWriteOnly,\n });\n\n const schemeTypeNames = new Set<string>();\n\n function addSchemeTypeName(name: string) {\n schemeTypeNames.add(name);\n schemeTypeNames.add(camelCase(name));\n schemeTypeNames.add(capitalize(camelCase(name)));\n }\n\n if (sharedTypesFile) {\n const resultFile = ts.createSourceFile(\n 'sharedTypes.ts',\n '',\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS\n );\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n const allTypeDefinitions: ts.Statement[] = [];\n\n const components = v3Doc.components;\n if (components) {\n const componentDefinitions = Object.entries(components).map(([componentType, componentDefs]) => {\n const typeEntries = Object.entries(componentDefs as Record<string, unknown>).map(([name, def]) => {\n addSchemeTypeName(name);\n \n const typeName = capitalize(camelCase(name));\n const typeNode = wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(def as OpenAPIV3.SchemaObject));\n return factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n typeNode\n );\n });\n\n return factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier('Scheme'),\n factory.createModuleBlock(typeEntries),\n ts.NodeFlags.Namespace\n );\n });\n allTypeDefinitions.push(...componentDefinitions);\n }\n\n if (useEnumType) {\n allTypeDefinitions.push(...apiGen.enumAliases);\n }\n\n allTypeDefinitions.push(...apiGen.aliases);\n\n const output = printer.printNode(\n ts.EmitHint.Unspecified,\n factory.createSourceFile(\n allTypeDefinitions,\n factory.createToken(ts.SyntaxKind.EndOfFileToken),\n ts.NodeFlags.None\n ),\n resultFile\n );\n\n const fs = await import('node:fs/promises');\n await fs.writeFile(sharedTypesFile, output, 'utf-8');\n }\n\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 const sharedTypesImportPath = sharedTypesFile && outputFile\n ? (() => {\n let rel = path.relative(path.dirname(outputFile), sharedTypesFile)\n .replace(/\\\\/g, '/')\n .replace(/\\.[jt]sx?$/, '');\n if (!rel.startsWith('.')) rel = './' + rel;\n return rel;\n })()\n : './shared-types';\n\n return printer.printNode(\n ts.EmitHint.Unspecified,\n factory.createSourceFile(\n [\n generateImportNode(apiFile, { [apiImport]: 'api' }),\n generateImportNode('@acrool/react-fetcher', { IRestFulEndpointsQueryReturn: 'IRestFulEndpointsQueryReturn' }),\n ...(sharedTypesFile ? [generateImportNode(sharedTypesImportPath, { Scheme: 'Scheme' })] : []),\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 sharedTypesFile: !!sharedTypesFile,\n })\n ),\n true\n ),\n }),\n factory.createExportAssignment(\n undefined,\n undefined,\n factory.createIdentifier(generatedApiName)\n ),\n ...Object.values(interfaces),\n ...(sharedTypesFile ? [] : [...apiGen.aliases, ...apiGen.enumAliases]),\n ...(hooks\n ? [\n generateReactHooks({\n exportName: generatedApiName,\n operationDefinitions,\n endpointOverrides,\n config: hooks,\n }),\n ]\n : []),\n ],\n factory.createToken(ts.SyntaxKind.EndOfFileToken),\n ts.NodeFlags.None\n ),\n resultFile\n );\n\n function extractAllTagTypes({ operationDefinitions }: { operationDefinitions: OperationDefinition[] }) {\n const allTagTypes = new Set<string>();\n\n for (const operationDefinition of operationDefinitions) {\n const { verb, pathItem } = operationDefinition;\n for (const tag of getTags({ verb, pathItem })) {\n allTagTypes.add(tag);\n }\n }\n return [...allTagTypes];\n }\n\n function generateEndpoint({\n operationDefinition,\n overrides,\n sharedTypesFile,\n }: {\n operationDefinition: OperationDefinition;\n overrides?: EndpointOverrides;\n sharedTypesFile: boolean;\n }) {\n const {\n verb,\n path,\n pathItem,\n operation,\n operation: { responses, requestBody },\n } = operationDefinition;\n const operationName = getOperationName({ verb, path });\n const tags = tag ? getTags({ verb, pathItem }) : [];\n const isQuery = testIsQuery(verb, overrides);\n\n const returnsJson = apiGen.getResponseType(responses) === 'json';\n let ResponseType: ts.TypeNode = factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n if (returnsJson) {\n const returnTypes = Object.entries(responses || {})\n .map(\n ([code, response]) =>\n [\n code,\n apiGen.resolve(response),\n wrapWithSchemeIfComponent(\n apiGen.getTypeFromResponse(response, 'readOnly') ||\n factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)\n ),\n ] as const\n )\n .filter(([status, response]) =>\n isDataResponse(status, includeDefault, apiGen.resolve(response), responses || {})\n )\n .filter(([_1, _2, type]) => type !== keywordType.void)\n .map(([code, response, type]) => {\n if (sharedTypesFile && ts.isTypeReferenceNode(type) && type.typeName) {\n if (ts.isIdentifier(type.typeName)) {\n const typeName = type.typeName.text;\n if (typeName in apiGen.aliases || typeName in apiGen.enumAliases) {\n return ts.addSyntheticLeadingComment(\n factory.createTypeReferenceNode(\n factory.createQualifiedName(\n factory.createIdentifier('sharedTypes'),\n factory.createIdentifier(camelCase(typeName))\n ),\n type.typeArguments\n ),\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* status ${code} ${response.description} `,\n false\n );\n }\n }\n }\n return ts.addSyntheticLeadingComment(\n type,\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* status ${code} ${response.description} `,\n false\n );\n });\n if (returnTypes.length > 0) {\n ResponseType = factory.createUnionTypeNode(returnTypes);\n }\n }\n\n const ResponseTypeName = factory.createTypeReferenceNode(\n registerInterface(\n factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n capitalize(operationName + operationNameSuffix + responseSuffix),\n undefined,\n ResponseType\n )\n ).name\n );\n\n const operationParameters = apiGen.resolveArray(operation.parameters);\n const pathItemParameters = apiGen\n .resolveArray(pathItem.parameters)\n .filter((pp) => !operationParameters.some((op) => op.name === pp.name && op.in === pp.in));\n\n const parameters = supportDeepObjects([...pathItemParameters, ...operationParameters])\n .filter(argumentMatches(overrides?.parameterFilter))\n .filter(param => param.in !== 'header');\n\n const allNames = parameters.map((p) => p.name);\n const queryArg: QueryArgDefinitions = {};\n function generateName(name: string, potentialPrefix: string) {\n const isPureSnakeCase = /^[a-zA-Z][a-zA-Z0-9_]*$/.test(name);\n const hasNamingConflict = allNames.filter((n) => n === name).length > 1;\n if (hasNamingConflict) {\n name = `${potentialPrefix}_${name}`;\n }\n const camelCaseName = camelCase(name);\n if (isPureSnakeCase && !allNames.includes(camelCaseName)) {\n name = camelCaseName;\n }\n while (name in queryArg) {\n name = `_${name}`;\n }\n return name;\n }\n\n for (const param of parameters) {\n const name = generateName(param.name, param.in);\n queryArg[name] = {\n origin: 'param',\n name,\n originalName: param.name,\n type: wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(isReference(param) ? param : param.schema, undefined, 'writeOnly')),\n required: param.required,\n param,\n };\n }\n\n if (requestBody) {\n const body = apiGen.resolve(requestBody);\n const schema = apiGen.getSchemaFromContent(body.content);\n const type = wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(schema));\n const schemaName = camelCase(\n (type as any).name ||\n getReferenceName(schema) ||\n (typeof schema === 'object' && 'title' in schema && schema.title) ||\n 'body'\n );\n const name = generateName(schemaName in queryArg ? 'body' : schemaName, 'body');\n\n queryArg[name] = {\n origin: 'body',\n name,\n originalName: schemaName,\n type: wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(schema, undefined, 'writeOnly')),\n required: true,\n body,\n };\n }\n\n const propertyName = (name: string | ts.PropertyName): ts.PropertyName => {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name);\n }\n return name;\n };\n\n const queryArgValues = Object.values(queryArg);\n\n const isFlatArg = flattenArg && queryArgValues.length === 1;\n const QueryArg = factory.createTypeReferenceNode(\n registerInterface(\n factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n capitalize(operationName + operationNameSuffix + argSuffix),\n undefined,\n queryArgValues.length > 0\n ? isFlatArg\n ? withQueryComment(\n factory.createUnionTypeNode([\n queryArgValues[0].type,\n ...(!queryArgValues[0].required\n ? [factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)]\n : []),\n ]),\n queryArgValues[0],\n false\n )\n : factory.createTypeLiteralNode(\n queryArgValues.map((def) =>\n withQueryComment(\n factory.createPropertySignature(\n undefined,\n propertyName(def.name),\n createQuestionToken(!def.required),\n def.type\n ),\n def,\n true\n )\n )\n )\n : factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword)\n )\n ).name\n );\n\n return generateEndpointDefinition({\n operationName: operationNameSuffix ? capitalize(operationName + operationNameSuffix) : operationName,\n type: isQuery ? 'query' : 'mutation',\n Response: ResponseTypeName,\n QueryArg: factory.createTypeReferenceNode(\n factory.createIdentifier('IRestFulEndpointsQueryReturn'),\n [QueryArg]\n ),\n queryFn: generateQueryFn({\n operationDefinition,\n queryArg,\n isQuery,\n isFlatArg,\n encodePathParams,\n encodeQueryParams,\n }),\n extraEndpointsProps: isQuery\n ? generateQueryEndpointProps({ operationDefinition })\n : generateMutationEndpointProps({ operationDefinition }),\n tags,\n });\n }\n\n function generateQueryFn({\n operationDefinition,\n queryArg,\n isFlatArg,\n isQuery,\n encodePathParams,\n encodeQueryParams,\n }: {\n operationDefinition: OperationDefinition;\n queryArg: QueryArgDefinitions;\n isFlatArg: boolean;\n isQuery: boolean;\n encodePathParams: boolean;\n encodeQueryParams: boolean;\n }) {\n const { path, verb } = operationDefinition;\n\n const bodyParameter = Object.values(queryArg).find((def) => def.origin === 'body');\n\n const rootObject = factory.createIdentifier('queryArg');\n const variablesObject = factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables'));\n\n function pickParams(paramIn: string) {\n return Object.values(queryArg).filter((def) => def.origin === 'param' && def.param.in === paramIn);\n }\n\n function createObjectLiteralProperty(parameters: QueryArgDefinition[], propertyName: string) {\n if (parameters.length === 0) return undefined;\n\n const properties = parameters.map((param) => {\n const value = isFlatArg \n ? variablesObject \n : factory.createPropertyAccessExpression(variablesObject, factory.createIdentifier(param.name));\n\n const encodedValue =\n encodeQueryParams && param.param?.in === 'query'\n ? factory.createConditionalExpression(\n value,\n undefined,\n factory.createCallExpression(factory.createIdentifier('encodeURIComponent'), undefined, [\n factory.createCallExpression(factory.createIdentifier('String'), undefined, [value]),\n ]),\n undefined,\n factory.createIdentifier('undefined')\n )\n : value;\n\n return createPropertyAssignment(param.originalName, encodedValue);\n });\n\n return factory.createPropertyAssignment(\n factory.createIdentifier(propertyName),\n factory.createObjectLiteralExpression(properties, true)\n );\n }\n\n return factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, rootObject, undefined, undefined, undefined)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(\n factory.createObjectLiteralExpression(\n [\n factory.createPropertyAssignment(\n factory.createIdentifier('url'),\n generatePathExpression(path, pickParams('path'), variablesObject, isFlatArg, encodePathParams)\n ),\n isQuery && verb.toUpperCase() === 'GET'\n ? undefined\n : factory.createPropertyAssignment(\n factory.createIdentifier('method'),\n factory.createStringLiteral(verb.toUpperCase())\n ),\n bodyParameter === undefined\n ? undefined\n : factory.createPropertyAssignment(\n factory.createIdentifier('body'),\n isFlatArg\n ? variablesObject\n : factory.createPropertyAccessExpression(variablesObject, factory.createIdentifier(bodyParameter.name))\n ),\n createObjectLiteralProperty(pickParams('cookie'), 'cookies'),\n createObjectLiteralProperty(pickParams('query'), 'params'),\n factory.createPropertyAssignment(\n factory.createIdentifier('fetchOptions'),\n factory.createPropertyAccessChain(\n rootObject,\n factory.createToken(ts.SyntaxKind.QuestionDotToken),\n factory.createIdentifier('fetchOptions')\n )\n ),\n ].filter(removeUndefined),\n false\n )\n )\n );\n }\n\n function generateQueryEndpointProps({}: { operationDefinition: OperationDefinition }): ObjectPropertyDefinitions {\n return {};\n }\n\n function generateMutationEndpointProps({}: { operationDefinition: OperationDefinition }): ObjectPropertyDefinitions {\n return {};\n }\n\n function wrapWithSchemeIfComponent(typeNode: ts.TypeNode): ts.TypeNode {\n if (ts.isTypeReferenceNode(typeNode) && ts.isIdentifier(typeNode.typeName)) {\n const typeName = typeNode.typeName.text;\n if (schemeTypeNames.has(typeName)) {\n return factory.createTypeReferenceNode(\n factory.createQualifiedName(\n factory.createIdentifier('Scheme'),\n typeNode.typeName\n ),\n typeNode.typeArguments?.map(wrapWithSchemeIfComponent)\n );\n }\n if (typeNode.typeArguments) {\n return factory.createTypeReferenceNode(\n typeNode.typeName,\n typeNode.typeArguments.map(wrapWithSchemeIfComponent)\n );\n }\n }\n if (ts.isArrayTypeNode(typeNode)) {\n return factory.createArrayTypeNode(wrapWithSchemeIfComponent(typeNode.elementType));\n }\n if (ts.isUnionTypeNode(typeNode)) {\n return factory.createUnionTypeNode(typeNode.types.map(wrapWithSchemeIfComponent));\n }\n if (ts.isTypeLiteralNode(typeNode)) {\n return factory.createTypeLiteralNode(\n typeNode.members.map(member => {\n if (ts.isPropertySignature(member) && member.type) {\n return factory.updatePropertySignature(\n member,\n member.modifiers,\n member.name,\n member.questionToken,\n wrapWithSchemeIfComponent(member.type)\n );\n }\n return member;\n })\n );\n }\n return typeNode;\n }\n}\n\nfunction accessProperty(rootObject: ts.Identifier, propertyName: string) {\n return isValidIdentifier(propertyName)\n ? factory.createPropertyAccessExpression(rootObject, factory.createIdentifier(propertyName))\n : factory.createElementAccessExpression(rootObject, factory.createStringLiteral(propertyName));\n}\n\nfunction generatePathExpression(\n path: string,\n pathParameters: QueryArgDefinition[],\n rootObject: ts.Identifier | ts.PropertyAccessExpression,\n isFlatArg: boolean,\n encodePathParams: boolean\n) {\n const expressions: Array<[string, string]> = [];\n\n const head = path.replace(/\\{(.*?)}(.*?)(?=\\{|$)/g, (_, expression, literal) => {\n const param = pathParameters.find((p) => p.originalName === expression);\n if (!param) {\n throw new Error(`path parameter ${expression} does not seem to be defined in '${path}'!`);\n }\n expressions.push([param.name, literal]);\n return '';\n });\n\n return expressions.length\n ? factory.createTemplateExpression(\n factory.createTemplateHead(head),\n expressions.map(([prop, literal], index) => {\n const value = isFlatArg \n ? rootObject \n : factory.createPropertyAccessExpression(rootObject, factory.createIdentifier(prop));\n const encodedValue = encodePathParams\n ? factory.createCallExpression(factory.createIdentifier('encodeURIComponent'), undefined, [\n factory.createCallExpression(factory.createIdentifier('String'), undefined, [value]),\n ])\n : value;\n return factory.createTemplateSpan(\n encodedValue,\n index === expressions.length - 1\n ? factory.createTemplateTail(literal)\n : factory.createTemplateMiddle(literal)\n );\n })\n )\n : factory.createNoSubstitutionTemplateLiteral(head);\n}\n\ntype QueryArgDefinition = {\n name: string;\n originalName: string;\n type: ts.TypeNode;\n required?: boolean;\n param?: OpenAPIV3.ParameterObject;\n} & (\n | {\n origin: 'param';\n param: OpenAPIV3.ParameterObject;\n }\n | {\n origin: 'body';\n body: OpenAPIV3.RequestBodyObject;\n }\n);\ntype QueryArgDefinitions = Record<string, QueryArgDefinition>;\n","import ts from 'typescript';\nimport semver from 'semver';\n\nconst originalFactory = ts.factory;\n\nfunction createImportSpecifier(propertyName: ts.Identifier | undefined, name: ts.Identifier): ts.ImportSpecifier {\n if (semver.satisfies(ts.version, '>= 4.5'))\n // @ts-ignore\n return originalFactory.createImportSpecifier(false, propertyName, name);\n // @ts-ignore\n return originalFactory.createImportSpecifier(propertyName, name);\n}\n\nfunction createExportSpecifier(\n propertyName: string | ts.Identifier | undefined,\n name: string | ts.Identifier\n): ts.ExportSpecifier {\n if (semver.satisfies(ts.version, '>= 4.5'))\n // @ts-ignore\n return originalFactory.createExportSpecifier(false, propertyName, name);\n // @ts-ignore\n return originalFactory.createExportSpecifier(propertyName, name);\n}\n\nexport const factory = {\n ...originalFactory,\n createImportSpecifier,\n createExportSpecifier,\n};\n","import { factory } from './utils/factory';\nimport ts from 'typescript';\n\nconst defaultEndpointBuilder = factory.createIdentifier('build');\n\nexport type ObjectPropertyDefinitions = Record<string, ts.Expression | undefined>;\nexport function generateObjectProperties(obj: ObjectPropertyDefinitions) {\n return Object.entries(obj)\n .filter(([_, v]) => v)\n .map(([k, v]) => factory.createPropertyAssignment(factory.createIdentifier(k), v as ts.Expression));\n}\n\nexport function generateImportNode(pkg: string, namedImports: Record<string, string>, defaultImportName?: string) {\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n false,\n defaultImportName !== undefined ? factory.createIdentifier(defaultImportName) : undefined,\n factory.createNamedImports(\n Object.entries(namedImports).map(([propertyName, name]) =>\n factory.createImportSpecifier(\n name === propertyName ? undefined : factory.createIdentifier(propertyName),\n factory.createIdentifier(name)\n )\n )\n )\n ),\n factory.createStringLiteral(pkg)\n );\n}\n\nexport function generateCreateApiCall({\n endpointBuilder = defaultEndpointBuilder,\n endpointDefinitions,\n tag,\n}: {\n endpointBuilder?: ts.Identifier;\n endpointDefinitions: ts.ObjectLiteralExpression;\n tag: boolean;\n}) {\n const injectEndpointsObjectLiteralExpression = factory.createObjectLiteralExpression(\n generateObjectProperties({\n endpoints: factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, endpointBuilder, undefined, undefined, undefined)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(endpointDefinitions)\n ),\n overrideExisting: factory.createFalse(),\n }),\n true\n );\n if (tag) {\n const enhanceEndpointsObjectLiteralExpression = factory.createObjectLiteralExpression(\n [factory.createShorthandPropertyAssignment(factory.createIdentifier('addTagTypes'), undefined)],\n true\n );\n return factory.createVariableStatement(\n undefined,\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('injectedRtkApi'),\n undefined,\n undefined,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('api'),\n factory.createIdentifier('enhanceEndpoints')\n ),\n undefined,\n [enhanceEndpointsObjectLiteralExpression]\n ),\n factory.createIdentifier('injectEndpoints')\n ),\n undefined,\n [injectEndpointsObjectLiteralExpression]\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n }\n\n return factory.createVariableStatement(\n undefined,\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('injectedRtkApi'),\n undefined,\n undefined,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('api'),\n factory.createIdentifier('injectEndpoints')\n ),\n undefined,\n [injectEndpointsObjectLiteralExpression]\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n}\n\nexport function generateEndpointDefinition({\n operationName,\n type,\n Response,\n QueryArg,\n queryFn,\n endpointBuilder = defaultEndpointBuilder,\n extraEndpointsProps,\n tags,\n}: {\n operationName: string;\n type: 'query' | 'mutation';\n Response: ts.TypeReferenceNode;\n QueryArg: ts.TypeReferenceNode;\n queryFn: ts.Expression;\n endpointBuilder?: ts.Identifier;\n extraEndpointsProps: ObjectPropertyDefinitions;\n tags: string[];\n}) {\n const objectProperties = generateObjectProperties({ query: queryFn, ...extraEndpointsProps });\n if (tags.length > 0) {\n objectProperties.push(\n factory.createPropertyAssignment(\n factory.createIdentifier(type === 'query' ? 'providesTags' : 'invalidatesTags'),\n factory.createArrayLiteralExpression(tags.map((tag) => factory.createStringLiteral(tag), false))\n )\n );\n }\n return factory.createPropertyAssignment(\n factory.createIdentifier(operationName),\n\n factory.createCallExpression(\n factory.createPropertyAccessExpression(endpointBuilder, factory.createIdentifier(type)),\n [Response, QueryArg],\n [factory.createObjectLiteralExpression(objectProperties, true)]\n )\n );\n}\n\nexport function generateTagTypes({ addTagTypes }: { addTagTypes: string[] }) {\n return factory.createVariableStatement(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('addTagTypes'),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createArrayLiteralExpression(\n addTagTypes.map((tagType) => factory.createStringLiteral(tagType)),\n true\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined)\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n}\n","import ts from 'typescript';\nimport { getOperationName } from 'oazapfts/generate';\nimport { capitalize, isQuery } from '../utils';\nimport type { OperationDefinition, EndpointOverrides, ConfigFile } from '../types';\nimport { getOverrides } from '../generate';\nimport { factory } from '../utils/factory';\n\ntype HooksConfigOptions = NonNullable<ConfigFile['hooks']>;\n\ntype GetReactHookNameParams = {\n operationDefinition: OperationDefinition;\n endpointOverrides: EndpointOverrides[] | undefined;\n config: HooksConfigOptions;\n};\n\ntype CreateBindingParams = {\n operationDefinition: OperationDefinition;\n overrides?: EndpointOverrides;\n isLazy?: boolean;\n};\n\nconst createBinding = ({\n operationDefinition: { verb, path },\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, undefined))}${\n isQuery(verb, overrides) ? 'Query' : 'Mutation'\n }`\n ),\n undefined\n );\n\nconst getReactHookName = ({ operationDefinition, endpointOverrides, config }: GetReactHookNameParams) => {\n const overrides = getOverrides(operationDefinition, endpointOverrides);\n\n const baseParams = {\n operationDefinition,\n overrides,\n };\n\n const _isQuery = isQuery(operationDefinition.verb, overrides);\n\n // If `config` is true, just generate everything\n if (typeof config === 'boolean') {\n return createBinding(baseParams);\n }\n\n // `config` is an object and we need to check for the configuration of each property\n if (_isQuery) {\n return [\n ...(config.queries ? [createBinding(baseParams)] : []),\n ...(config.lazyQueries ? [createBinding({ ...baseParams, isLazy: true })] : []),\n ];\n }\n\n return config.mutations ? createBinding(baseParams) : [];\n};\n\ntype GenerateReactHooksParams = {\n exportName: string;\n operationDefinitions: OperationDefinition[];\n endpointOverrides: EndpointOverrides[] | undefined;\n config: HooksConfigOptions;\n};\nexport const generateReactHooks = ({\n exportName,\n operationDefinitions,\n endpointOverrides,\n config,\n}: GenerateReactHooksParams) =>\n factory.createVariableStatement(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createObjectBindingPattern(\n operationDefinitions\n .map((operationDefinition) => getReactHookName({ operationDefinition, endpointOverrides, config }))\n .flat()\n ),\n undefined,\n undefined,\n factory.createIdentifier(exportName)\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n","export function capitalize(str: string) {\n return str.replace(str[0], str[0].toUpperCase());\n}\n","import type SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nexport type OperationDefinition = {\n path: string;\n verb: (typeof operationKeys)[number];\n pathItem: OpenAPIV3.PathItemObject;\n operation: OpenAPIV3.OperationObject;\n};\n\nexport type ParameterDefinition = OpenAPIV3.ParameterObject;\n\ntype Require<T, K extends keyof T> = { [k in K]-?: NonNullable<T[k]> } & Omit<T, K>;\ntype Optional<T, K extends keyof T> = { [k in K]?: NonNullable<T[k]> } & Omit<T, K>;\ntype Id<T> = { [K in keyof T]: T[K] } & {};\ntype AtLeastOneKey<T> = {\n [K in keyof T]-?: Pick<T, K> & Partial<T>;\n}[keyof T];\n\nexport const operationKeys = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\n\nexport type GenerationOptions = Id<\n CommonOptions &\n Optional<OutputFileOptions, 'outputFile'> & {\n isDataResponse?(\n code: string,\n includeDefault: boolean,\n response: OpenAPIV3.ResponseObject,\n allResponses: OpenAPIV3.ResponsesObject\n ): boolean;\n }\n>;\n\nexport interface CommonOptions {\n apiFile: string;\n /**\n * filename or url\n */\n schemaFile: string;\n /**\n * defaults to \"api\"\n */\n apiImport?: string;\n /**\n * defaults to \"enhancedApi\"\n */\n exportName?: string;\n /**\n * defaults to \"ApiArg\"\n */\n argSuffix?: string;\n /**\n * defaults to \"ApiResponse\"\n */\n responseSuffix?: string;\n /**\n * defaults to empty\n */\n operationNameSuffix?: string;\n /**\n * defaults to `false`\n * `true` will generate hooks for queries and mutations, but no lazyQueries\n */\n hooks?: boolean | { queries: boolean; lazyQueries: boolean; mutations: boolean };\n /**\n * defaults to false\n * `true` will generate a union type for `undefined` properties like: `{ id?: string | undefined }` instead of `{ id?: string }`\n */\n unionUndefined?: boolean;\n /**\n * defaults to false\n * `true` will result in all generated endpoints having `providesTags`/`invalidatesTags` declarations for the `tags` of their respective operation definition\n * @see https://redux-toolkit.js.org/rtk-query/usage/code-generation for more information\n */\n tag?: boolean;\n /**\n * defaults to false\n * `true` will add `encodeURIComponent` to the generated path parameters\n */\n encodePathParams?: boolean;\n /**\n * defaults to false\n * `true` will add `encodeURIComponent` to the generated query parameters\n */\n encodeQueryParams?: boolean;\n /**\n * defaults to false\n * `true` will \"flatten\" the arg so that you can do things like `useGetEntityById(1)` instead of `useGetEntityById({ entityId: 1 })`\n */\n flattenArg?: boolean;\n /**\n * default to false\n * If set to `true`, the default response type will be included in the generated code for all endpoints.\n * @see https://swagger.io/docs/specification/describing-responses/#default\n */\n includeDefault?: boolean;\n /**\n * default to false\n * `true` will not generate separate types for read-only and write-only properties.\n */\n mergeReadWriteOnly?: boolean;\n /**\n *\n * HTTPResolverOptions object that is passed to the SwaggerParser bundle function.\n */\n httpResolverOptions?: SwaggerParser.HTTPResolverOptions;\n\n /**\n * defaults to undefined\n * If present the given file will be used as prettier config when formatting the generated code. If undefined the default prettier config\n * resolution mechanism will be used.\n */\n prettierConfigFile?: string;\n}\n\nexport type TextMatcher = string | RegExp | (string | RegExp)[];\n\nexport type EndpointMatcherFunction = (operationName: string, operationDefinition: OperationDefinition) => boolean;\n\nexport type EndpointMatcher = TextMatcher | EndpointMatcherFunction;\n\nexport type ParameterMatcherFunction = (parameterName: string, parameterDefinition: ParameterDefinition) => boolean;\n\nexport type ParameterMatcher = TextMatcher | ParameterMatcherFunction;\n\nexport interface OutputFileOptions extends Partial<CommonOptions> {\n outputFile: string;\n filterEndpoints?: EndpointMatcher;\n endpointOverrides?: EndpointOverrides[];\n /**\n * defaults to false\n * If passed as true it will generate TS enums instead of union of strings\n */\n useEnumType?: boolean;\n sharedTypesFile?: string;\n}\n\nexport type EndpointOverrides = {\n pattern: EndpointMatcher;\n} & AtLeastOneKey<{\n type: 'mutation' | 'query';\n parameterFilter: ParameterMatcher;\n}>;\n\nexport type OutputFilesConfig = {\n [outputFile: string]: {\n groupMatch: RegExp,\n filterEndpoint?: (groupName: string) => RegExp\n }\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 outputFiles: OutputFilesConfig\n }\n >;\n","import type { OpenAPIV3 } from 'openapi-types';\nimport type { OperationDefinition } from '../types';\nimport { operationKeys } from '../types';\n\nexport function getOperationDefinitions(v3Doc: OpenAPIV3.Document): OperationDefinition[] {\n return Object.entries(v3Doc.paths).flatMap(([path, pathItem]) =>\n !pathItem\n ? []\n : Object.entries(pathItem)\n .filter((arg): arg is [(typeof operationKeys)[number], OpenAPIV3.OperationObject] =>\n operationKeys.includes(arg[0] as any)\n )\n .map(([verb, operation]) => ({\n path,\n verb,\n pathItem,\n operation,\n }))\n );\n}\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\n// @ts-ignore\nimport converter from 'swagger2openapi';\n\nexport async function getV3Doc(\n spec: string,\n httpResolverOptions?: SwaggerParser.HTTPResolverOptions\n): Promise<OpenAPIV3.Document> {\n const doc = await SwaggerParser.bundle(spec, {\n resolve: {\n http: httpResolverOptions,\n },\n });\n\n const isOpenApiV3 = 'openapi' in doc && doc.openapi.startsWith('3');\n\n if (isOpenApiV3) {\n return doc as OpenAPIV3.Document;\n } else {\n const result = await converter.convertObj(doc, {});\n return result.openapi as OpenAPIV3.Document;\n }\n}\n","import type { EndpointOverrides, operationKeys } from '../types';\n\nexport function isQuery(verb: (typeof operationKeys)[number], overrides: EndpointOverrides | undefined) {\n if (overrides?.type) {\n return overrides.type === 'query';\n }\n return verb === 'get';\n}\n","export function isValidUrl(string: string) {\n try {\n new URL(string);\n } catch (_) {\n return false;\n }\n\n return true;\n}\n","import path from 'node:path';\nimport prettier from 'prettier';\nimport type { BuiltInParserName } from 'prettier';\n\nconst EXTENSION_TO_PARSER: Record<string, BuiltInParserName> = {\n ts: 'typescript',\n tsx: 'typescript',\n js: 'babel',\n jsx: 'babel',\n 'js.flow': 'flow',\n flow: 'flow',\n gql: 'graphql',\n graphql: 'graphql',\n css: 'scss',\n scss: 'scss',\n less: 'scss',\n stylus: 'scss',\n markdown: 'markdown',\n md: 'markdown',\n json: 'json',\n};\n\nexport async function prettify(filePath: string | null, content: string, prettierConfigFile?: string): Promise<string> {\n let config = null;\n let parser = 'typescript';\n\n if (filePath) {\n const fileExtension = path.extname(filePath).slice(1);\n parser = EXTENSION_TO_PARSER[fileExtension];\n config = await prettier.resolveConfig(process.cwd(), {\n useCache: true,\n editorconfig: !prettierConfigFile,\n config: prettierConfigFile,\n });\n } else if (prettierConfigFile) {\n config = await prettier.resolveConfig(process.cwd(), {\n useCache: true,\n config: prettierConfigFile,\n });\n }\n\n return prettier.format(content, {\n parser,\n ...config,\n });\n}\n","export function removeUndefined<T>(t: T | undefined): t is T {\n return typeof t !== 'undefined';\n}\n"],"mappings":"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","names":["import_node_path","import_node_path","import_generate","import_typescript","ts","semver","import_typescript","ts","import_typescript","path","SwaggerParser","converter","path","prettier","path","ts","getOperationName","path","_getOperationName","ts","ApiGenerator","camelCase","resultFile","printer","fs","operationDefinitions","tag","sharedTypesFile","isQuery","encodePathParams","encodeQueryParams","path","import_lodash","require","path","fs","camelCase","paths"]}
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';\nimport camelCase from 'lodash.camelcase';\nexport type { OutputFilesConfig, ConfigFile } from './types';\n\nconst require = createRequire(__filename);\n\n\n\n// 確保目錄存在的函數\nasync function ensureDirectoryExists(filePath: string) {\n const dirname = path.dirname(filePath);\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true });\n }\n}\n\n\n// 檢查檔案是否存在的函數\nfunction fileExists(filePath: string): boolean {\n try {\n return fs.statSync(filePath).isFile();\n } catch {\n return false;\n }\n}\n\n// 獲取資料夾名稱並轉換為 API 名稱\nfunction getApiNameFromDir(dirPath: string): string {\n const dirName = path.basename(dirPath);\n return `${dirName}Api`;\n}\n\n// 確保基礎文件存在的函數\nasync function ensureBaseFilesExist(outputDir: string) {\n const enhanceEndpointsPath = path.join(outputDir, 'enhanceEndpoints.ts');\n const indexPath = path.join(outputDir, 'index.ts');\n const apiName = getApiNameFromDir(outputDir);\n\n // 如果 enhanceEndpoints.ts 不存在,創建它\n if (!fileExists(enhanceEndpointsPath)) {\n const enhanceEndpointsContent = `import api from './query.generated';\n\nconst enhancedApi = api.enhanceEndpoints({\n endpoints: {\n },\n});\n\nexport default enhancedApi;\n`;\n await fs.promises.writeFile(enhanceEndpointsPath, enhanceEndpointsContent, 'utf-8');\n }\n\n // 如果 index.ts 不存在,創建它\n if (!fileExists(indexPath)) {\n const indexContent = `export * from './query.generated';\nexport {default as ${apiName}} from './enhanceEndpoints';\n`;\n await fs.promises.writeFile(indexPath, indexContent, 'utf-8');\n }\n}\n\n\n// 從路徑中提取分類名稱\nfunction getGroupNameFromPath(path: string, pattern: RegExp): string {\n // console.log('pattern', pattern);\n\n const match = path.match(pattern);\n // console.log('match', path, match);\n\n if (match && match[1]) {\n return camelCase(match[1]);\n }\n return 'common';\n}\n\n\n\n\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 const outputPath = path.resolve(process.cwd(), outputFile);\n await ensureDirectoryExists(outputPath);\n\n // 確保基礎文件存在\n const outputDir = path.dirname(outputPath);\n await ensureBaseFilesExist(outputDir);\n\n fs.writeFileSync(\n outputPath,\n await prettify(outputFile, sourceCode, prettierConfigFile)\n );\n } else {\n return await prettify(null, sourceCode, prettierConfigFile);\n }\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\n // 讀取 OpenAPI 文檔\n const openApiDoc = JSON.parse(fs.readFileSync(fullConfig.schemaFile, 'utf-8'));\n const paths = Object.keys(openApiDoc.paths);\n\n // 從配置中獲取分類規則\n const [outputPath, config] = Object.entries(outputFiles)[0];\n const patterns = config.groupMatch;\n const filterEndpoint = config.filterEndpoint;\n\n const pattern = patterns;\n // 根據路徑自動分類\n const groupedPaths = paths.reduce((acc, path) => {\n const groupName = getGroupNameFromPath(path, pattern);\n if (!acc[groupName]) {\n acc[groupName] = [];\n }\n acc[groupName].push(path);\n return acc;\n }, {} as Record<string, string[]>);\n\n // 為每個分類生成配置\n Object.entries(groupedPaths).forEach(([groupName, paths]) => {\n const finalOutputPath = outputPath.replace('$1', groupName);\n\n if (filterEndpoint) {\n // 如果有 filterEndpoint,使用基於路徑的篩選函數\n const pathBasedFilter = (operationName: string, operationDefinition: any) => {\n const path = operationDefinition.path;\n \n // 檢查路徑是否匹配當前分組\n const pathGroupName = getGroupNameFromPath(path, pattern);\n if (pathGroupName !== groupName) {\n return false;\n }\n\n // 使用 filterEndpoint 進行額外篩選\n const endpointFilter = filterEndpoint(groupName);\n if (endpointFilter instanceof RegExp) {\n return endpointFilter.test(operationName);\n }\n\n return true;\n };\n\n outFiles.push({\n ...commonConfig,\n outputFile: finalOutputPath,\n filterEndpoints: pathBasedFilter,\n });\n } else {\n // 如果沒有 filterEndpoint,只使用路徑分組\n const pathBasedFilter = (operationName: string, operationDefinition: any) => {\n const path = operationDefinition.path;\n \n // 檢查路徑是否匹配當前分組\n const pathGroupName = getGroupNameFromPath(path, pattern);\n return pathGroupName === groupName;\n };\n\n outFiles.push({\n ...commonConfig,\n outputFile: finalOutputPath,\n filterEndpoints: pathBasedFilter,\n });\n }\n });\n\n } else {\n outFiles.push(fullConfig);\n }\n return outFiles;\n}\n\n/**\n * Enforces `oazapfts` to use the same TypeScript version as this module itself uses.\n * That should prevent enums from running out of sync if both libraries use different TS versions.\n */\nfunction enforceOazapftsTsVersion<T>(cb: () => T): T {\n const ozTsPath = require.resolve('typescript', { paths: [require.resolve('oazapfts')] });\n const tsPath = require.resolve('typescript');\n const originalEntry = require.cache[ozTsPath];\n try {\n require.cache[ozTsPath] = require.cache[tsPath];\n return cb();\n } finally {\n if (originalEntry) {\n require.cache[ozTsPath] = originalEntry;\n } else {\n delete require.cache[ozTsPath];\n }\n }\n}\n","import camelCase from 'lodash.camelcase';\nimport path from 'node:path';\nimport ApiGenerator, {\n getOperationName as _getOperationName,\n getReferenceName,\n isReference,\n supportDeepObjects,\n createPropertyAssignment,\n createQuestionToken,\n isValidIdentifier,\n keywordType,\n} from 'oazapfts/generate';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport ts from 'typescript';\nimport type { ObjectPropertyDefinitions } from './codegen';\nimport { generateCreateApiCall, generateEndpointDefinition, generateImportNode, generateTagTypes } from './codegen';\nimport { generateReactHooks } from './generators/react-hooks';\nimport type {\n EndpointMatcher,\n EndpointOverrides,\n GenerationOptions,\n OperationDefinition,\n ParameterDefinition,\n ParameterMatcher,\n TextMatcher,\n} from './types';\nimport { capitalize, getOperationDefinitions, getV3Doc, removeUndefined, isQuery as testIsQuery } from './utils';\nimport { factory } from './utils/factory';\n\nconst generatedApiName = 'injectedRtkApi';\nconst v3DocCache: Record<string, OpenAPIV3.Document> = {};\n\nfunction defaultIsDataResponse(code: string, includeDefault: boolean) {\n if (includeDefault && code === 'default') {\n return true;\n }\n const parsedCode = Number(code);\n return !Number.isNaN(parsedCode) && parsedCode >= 200 && parsedCode < 300;\n}\n\nfunction getOperationName({ verb, path }: Pick<OperationDefinition, 'verb' | 'path' >) {\n return _getOperationName(verb, path, undefined);\n}\n\nfunction getTags({ verb, pathItem }: Pick<OperationDefinition, 'verb' | 'pathItem'>): string[] {\n return verb ? pathItem[verb]?.tags || [] : [];\n}\n\nfunction patternMatches(pattern?: TextMatcher) {\n const filters = Array.isArray(pattern) ? pattern : [pattern];\n return function matcher(operationName: string) {\n if (!pattern) return true;\n return filters.some((filter) =>\n typeof filter === 'string' ? filter === operationName : filter?.test(operationName)\n );\n };\n}\n\nfunction operationMatches(pattern?: EndpointMatcher) {\n const checkMatch = typeof pattern === 'function' ? pattern : patternMatches(pattern);\n return function matcher(operationDefinition: OperationDefinition) {\n if (!pattern) return true;\n const operationName = getOperationName(operationDefinition);\n return checkMatch(operationName, operationDefinition);\n };\n}\n\nfunction argumentMatches(pattern?: ParameterMatcher) {\n const checkMatch = typeof pattern === 'function' ? pattern : patternMatches(pattern);\n return function matcher(argumentDefinition: ParameterDefinition) {\n if (!pattern || argumentDefinition.in === 'path') return true;\n const argumentName = argumentDefinition.name;\n return checkMatch(argumentName, argumentDefinition);\n };\n}\n\nfunction withQueryComment<T extends ts.Node>(node: T, def: QueryArgDefinition, hasTrailingNewLine: boolean): T {\n const comment = def.origin === 'param' ? def.param.description : def.body.description;\n if (comment) {\n return ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* ${comment} `,\n hasTrailingNewLine\n );\n }\n return node;\n}\n\nexport function getOverrides(\n operation: OperationDefinition,\n endpointOverrides?: EndpointOverrides[]\n): EndpointOverrides | undefined {\n return endpointOverrides?.find((override) => operationMatches(override.pattern)(operation));\n}\n\nexport async function generateApi(\n spec: string,\n {\n apiFile,\n apiImport = 'api',\n exportName = 'enhancedApi',\n argSuffix = 'ApiArg',\n responseSuffix = 'ApiResponse',\n operationNameSuffix = '',\n hooks = false,\n tag = false,\n outputFile,\n isDataResponse = defaultIsDataResponse,\n filterEndpoints,\n endpointOverrides,\n unionUndefined,\n encodePathParams = false,\n encodeQueryParams = false,\n flattenArg = false,\n includeDefault = false,\n useEnumType = false,\n mergeReadWriteOnly = false,\n httpResolverOptions,\n sharedTypesFile,\n }: GenerationOptions\n) {\n const v3Doc = (v3DocCache[spec] ??= await getV3Doc(spec, httpResolverOptions));\n\n const apiGen = new ApiGenerator(v3Doc, {\n unionUndefined,\n useEnumType,\n mergeReadWriteOnly,\n });\n\n const schemeTypeNames = new Set<string>();\n\n function addSchemeTypeName(name: string) {\n schemeTypeNames.add(name);\n schemeTypeNames.add(camelCase(name));\n schemeTypeNames.add(capitalize(camelCase(name)));\n }\n\n if (sharedTypesFile) {\n const resultFile = ts.createSourceFile(\n 'sharedTypes.ts',\n '',\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS\n );\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n const allTypeDefinitions: ts.Statement[] = [];\n const definedTypeNames = new Set<string>();\n\n const components = v3Doc.components;\n if (components) {\n const componentDefinitions = Object.entries(components).map(([componentType, componentDefs]) => {\n const typeEntries = Object.entries(componentDefs as Record<string, unknown>)\n .map(([name, def]) => {\n addSchemeTypeName(name);\n const typeName = capitalize(camelCase(name));\n definedTypeNames.add(typeName);\n const typeNode = wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(def as OpenAPIV3.SchemaObject));\n return factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n typeNode\n );\n });\n return factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier('Scheme'),\n factory.createModuleBlock(typeEntries),\n ts.NodeFlags.Namespace\n );\n });\n allTypeDefinitions.push(...componentDefinitions);\n }\n\n const enumEntries = [\n ...apiGen.enumAliases.filter(e => ts.isEnumDeclaration(e)),\n ...apiGen.enumAliases.filter(e => ts.isTypeAliasDeclaration(e)),\n ].map(enumDecl => {\n if (ts.isEnumDeclaration(enumDecl)) {\n return factory.createEnumDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n enumDecl.name,\n enumDecl.members\n );\n } else if (ts.isTypeAliasDeclaration(enumDecl)) {\n return factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n enumDecl.name,\n enumDecl.typeParameters,\n enumDecl.type\n );\n }\n return enumDecl;\n });\n \n const unionTypeEnums = apiGen.aliases\n .filter(alias => {\n if (ts.isTypeAliasDeclaration(alias) && alias.type) {\n return ts.isUnionTypeNode(alias.type);\n }\n return false;\n })\n .map(alias => {\n if (ts.isTypeAliasDeclaration(alias)) {\n return factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n alias.name,\n alias.typeParameters,\n alias.type\n );\n }\n return alias;\n });\n \n const allEnumEntries = [...enumEntries, ...unionTypeEnums];\n \n if (allEnumEntries.length > 0) {\n allTypeDefinitions.push(\n factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier('Enum'),\n factory.createModuleBlock(allEnumEntries),\n ts.NodeFlags.Namespace\n )\n );\n }\n\n if (apiGen.aliases.length > 0) {\n const aliasEntries = apiGen.aliases\n .filter(alias => {\n if (ts.isTypeAliasDeclaration(alias)) {\n const isDefinedInComponents = definedTypeNames.has(alias.name.text);\n const isUnionTypeEnum = ts.isUnionTypeNode(alias.type);\n return !isDefinedInComponents && !isUnionTypeEnum;\n }\n return false;\n })\n .map(alias => {\n if (ts.isTypeAliasDeclaration(alias)) {\n return factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n alias.name,\n alias.typeParameters,\n alias.type\n );\n }\n return alias;\n });\n\n if (aliasEntries.length > 0) {\n const existingSchemeIndex = allTypeDefinitions.findIndex(def => \n ts.isModuleDeclaration(def) && \n ts.isIdentifier(def.name) && \n def.name.text === 'Scheme'\n );\n\n if (existingSchemeIndex >= 0) {\n const existingScheme = allTypeDefinitions[existingSchemeIndex] as ts.ModuleDeclaration;\n const mergedMembers = [...(existingScheme.body as ts.ModuleBlock).statements, ...aliasEntries];\n allTypeDefinitions[existingSchemeIndex] = factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier('Scheme'),\n factory.createModuleBlock(mergedMembers),\n ts.NodeFlags.Namespace\n );\n } else {\n allTypeDefinitions.push(\n factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier('Scheme'),\n factory.createModuleBlock(aliasEntries),\n ts.NodeFlags.Namespace\n )\n );\n }\n }\n }\n\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n \n const sharedTypesDir = path.dirname(sharedTypesFile);\n await fs.mkdir(sharedTypesDir, { recursive: true });\n \n const output = printer.printNode(\n ts.EmitHint.Unspecified,\n factory.createSourceFile(\n allTypeDefinitions,\n factory.createToken(ts.SyntaxKind.EndOfFileToken),\n ts.NodeFlags.None\n ),\n resultFile\n );\n\n await fs.writeFile(sharedTypesFile, output, 'utf-8');\n }\n\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 const sharedTypesImportPath = sharedTypesFile && outputFile\n ? (() => {\n let rel = path.relative(path.dirname(outputFile), sharedTypesFile)\n .replace(/\\\\/g, '/')\n .replace(/\\.[jt]sx?$/, '');\n if (!rel.startsWith('.')) rel = './' + rel;\n return rel;\n })()\n : './shared-types';\n\n return printer.printNode(\n ts.EmitHint.Unspecified,\n factory.createSourceFile(\n [\n generateImportNode(apiFile, { [apiImport]: 'api' }),\n generateImportNode('@acrool/react-fetcher', { IRestFulEndpointsQueryReturn: 'IRestFulEndpointsQueryReturn' }),\n ...(sharedTypesFile ? [\n generateImportNode(sharedTypesImportPath, { \n Scheme: 'Scheme',\n ...(useEnumType ? { Enum: 'Enum' } : {})\n })\n ] : []),\n ...(tag ? [generateTagTypes({ addTagTypes: extractAllTagTypes({ operationDefinitions }) })] : []),\n generateCreateApiCall({\n tag,\n endpointDefinitions: factory.createObjectLiteralExpression(\n operationDefinitions.map((operationDefinition) =>\n generateEndpoint({\n operationDefinition,\n overrides: getOverrides(operationDefinition, endpointOverrides),\n sharedTypesFile: !!sharedTypesFile,\n })\n ),\n true\n ),\n }),\n factory.createExportAssignment(\n undefined,\n undefined,\n factory.createIdentifier(generatedApiName)\n ),\n ...Object.values(interfaces),\n ...(sharedTypesFile ? [] : [...apiGen.aliases, ...apiGen.enumAliases]),\n ...(hooks\n ? [\n generateReactHooks({\n exportName: generatedApiName,\n operationDefinitions,\n endpointOverrides,\n config: hooks,\n }),\n ]\n : []),\n ],\n factory.createToken(ts.SyntaxKind.EndOfFileToken),\n ts.NodeFlags.None\n ),\n resultFile\n );\n\n function extractAllTagTypes({ operationDefinitions }: { operationDefinitions: OperationDefinition[] }) {\n const allTagTypes = new Set<string>();\n\n for (const operationDefinition of operationDefinitions) {\n const { verb, pathItem } = operationDefinition;\n for (const tag of getTags({ verb, pathItem })) {\n allTagTypes.add(tag);\n }\n }\n return [...allTagTypes];\n }\n\n function generateEndpoint({\n operationDefinition,\n overrides,\n sharedTypesFile,\n }: {\n operationDefinition: OperationDefinition;\n overrides?: EndpointOverrides;\n sharedTypesFile: boolean;\n }) {\n const {\n verb,\n path,\n pathItem,\n operation,\n operation: { responses, requestBody },\n } = operationDefinition;\n const operationName = getOperationName({ verb, path });\n const tags = tag ? getTags({ verb, pathItem }) : [];\n const isQuery = testIsQuery(verb, overrides);\n\n const returnsJson = apiGen.getResponseType(responses) === 'json';\n let ResponseType: ts.TypeNode = factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n if (returnsJson) {\n const returnTypes = Object.entries(responses || {})\n .map(\n ([code, response]) =>\n [\n code,\n apiGen.resolve(response),\n wrapWithSchemeIfComponent(\n apiGen.getTypeFromResponse(response, 'readOnly') ||\n factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)\n ),\n ] as const\n )\n .filter(([status, response]) =>\n isDataResponse(status, includeDefault, apiGen.resolve(response), responses || {})\n )\n .filter(([_1, _2, type]) => type !== keywordType.void)\n .map(([code, response, type]) => {\n return ts.addSyntheticLeadingComment(\n type,\n ts.SyntaxKind.MultiLineCommentTrivia,\n `* status ${code} ${response.description} `,\n false\n );\n });\n if (returnTypes.length > 0) {\n ResponseType = factory.createUnionTypeNode(returnTypes);\n }\n }\n\n const ResponseTypeName = factory.createTypeReferenceNode(\n registerInterface(\n factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n capitalize(operationName + operationNameSuffix + responseSuffix),\n undefined,\n ResponseType\n )\n ).name\n );\n\n const operationParameters = apiGen.resolveArray(operation.parameters);\n const pathItemParameters = apiGen\n .resolveArray(pathItem.parameters)\n .filter((pp) => !operationParameters.some((op) => op.name === pp.name && op.in === pp.in));\n\n const parameters = supportDeepObjects([...pathItemParameters, ...operationParameters])\n .filter(argumentMatches(overrides?.parameterFilter))\n .filter(param => param.in !== 'header');\n\n const allNames = parameters.map((p) => p.name);\n const queryArg: QueryArgDefinitions = {};\n function generateName(name: string, potentialPrefix: string) {\n const isPureSnakeCase = /^[a-zA-Z][a-zA-Z0-9_]*$/.test(name);\n const hasNamingConflict = allNames.filter((n) => n === name).length > 1;\n if (hasNamingConflict) {\n name = `${potentialPrefix}_${name}`;\n }\n const camelCaseName = camelCase(name);\n if (isPureSnakeCase && !allNames.includes(camelCaseName)) {\n name = camelCaseName;\n }\n while (name in queryArg) {\n name = `_${name}`;\n }\n return name;\n }\n\n for (const param of parameters) {\n const name = generateName(param.name, param.in);\n queryArg[name] = {\n origin: 'param',\n name,\n originalName: param.name,\n type: wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(isReference(param) ? param : param.schema, undefined, 'writeOnly')),\n required: param.required,\n param,\n };\n }\n\n if (requestBody) {\n const body = apiGen.resolve(requestBody);\n const schema = apiGen.getSchemaFromContent(body.content);\n const type = wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(schema));\n const schemaName = camelCase(\n (type as any).name ||\n getReferenceName(schema) ||\n (typeof schema === 'object' && 'title' in schema && schema.title) ||\n 'body'\n );\n const name = generateName(schemaName in queryArg ? 'body' : schemaName, 'body');\n\n queryArg[name] = {\n origin: 'body',\n name,\n originalName: schemaName,\n type: wrapWithSchemeIfComponent(apiGen.getTypeFromSchema(schema, undefined, 'writeOnly')),\n required: true,\n body,\n };\n }\n\n const propertyName = (name: string | ts.PropertyName): ts.PropertyName => {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name);\n }\n return name;\n };\n\n const queryArgValues = Object.values(queryArg);\n\n const isFlatArg = flattenArg && queryArgValues.length === 1;\n const QueryArg = factory.createTypeReferenceNode(\n registerInterface(\n factory.createTypeAliasDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n capitalize(operationName + operationNameSuffix + argSuffix),\n undefined,\n queryArgValues.length > 0\n ? isFlatArg\n ? withQueryComment(\n factory.createUnionTypeNode([\n queryArgValues[0].type,\n ...(!queryArgValues[0].required\n ? [factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)]\n : []),\n ]),\n queryArgValues[0],\n false\n )\n : factory.createTypeLiteralNode(\n queryArgValues.map((def) =>\n withQueryComment(\n factory.createPropertySignature(\n undefined,\n propertyName(def.name),\n createQuestionToken(!def.required),\n def.type\n ),\n def,\n true\n )\n )\n )\n : factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword)\n )\n ).name\n );\n\n return generateEndpointDefinition({\n operationName: operationNameSuffix ? capitalize(operationName + operationNameSuffix) : operationName,\n type: isQuery ? 'query' : 'mutation',\n Response: ResponseTypeName,\n QueryArg: factory.createTypeReferenceNode(\n factory.createIdentifier('IRestFulEndpointsQueryReturn'),\n [QueryArg]\n ),\n queryFn: generateQueryFn({\n operationDefinition,\n queryArg,\n isQuery,\n isFlatArg,\n encodePathParams,\n encodeQueryParams,\n }),\n extraEndpointsProps: isQuery\n ? generateQueryEndpointProps({ operationDefinition })\n : generateMutationEndpointProps({ operationDefinition }),\n tags,\n });\n }\n\n function generateQueryFn({\n operationDefinition,\n queryArg,\n isFlatArg,\n isQuery,\n encodePathParams,\n encodeQueryParams,\n }: {\n operationDefinition: OperationDefinition;\n queryArg: QueryArgDefinitions;\n isFlatArg: boolean;\n isQuery: boolean;\n encodePathParams: boolean;\n encodeQueryParams: boolean;\n }) {\n const { path, verb } = operationDefinition;\n\n const bodyParameter = Object.values(queryArg).find((def) => def.origin === 'body');\n\n const rootObject = factory.createIdentifier('queryArg');\n const variablesObject = factory.createPropertyAccessExpression(rootObject, factory.createIdentifier('variables'));\n\n function pickParams(paramIn: string) {\n return Object.values(queryArg).filter((def) => def.origin === 'param' && def.param.in === paramIn);\n }\n\n function createObjectLiteralProperty(parameters: QueryArgDefinition[], propertyName: string) {\n if (parameters.length === 0) return undefined;\n\n const properties = parameters.map((param) => {\n const value = isFlatArg \n ? variablesObject \n : factory.createPropertyAccessExpression(variablesObject, factory.createIdentifier(param.name));\n\n const encodedValue =\n encodeQueryParams && param.param?.in === 'query'\n ? factory.createConditionalExpression(\n value,\n undefined,\n factory.createCallExpression(factory.createIdentifier('encodeURIComponent'), undefined, [\n factory.createCallExpression(factory.createIdentifier('String'), undefined, [value]),\n ]),\n undefined,\n factory.createIdentifier('undefined')\n )\n : value;\n\n return createPropertyAssignment(param.originalName, encodedValue);\n });\n\n return factory.createPropertyAssignment(\n factory.createIdentifier(propertyName),\n factory.createObjectLiteralExpression(properties, true)\n );\n }\n\n return factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, rootObject, undefined, undefined, undefined)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(\n factory.createObjectLiteralExpression(\n [\n factory.createPropertyAssignment(\n factory.createIdentifier('url'),\n generatePathExpression(path, pickParams('path'), variablesObject, isFlatArg, encodePathParams)\n ),\n isQuery && verb.toUpperCase() === 'GET'\n ? undefined\n : factory.createPropertyAssignment(\n factory.createIdentifier('method'),\n factory.createStringLiteral(verb.toUpperCase())\n ),\n bodyParameter === undefined\n ? undefined\n : factory.createPropertyAssignment(\n factory.createIdentifier('body'),\n isFlatArg\n ? variablesObject\n : factory.createPropertyAccessExpression(variablesObject, factory.createIdentifier(bodyParameter.name))\n ),\n createObjectLiteralProperty(pickParams('cookie'), 'cookies'),\n createObjectLiteralProperty(pickParams('query'), 'params'),\n factory.createPropertyAssignment(\n factory.createIdentifier('fetchOptions'),\n factory.createPropertyAccessChain(\n rootObject,\n factory.createToken(ts.SyntaxKind.QuestionDotToken),\n factory.createIdentifier('fetchOptions')\n )\n ),\n ].filter(removeUndefined),\n false\n )\n )\n );\n }\n\n function generateQueryEndpointProps({}: { operationDefinition: OperationDefinition }): ObjectPropertyDefinitions {\n return {};\n }\n\n function generateMutationEndpointProps({}: { operationDefinition: OperationDefinition }): ObjectPropertyDefinitions {\n return {};\n }\n\n function wrapWithSchemeIfComponent(typeNode: ts.TypeNode): ts.TypeNode {\n if (ts.isTypeReferenceNode(typeNode) && ts.isIdentifier(typeNode.typeName)) {\n const typeName = typeNode.typeName.text;\n \n // 檢查是否為 enum 類型(包括在 enumAliases 和 aliases 中的)\n const isEnumType = useEnumType && (\n apiGen.enumAliases.some(enumDecl => {\n if (ts.isEnumDeclaration(enumDecl) || ts.isTypeAliasDeclaration(enumDecl)) {\n return enumDecl.name.text === typeName;\n }\n return false;\n }) ||\n apiGen.aliases.some(alias => {\n if (ts.isTypeAliasDeclaration(alias) && alias.type) {\n // 檢查是否為 union type 的 enum\n if (ts.isUnionTypeNode(alias.type)) {\n return alias.name.text === typeName;\n }\n }\n return false;\n })\n );\n \n if (isEnumType) {\n return factory.createTypeReferenceNode(\n factory.createQualifiedName(\n factory.createIdentifier('Enum'),\n typeNode.typeName\n ),\n typeNode.typeArguments?.map(wrapWithSchemeIfComponent)\n );\n }\n \n if (schemeTypeNames.has(typeName)) {\n return factory.createTypeReferenceNode(\n factory.createQualifiedName(\n factory.createIdentifier('Scheme'),\n typeNode.typeName\n ),\n typeNode.typeArguments?.map(wrapWithSchemeIfComponent)\n );\n }\n if (typeNode.typeArguments) {\n return factory.createTypeReferenceNode(\n typeNode.typeName,\n typeNode.typeArguments.map(wrapWithSchemeIfComponent)\n );\n }\n }\n if (ts.isArrayTypeNode(typeNode)) {\n return factory.createArrayTypeNode(wrapWithSchemeIfComponent(typeNode.elementType));\n }\n if (ts.isUnionTypeNode(typeNode)) {\n // 檢查是否為 enum 的 union type\n const unionTypes = typeNode.types;\n if (unionTypes.length > 0 && unionTypes.every(type => \n ts.isLiteralTypeNode(type) && \n (ts.isStringLiteral(type.literal) || ts.isNumericLiteral(type.literal))\n )) {\n // 這是一個 enum 的 union type,我們需要找到對應的 enum 類型\n const enumValues = unionTypes.map(type => {\n if (ts.isLiteralTypeNode(type)) {\n if (ts.isStringLiteral(type.literal)) {\n return type.literal.text;\n } else if (ts.isNumericLiteral(type.literal)) {\n return type.literal.text;\n }\n }\n return null;\n }).filter(Boolean);\n \n // 查找對應的 enum 類型\n const matchingEnum = apiGen.aliases.find(alias => {\n if (ts.isTypeAliasDeclaration(alias) && ts.isUnionTypeNode(alias.type)) {\n const aliasValues = alias.type.types.map(type => {\n if (ts.isLiteralTypeNode(type)) {\n if (ts.isStringLiteral(type.literal)) {\n return type.literal.text;\n } else if (ts.isNumericLiteral(type.literal)) {\n return type.literal.text;\n }\n }\n return null;\n }).filter(Boolean);\n \n return aliasValues.length === enumValues.length && \n aliasValues.every(val => enumValues.includes(val));\n }\n return false;\n });\n \n // 對於所有的 enum 類型,直接使用字串型別,不轉換為 Enum\n // 這樣可以避免自動命名造成的變更問題\n if (matchingEnum && ts.isTypeAliasDeclaration(matchingEnum)) {\n // 直接返回原始的 union type,不轉換為 Enum\n return typeNode;\n }\n }\n \n return factory.createUnionTypeNode(typeNode.types.map(wrapWithSchemeIfComponent));\n }\n if (ts.isTypeLiteralNode(typeNode)) {\n return factory.createTypeLiteralNode(\n typeNode.members.map(member => {\n if (ts.isPropertySignature(member) && member.type) {\n return factory.updatePropertySignature(\n member,\n member.modifiers,\n member.name,\n member.questionToken,\n wrapWithSchemeIfComponent(member.type)\n );\n }\n return member;\n })\n );\n }\n return typeNode;\n }\n}\n\nfunction accessProperty(rootObject: ts.Identifier, propertyName: string) {\n return isValidIdentifier(propertyName)\n ? factory.createPropertyAccessExpression(rootObject, factory.createIdentifier(propertyName))\n : factory.createElementAccessExpression(rootObject, factory.createStringLiteral(propertyName));\n}\n\nfunction generatePathExpression(\n path: string,\n pathParameters: QueryArgDefinition[],\n rootObject: ts.Identifier | ts.PropertyAccessExpression,\n isFlatArg: boolean,\n encodePathParams: boolean\n) {\n const expressions: Array<[string, string]> = [];\n\n const head = path.replace(/\\{(.*?)}(.*?)(?=\\{|$)/g, (_, expression, literal) => {\n const param = pathParameters.find((p) => p.originalName === expression);\n if (!param) {\n throw new Error(`path parameter ${expression} does not seem to be defined in '${path}'!`);\n }\n expressions.push([param.name, literal]);\n return '';\n });\n\n return expressions.length\n ? factory.createTemplateExpression(\n factory.createTemplateHead(head),\n expressions.map(([prop, literal], index) => {\n const value = isFlatArg \n ? rootObject \n : factory.createPropertyAccessExpression(rootObject, factory.createIdentifier(prop));\n const encodedValue = encodePathParams\n ? factory.createCallExpression(factory.createIdentifier('encodeURIComponent'), undefined, [\n factory.createCallExpression(factory.createIdentifier('String'), undefined, [value]),\n ])\n : value;\n return factory.createTemplateSpan(\n encodedValue,\n index === expressions.length - 1\n ? factory.createTemplateTail(literal)\n : factory.createTemplateMiddle(literal)\n );\n })\n )\n : factory.createNoSubstitutionTemplateLiteral(head);\n}\n\ntype QueryArgDefinition = {\n name: string;\n originalName: string;\n type: ts.TypeNode;\n required?: boolean;\n param?: OpenAPIV3.ParameterObject;\n} & (\n | {\n origin: 'param';\n param: OpenAPIV3.ParameterObject;\n }\n | {\n origin: 'body';\n body: OpenAPIV3.RequestBodyObject;\n }\n);\ntype QueryArgDefinitions = Record<string, QueryArgDefinition>;\n","import ts from 'typescript';\nimport semver from 'semver';\n\nconst originalFactory = ts.factory;\n\nfunction createImportSpecifier(propertyName: ts.Identifier | undefined, name: ts.Identifier): ts.ImportSpecifier {\n if (semver.satisfies(ts.version, '>= 4.5'))\n // @ts-ignore\n return originalFactory.createImportSpecifier(false, propertyName, name);\n // @ts-ignore\n return originalFactory.createImportSpecifier(propertyName, name);\n}\n\nfunction createExportSpecifier(\n propertyName: string | ts.Identifier | undefined,\n name: string | ts.Identifier\n): ts.ExportSpecifier {\n if (semver.satisfies(ts.version, '>= 4.5'))\n // @ts-ignore\n return originalFactory.createExportSpecifier(false, propertyName, name);\n // @ts-ignore\n return originalFactory.createExportSpecifier(propertyName, name);\n}\n\nexport const factory = {\n ...originalFactory,\n createImportSpecifier,\n createExportSpecifier,\n};\n","import { factory } from './utils/factory';\nimport ts from 'typescript';\n\nconst defaultEndpointBuilder = factory.createIdentifier('build');\n\nexport type ObjectPropertyDefinitions = Record<string, ts.Expression | undefined>;\nexport function generateObjectProperties(obj: ObjectPropertyDefinitions) {\n return Object.entries(obj)\n .filter(([_, v]) => v)\n .map(([k, v]) => factory.createPropertyAssignment(factory.createIdentifier(k), v as ts.Expression));\n}\n\nexport function generateImportNode(pkg: string, namedImports: Record<string, string>, defaultImportName?: string) {\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n false,\n defaultImportName !== undefined ? factory.createIdentifier(defaultImportName) : undefined,\n factory.createNamedImports(\n Object.entries(namedImports).map(([propertyName, name]) =>\n factory.createImportSpecifier(\n name === propertyName ? undefined : factory.createIdentifier(propertyName),\n factory.createIdentifier(name)\n )\n )\n )\n ),\n factory.createStringLiteral(pkg)\n );\n}\n\nexport function generateCreateApiCall({\n endpointBuilder = defaultEndpointBuilder,\n endpointDefinitions,\n tag,\n}: {\n endpointBuilder?: ts.Identifier;\n endpointDefinitions: ts.ObjectLiteralExpression;\n tag: boolean;\n}) {\n const injectEndpointsObjectLiteralExpression = factory.createObjectLiteralExpression(\n generateObjectProperties({\n endpoints: factory.createArrowFunction(\n undefined,\n undefined,\n [factory.createParameterDeclaration(undefined, undefined, endpointBuilder, undefined, undefined, undefined)],\n undefined,\n factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),\n factory.createParenthesizedExpression(endpointDefinitions)\n ),\n overrideExisting: factory.createFalse(),\n }),\n true\n );\n if (tag) {\n const enhanceEndpointsObjectLiteralExpression = factory.createObjectLiteralExpression(\n [factory.createShorthandPropertyAssignment(factory.createIdentifier('addTagTypes'), undefined)],\n true\n );\n return factory.createVariableStatement(\n undefined,\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('injectedRtkApi'),\n undefined,\n undefined,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('api'),\n factory.createIdentifier('enhanceEndpoints')\n ),\n undefined,\n [enhanceEndpointsObjectLiteralExpression]\n ),\n factory.createIdentifier('injectEndpoints')\n ),\n undefined,\n [injectEndpointsObjectLiteralExpression]\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n }\n\n return factory.createVariableStatement(\n undefined,\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('injectedRtkApi'),\n undefined,\n undefined,\n factory.createCallExpression(\n factory.createPropertyAccessExpression(\n factory.createIdentifier('api'),\n factory.createIdentifier('injectEndpoints')\n ),\n undefined,\n [injectEndpointsObjectLiteralExpression]\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n}\n\nexport function generateEndpointDefinition({\n operationName,\n type,\n Response,\n QueryArg,\n queryFn,\n endpointBuilder = defaultEndpointBuilder,\n extraEndpointsProps,\n tags,\n}: {\n operationName: string;\n type: 'query' | 'mutation';\n Response: ts.TypeReferenceNode;\n QueryArg: ts.TypeReferenceNode;\n queryFn: ts.Expression;\n endpointBuilder?: ts.Identifier;\n extraEndpointsProps: ObjectPropertyDefinitions;\n tags: string[];\n}) {\n const objectProperties = generateObjectProperties({ query: queryFn, ...extraEndpointsProps });\n if (tags.length > 0) {\n objectProperties.push(\n factory.createPropertyAssignment(\n factory.createIdentifier(type === 'query' ? 'providesTags' : 'invalidatesTags'),\n factory.createArrayLiteralExpression(tags.map((tag) => factory.createStringLiteral(tag), false))\n )\n );\n }\n return factory.createPropertyAssignment(\n factory.createIdentifier(operationName),\n\n factory.createCallExpression(\n factory.createPropertyAccessExpression(endpointBuilder, factory.createIdentifier(type)),\n [Response, QueryArg],\n [factory.createObjectLiteralExpression(objectProperties, true)]\n )\n );\n}\n\nexport function generateTagTypes({ addTagTypes }: { addTagTypes: string[] }) {\n return factory.createVariableStatement(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier('addTagTypes'),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createArrayLiteralExpression(\n addTagTypes.map((tagType) => factory.createStringLiteral(tagType)),\n true\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined)\n )\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n}\n","import ts from 'typescript';\nimport { getOperationName } from 'oazapfts/generate';\nimport { capitalize, isQuery } from '../utils';\nimport type { OperationDefinition, EndpointOverrides, ConfigFile } from '../types';\nimport { getOverrides } from '../generate';\nimport { factory } from '../utils/factory';\n\ntype HooksConfigOptions = NonNullable<ConfigFile['hooks']>;\n\ntype GetReactHookNameParams = {\n operationDefinition: OperationDefinition;\n endpointOverrides: EndpointOverrides[] | undefined;\n config: HooksConfigOptions;\n};\n\ntype CreateBindingParams = {\n operationDefinition: OperationDefinition;\n overrides?: EndpointOverrides;\n isLazy?: boolean;\n};\n\nconst createBinding = ({\n operationDefinition: { verb, path },\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, undefined))}${\n isQuery(verb, overrides) ? 'Query' : 'Mutation'\n }`\n ),\n undefined\n );\n\nconst getReactHookName = ({ operationDefinition, endpointOverrides, config }: GetReactHookNameParams) => {\n const overrides = getOverrides(operationDefinition, endpointOverrides);\n\n const baseParams = {\n operationDefinition,\n overrides,\n };\n\n const _isQuery = isQuery(operationDefinition.verb, overrides);\n\n // If `config` is true, just generate everything\n if (typeof config === 'boolean') {\n return createBinding(baseParams);\n }\n\n // `config` is an object and we need to check for the configuration of each property\n if (_isQuery) {\n return [\n ...(config.queries ? [createBinding(baseParams)] : []),\n ...(config.lazyQueries ? [createBinding({ ...baseParams, isLazy: true })] : []),\n ];\n }\n\n return config.mutations ? createBinding(baseParams) : [];\n};\n\ntype GenerateReactHooksParams = {\n exportName: string;\n operationDefinitions: OperationDefinition[];\n endpointOverrides: EndpointOverrides[] | undefined;\n config: HooksConfigOptions;\n};\nexport const generateReactHooks = ({\n exportName,\n operationDefinitions,\n endpointOverrides,\n config,\n}: GenerateReactHooksParams) =>\n factory.createVariableStatement(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createObjectBindingPattern(\n operationDefinitions\n .map((operationDefinition) => getReactHookName({ operationDefinition, endpointOverrides, config }))\n .flat()\n ),\n undefined,\n undefined,\n factory.createIdentifier(exportName)\n ),\n ],\n ts.NodeFlags.Const\n )\n );\n","export function capitalize(str: string) {\n return str.replace(str[0], str[0].toUpperCase());\n}\n","import type SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nexport type OperationDefinition = {\n path: string;\n verb: (typeof operationKeys)[number];\n pathItem: OpenAPIV3.PathItemObject;\n operation: OpenAPIV3.OperationObject;\n};\n\nexport type ParameterDefinition = OpenAPIV3.ParameterObject;\n\ntype Require<T, K extends keyof T> = { [k in K]-?: NonNullable<T[k]> } & Omit<T, K>;\ntype Optional<T, K extends keyof T> = { [k in K]?: NonNullable<T[k]> } & Omit<T, K>;\ntype Id<T> = { [K in keyof T]: T[K] } & {};\ntype AtLeastOneKey<T> = {\n [K in keyof T]-?: Pick<T, K> & Partial<T>;\n}[keyof T];\n\nexport const operationKeys = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\n\nexport type GenerationOptions = Id<\n CommonOptions &\n Optional<OutputFileOptions, 'outputFile'> & {\n isDataResponse?(\n code: string,\n includeDefault: boolean,\n response: OpenAPIV3.ResponseObject,\n allResponses: OpenAPIV3.ResponsesObject\n ): boolean;\n }\n>;\n\nexport interface CommonOptions {\n apiFile: string;\n /**\n * filename or url\n */\n schemaFile: string;\n /**\n * defaults to \"api\"\n */\n apiImport?: string;\n /**\n * defaults to \"enhancedApi\"\n */\n exportName?: string;\n /**\n * defaults to \"ApiArg\"\n */\n argSuffix?: string;\n /**\n * defaults to \"ApiResponse\"\n */\n responseSuffix?: string;\n /**\n * defaults to empty\n */\n operationNameSuffix?: string;\n /**\n * defaults to `false`\n * `true` will generate hooks for queries and mutations, but no lazyQueries\n */\n hooks?: boolean | { queries: boolean; lazyQueries: boolean; mutations: boolean };\n /**\n * defaults to false\n * `true` will generate a union type for `undefined` properties like: `{ id?: string | undefined }` instead of `{ id?: string }`\n */\n unionUndefined?: boolean;\n /**\n * defaults to false\n * `true` will result in all generated endpoints having `providesTags`/`invalidatesTags` declarations for the `tags` of their respective operation definition\n * @see https://redux-toolkit.js.org/rtk-query/usage/code-generation for more information\n */\n tag?: boolean;\n /**\n * defaults to false\n * `true` will add `encodeURIComponent` to the generated path parameters\n */\n encodePathParams?: boolean;\n /**\n * defaults to false\n * `true` will add `encodeURIComponent` to the generated query parameters\n */\n encodeQueryParams?: boolean;\n /**\n * defaults to false\n * `true` will \"flatten\" the arg so that you can do things like `useGetEntityById(1)` instead of `useGetEntityById({ entityId: 1 })`\n */\n flattenArg?: boolean;\n /**\n * default to false\n * If set to `true`, the default response type will be included in the generated code for all endpoints.\n * @see https://swagger.io/docs/specification/describing-responses/#default\n */\n includeDefault?: boolean;\n /**\n * default to false\n * `true` will not generate separate types for read-only and write-only properties.\n */\n mergeReadWriteOnly?: boolean;\n /**\n *\n * HTTPResolverOptions object that is passed to the SwaggerParser bundle function.\n */\n httpResolverOptions?: SwaggerParser.HTTPResolverOptions;\n\n /**\n * defaults to undefined\n * If present the given file will be used as prettier config when formatting the generated code. If undefined the default prettier config\n * resolution mechanism will be used.\n */\n prettierConfigFile?: string;\n}\n\nexport type TextMatcher = string | RegExp | (string | RegExp)[];\n\nexport type EndpointMatcherFunction = (operationName: string, operationDefinition: OperationDefinition) => boolean;\n\nexport type EndpointMatcher = TextMatcher | EndpointMatcherFunction;\n\nexport type ParameterMatcherFunction = (parameterName: string, parameterDefinition: ParameterDefinition) => boolean;\n\nexport type ParameterMatcher = TextMatcher | ParameterMatcherFunction;\n\nexport interface OutputFileOptions extends Partial<CommonOptions> {\n outputFile: string;\n filterEndpoints?: EndpointMatcher;\n endpointOverrides?: EndpointOverrides[];\n /**\n * defaults to false\n * If passed as true it will generate TS enums instead of union of strings\n */\n useEnumType?: boolean;\n sharedTypesFile?: string;\n}\n\nexport type EndpointOverrides = {\n pattern: EndpointMatcher;\n} & AtLeastOneKey<{\n type: 'mutation' | 'query';\n parameterFilter: ParameterMatcher;\n}>;\n\nexport type OutputFilesConfig = {\n [outputFile: string]: {\n groupMatch: RegExp,\n filterEndpoint?: (groupName: string) => RegExp\n }\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 outputFiles: OutputFilesConfig\n }\n >;\n","import type { OpenAPIV3 } from 'openapi-types';\nimport type { OperationDefinition } from '../types';\nimport { operationKeys } from '../types';\n\nexport function getOperationDefinitions(v3Doc: OpenAPIV3.Document): OperationDefinition[] {\n return Object.entries(v3Doc.paths).flatMap(([path, pathItem]) =>\n !pathItem\n ? []\n : Object.entries(pathItem)\n .filter((arg): arg is [(typeof operationKeys)[number], OpenAPIV3.OperationObject] =>\n operationKeys.includes(arg[0] as any)\n )\n .map(([verb, operation]) => ({\n path,\n verb,\n pathItem,\n operation,\n }))\n );\n}\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\n// @ts-ignore\nimport converter from 'swagger2openapi';\n\nexport async function getV3Doc(\n spec: string,\n httpResolverOptions?: SwaggerParser.HTTPResolverOptions\n): Promise<OpenAPIV3.Document> {\n const doc = await SwaggerParser.bundle(spec, {\n resolve: {\n http: httpResolverOptions,\n },\n });\n\n const isOpenApiV3 = 'openapi' in doc && doc.openapi.startsWith('3');\n\n if (isOpenApiV3) {\n return doc as OpenAPIV3.Document;\n } else {\n const result = await converter.convertObj(doc, {});\n return result.openapi as OpenAPIV3.Document;\n }\n}\n","import type { EndpointOverrides, operationKeys } from '../types';\n\nexport function isQuery(verb: (typeof operationKeys)[number], overrides: EndpointOverrides | undefined) {\n if (overrides?.type) {\n return overrides.type === 'query';\n }\n return verb === 'get';\n}\n","export function isValidUrl(string: string) {\n try {\n new URL(string);\n } catch (_) {\n return false;\n }\n\n return true;\n}\n","import path from 'node:path';\nimport prettier from 'prettier';\nimport type { BuiltInParserName } from 'prettier';\n\nconst EXTENSION_TO_PARSER: Record<string, BuiltInParserName> = {\n ts: 'typescript',\n tsx: 'typescript',\n js: 'babel',\n jsx: 'babel',\n 'js.flow': 'flow',\n flow: 'flow',\n gql: 'graphql',\n graphql: 'graphql',\n css: 'scss',\n scss: 'scss',\n less: 'scss',\n stylus: 'scss',\n markdown: 'markdown',\n md: 'markdown',\n json: 'json',\n};\n\nexport async function prettify(filePath: string | null, content: string, prettierConfigFile?: string): Promise<string> {\n let config = null;\n let parser = 'typescript';\n\n if (filePath) {\n const fileExtension = path.extname(filePath).slice(1);\n parser = EXTENSION_TO_PARSER[fileExtension];\n config = await prettier.resolveConfig(process.cwd(), {\n useCache: true,\n editorconfig: !prettierConfigFile,\n config: prettierConfigFile,\n });\n } else if (prettierConfigFile) {\n config = await prettier.resolveConfig(process.cwd(), {\n useCache: true,\n config: prettierConfigFile,\n });\n }\n\n return prettier.format(content, {\n parser,\n ...config,\n });\n}\n","export function removeUndefined<T>(t: T | undefined): t is T {\n return typeof t !== 'undefined';\n}\n"],"mappings":"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","names":["import_node_path","import_node_path","import_generate","import_typescript","ts","semver","import_typescript","ts","import_typescript","path","SwaggerParser","converter","path","prettier","path","ts","getOperationName","path","_getOperationName","ts","ApiGenerator","camelCase","resultFile","printer","fs","operationDefinitions","tag","sharedTypesFile","isQuery","encodePathParams","encodeQueryParams","path","import_lodash","require","path","fs","camelCase","paths"]}