@keq-request/cli 5.0.0-alpha.13 → 5.0.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/cli.cjs +74 -38
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +74 -38
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +72 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +72 -36
- package/dist/index.js.map +1 -1
- package/dist/plugins/body-fallback/index.d.ts.map +1 -1
- package/dist/plugins/eslint/index.d.ts.map +1 -1
- package/dist/plugins/prettier/index.d.ts.map +1 -1
- package/dist/plugins.cjs +2 -0
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.js +2 -0
- package/dist/plugins.js.map +1 -1
- package/dist/renderer/operation-request/error-to-comment.d.ts +2 -0
- package/dist/renderer/operation-request/error-to-comment.d.ts.map +1 -0
- package/dist/renderer/operation-request/index.d.ts.map +1 -1
- package/dist/renderer/operation-request/request-body.d.ts +4 -0
- package/dist/renderer/operation-request/request-body.d.ts.map +1 -0
- package/dist/renderer/utils/generate-schema.d.ts.map +1 -1
- package/dist/tasks/compile/utils/compile-operation-definition.d.ts.map +1 -1
- package/dist/tasks/persist/index.d.ts.map +1 -1
- package/dist/tasks/utils/dependency.d.ts +3 -1
- package/dist/tasks/utils/dependency.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/constants/supported-methods.ts","../src/utils/logger.ts","../src/compiler/compiler.ts","../src/tasks/setup/index.ts","../src/types/runtime-config.ts","../src/constants/file-naming-style.ts","../src/types/qs.ts","../src/constants/qs-array-format.ts","../src/utils/ignore-matcher.ts","../src/tasks/setup/utils/validate-modules.ts","../src/tasks/setup/utils/find-nearest-package-json.ts","../src/tasks/setup/utils/get-project-module-system.ts","../src/tasks/download/index.ts","../src/tasks/utils/module-definition.ts","../src/tasks/utils/api-document.ts","../src/tasks/utils/api-document_v3_1.ts","../src/tasks/utils/operation-definition.ts","../src/utils/is-keywords.ts","../src/utils/is-reserved-word.ts","../src/tasks/utils/schema-definition.ts","../src/utils/debugger.ts","../src/utils/swagger-utils/dereference.ts","../src/utils/swagger-utils/dereference-operation.ts","../src/utils/swagger-utils/remove-undefined-ref.ts","../src/utils/swagger-utils/is-ref-defined.ts","../src/utils/swagger-utils/update-operation-id.ts","../src/utils/json-schema-utils/is-array.ts","../src/utils/json-schema-utils/is-mixed.ts","../src/utils/json-schema-utils/is-non-array.ts","../src/utils/json-schema-utils/is-ref.ts","../src/utils/json-schema-utils/index.ts","../src/utils/swagger-utils/dereference-deep.ts","../src/utils/swagger-utils/index.ts","../src/tasks/validate/index.ts","../src/tasks/shaking/index.ts","../src/tasks/persist/index.ts","../src/tasks/compile/utils/compile-schema-definition.ts","../src/renderer/json-schema/index.ts","../src/renderer/utils/generate-schema.ts","../src/tasks/utils/anchor.ts","../src/tasks/utils/artifact.ts","../src/tasks/utils/dependency.ts","../src/tasks/utils/to-comment.ts","../src/tasks/utils/json-schema.ts","../src/tasks/compile/utils/compile-operation-definition.ts","../src/renderer/operation-type/index.ts","../src/renderer/operation-request/index.ts","../src/renderer/request/index.ts","../src/tasks/compile/index.ts","../src/tasks/interactive/utils/select-operation-definitions.ts","../src/tasks/interactive/index.ts","../src/compiler/intercepter/perfect-error-message.ts","../src/compiler/intercepter/print-information.ts"],"sourcesContent":["#!/usr/bin/env node\nimport semver from 'semver'\nimport { Argument, Command, Option } from 'commander'\nimport { SupportedMethods } from './constants/supported-methods.js'\nimport { logger } from './utils/logger.js'\nimport { Compiler } from './compiler/compiler.js'\n\n\nif (semver.lt(process.version, '18.0.0')) {\n throw new Error('Node.js version must be greater than 18')\n}\n\nconst program = new Command()\n\n\nprogram\n .command('build')\n .option('-c --config <config>', 'The keq-cli config file')\n .option('--module <modules...>', 'Filter module(s) to generate')\n .option('--debug', 'Print debug information')\n .option('--tolerant', 'Tolerate wrong swagger structure')\n .option('-i --interactive', 'Interactive select the scope of generation')\n .action(async (options) => {\n const compiler = new Compiler({\n build: {\n shaking: {\n skipIgnoredModules: true,\n skipEmptyDocuments: true,\n },\n },\n config: options.config,\n modules: options.module,\n debug: !!options.debug,\n tolerant: !!options.tolerant,\n interactive: !!options.interactive,\n })\n\n await compiler.run()\n })\n\n\nprogram\n .command('ignore')\n .addArgument(\n new Argument('<mode>', 'The ignore mode')\n .choices(['all', 'add', 'except'])\n .argRequired(),\n )\n .option('-c --config <config>', 'The keq-cli config file')\n .option('--debug', 'Print debug information')\n .option('--module <modules...>')\n .option('--build', 'Build after updating .keqignore file')\n .addOption(\n new Option('--method <method>', 'Only generate files of the specified operation method')\n .choices([\n ...SupportedMethods,\n ...SupportedMethods.map((method) => method.toUpperCase()),\n ]),\n )\n .option('--pathname <pathnames>', 'Only generate files of the specified operation pathname')\n .option('-i --interactive', 'Interactive select the scope of generation')\n .action(async (mode, options) => {\n let compiler: Compiler\n\n if (mode === 'all') {\n if (options.build) throw new Error(\"'--build' cannot be used with 'all' mode\")\n\n compiler = new Compiler({\n build: false,\n config: options.config,\n modules: options.module,\n debug: !!options.debug,\n interactive: false,\n ignore: {\n rules: [{\n persist: true,\n ignore: true,\n moduleName: '*',\n operationMethod: '*',\n operationPathname: '*',\n }],\n },\n })\n } else if (options.interactive) {\n if (options.interactive) {\n if (options.method) throw new Error(\"'--method' cannot be used with '--interactive'\")\n if (options.pathname) throw new Error(\"'--pathname' cannot be used with '--interactive'\")\n }\n\n compiler = new Compiler({\n build: !!options.build && {\n shaking: {\n skipIgnoredModules: true,\n skipEmptyDocuments: true,\n },\n },\n config: options.config,\n modules: options.module,\n debug: !!options.debug,\n\n interactive: {\n mode,\n persist: true,\n },\n })\n } else {\n if (!options.module && !options.method && !options.pathname) {\n throw new Error(\"at least one of '--module', '--method' or '--pathname' must be specified\")\n }\n\n const moduleNames = options.module || ['*']\n\n compiler = new Compiler({\n build: !!options.build && {\n shaking: {\n skipIgnoredModules: true,\n skipEmptyDocuments: true,\n },\n },\n config: options.config,\n debug: !!options.debug,\n modules: options.module,\n ignore: {\n rules: moduleNames.map((moduleNames) => ({\n persist: true,\n ignore: mode === 'add',\n moduleName: moduleNames,\n operationMethod: options.method,\n operationPathname: options.pathname,\n })),\n },\n interactive: false,\n })\n }\n\n await compiler.run()\n })\n\nasync function main(): Promise<void> {\n program.on('command:*', function (operands) {\n throw new Error(`Unknown command '${String(operands[0])}'`)\n })\n\n try {\n await program.parseAsync(process.argv)\n } catch (err) {\n if (process.argv.includes('--debug')) {\n console.error(err)\n } else {\n logger.error(err instanceof Error ? err.message : String(err))\n }\n }\n}\n\nvoid main()\n","export const SupportedMethods = [\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n]\n","import chalk from 'chalk'\n\n\nexport const logger = {\n log: (str: string) => console.log(chalk.green(str)),\n warn: (str: string) => console.warn(chalk.yellow(str)),\n error: (str: string) => console.error(chalk.red(str)),\n}\n","\n\nimport * as R from 'ramda'\nimport { AsyncSeriesHook, AsyncSeriesWaterfallHook, FullTap, Hook, HookInterceptor, InnerCallback, SyncHook } from 'tapable'\nimport { Listr } from 'listr2'\nimport {\n createCompileTask,\n createDownloadTask,\n createInteractiveTask,\n createPersistTask,\n createSetupTask,\n createShakingTask,\n createValidateTask,\n InteractiveTaskOptions,\n SetupTaskOptions,\n ShakingTaskOptions,\n type TaskWrapper,\n type TaskContext,\n Artifact,\n OperationDefinition,\n SchemaDefinition,\n} from '../tasks/index.js'\nimport { perfectErrorMessage } from './intercepter/perfect-error-message.js'\nimport { printInformation } from './intercepter/print-information.js'\n\n\ninterface Options extends SetupTaskOptions {\n build: boolean | {\n shaking?: ShakingTaskOptions\n }\n\n interactive?: boolean | InteractiveTaskOptions\n}\n\n\nexport class Compiler {\n context: TaskContext = {}\n\n hooks = {\n // core\n afterSetup: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterDownload: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterValidate: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterShaking: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterCompile: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterPersist: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n done: new SyncHook<[]>(),\n\n // compile\n afterCompileKeqRequest: new AsyncSeriesWaterfallHook<[Artifact, TaskWrapper], Artifact>(['artifact', 'task']),\n afterCompileSchema: new AsyncSeriesWaterfallHook<[Artifact, SchemaDefinition, TaskWrapper], Artifact>(['artifact', 'schema', 'task']),\n afterCompileOperationType: new AsyncSeriesWaterfallHook<[Artifact, OperationDefinition, TaskWrapper], Artifact>(['artifact', 'operation', 'task']),\n afterCompileOperationRequest: new AsyncSeriesWaterfallHook<[Artifact, OperationDefinition, TaskWrapper], Artifact>(['artifact', 'operation', 'task']),\n }\n\n constructor(\n public options: Options,\n ) {\n for (const hook of Object.values(this.hooks)) {\n hook.intercept(perfectErrorMessage())\n }\n\n this.hooks.afterSetup.intercept(printInformation(0))\n this.hooks.afterPersist.intercept(printInformation(0))\n }\n\n async run(): Promise<void> {\n const options = this.options\n\n const tasks = new Listr<TaskContext>(\n [\n createSetupTask(this, options),\n createDownloadTask(this, { skipIgnoredModules: !options.interactive }),\n createValidateTask(this, { enabled: !!options.build }),\n createInteractiveTask({ enabled: !!options.interactive, ...(typeof options.interactive === 'object' ? options.interactive : { mode: 'except' }) }),\n createShakingTask(this, { enabled: !!options.build, ...(typeof options.build === 'object' ? options.build.shaking : undefined) }),\n createCompileTask(this, { enabled: !!options.build }),\n createPersistTask(this, { enabled: !!options.build }),\n ],\n {\n concurrent: false,\n renderer: 'default',\n rendererOptions: {\n suffixSkips: true,\n collapseSubtasks: false,\n collapseErrors: false,\n },\n },\n )\n\n await tasks.run(this.context)\n\n await this.hooks.done.promise()\n }\n}\n","import * as R from 'ramda'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport { CosmiconfigResult } from 'cosmiconfig'\nimport { Value } from '@sinclair/typebox/value'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { ListrTask } from 'listr2'\nimport { RuntimeConfig } from '~/types/runtime-config.js'\nimport { IgnoreMatcher, IgnoreMatcherRule } from '../../utils/ignore-matcher.js'\nimport { validateModules, findNearestPackageJson, getProjectModuleSystem } from './utils/index.js'\nimport type { TaskContext } from '../types/task-context.js'\nimport type { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '../../compiler/compiler.js'\n\n\nexport interface SetupTaskOptions {\n config?: string\n debug?: boolean\n tolerant?: boolean\n modules?: string[]\n\n ignore?: false | {\n rules: IgnoreMatcherRule[]\n }\n}\n\nconst explore = cosmiconfig('keq')\n\nfunction main(compiler: Compiler, options: SetupTaskOptions): ListrTask<TaskContext> {\n return {\n task: async (context, task) => {\n const result: CosmiconfigResult = options?.config\n ? await explore.load(options.config)\n : await explore.search()\n\n if (!result || ('isEmpty' in result && result.isEmpty)) {\n throw new Error('Cannot find config file.')\n }\n\n if (!Value.Check(RuntimeConfig, result.config)) {\n const errors = [...Value.Errors(RuntimeConfig, result.config)]\n const message = errors.map(({ path, message }) => `${path}: ${message}`).join('\\n')\n throw new Error(`Invalid Config: ${message}`)\n }\n\n const rc = Value.Default(RuntimeConfig, result.config) as RuntimeConfig\n\n validateModules(rc.modules)\n\n if (options?.debug) {\n await fs.ensureDir('.keq')\n rc.debug = true\n }\n\n if (options?.tolerant) {\n rc.tolerant = true\n }\n\n const packageJsonInfo = findNearestPackageJson()\n if (packageJsonInfo) {\n const moduleSystem = getProjectModuleSystem(packageJsonInfo)\n rc.esm = moduleSystem === 'esm'\n }\n\n let matcher: IgnoreMatcher = new IgnoreMatcher([])\n if (result.filepath) {\n const ignoreFilepath = path.resolve(path.dirname(result.filepath), '.keqignore')\n if (await fs.exists(ignoreFilepath)) {\n matcher = await IgnoreMatcher.read(ignoreFilepath)\n }\n }\n\n const ignoreRules = options.ignore === false ? [] : options.ignore?.rules || []\n for (const rule of ignoreRules) {\n matcher.append({\n persist: !!rule.persist,\n ignore: rule.ignore,\n moduleName: rule.moduleName,\n operationMethod: rule.operationMethod,\n operationPathname: rule.operationPathname,\n })\n }\n\n if (options?.modules && options.modules.length) {\n const notExistModules = options.modules.filter((moduleName) => !(moduleName in rc.modules))\n if (notExistModules.length) {\n throw new Error(`Cannot find module(s) ${notExistModules.join(', ')} in config file.`)\n }\n\n const ignoredModules = R.difference(R.keys(rc.modules), options.modules)\n for (const moduleName of ignoredModules) {\n matcher.append({\n persist: false,\n ignore: true,\n moduleName,\n operationMethod: '*',\n operationPathname: '*',\n })\n }\n }\n\n context.setup = { rc, matcher: matcher }\n\n if (rc.plugins && rc.plugins.length) {\n for (const plugin of rc.plugins) {\n plugin.apply(compiler)\n }\n }\n },\n }\n}\n\nexport function createSetupTask(compiler: Compiler, options: SetupTaskOptions & BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Setup',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(compiler, options),\n {\n task: (context, task) => compiler.hooks.afterSetup\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import { KeqQueryOptions } from 'keq'\nimport { Static, Type } from '@sinclair/typebox'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { OperationIdFactory } from './operation-id-factory.js'\nimport { FileNamingStyle } from '../constants/file-naming-style.js'\nimport { Qs } from './qs.js'\nimport { Plugin } from './plugin.js'\n\n\nexport const RuntimeConfig = Type.Object({\n /**\n * Whether to generate ES Module code\n *\n * If not specified, the module system will be inferred from the nearest package.json \"type\" field\n * or defaults to \"cjs\" if no package.json is found.\n */\n esm: Type.Optional(Type.Boolean({ default: false })),\n\n /**\n * Output directory for generated files\n */\n outdir: Type.String({ default: `${process.cwd()}/api` }),\n\n /**\n * File naming style for generated files\n */\n fileNamingStyle: Type.Enum(FileNamingStyle, { default: FileNamingStyle.snakeCase }),\n\n modules: Type.Record(Type.String(), Type.String()),\n\n operationIdFactory: Type.Optional(Type.Function([Type.Any()], Type.String())),\n\n qs: Type.Optional(Type.Union([\n Qs,\n Type.Function([Type.Any()], Qs),\n ])),\n\n debug: Type.Optional(Type.Boolean({ default: false })),\n\n /**\n * Whether to tolerate wrong swagger structure\n */\n tolerant: Type.Optional(Type.Boolean({ default: false })),\n\n plugins: Type.Optional(Type.Array(Type.Any(), { default: [] })),\n})\n\n\nexport type KeqQueryOptionsFactory = (parameter: OpenAPIV3_1.ParameterObject) => KeqQueryOptions | undefined\n\nexport interface RuntimeConfig extends Omit<Static<typeof RuntimeConfig>, 'operationId' | 'qs' | 'plugins'> {\n operationIdFactory?: OperationIdFactory\n qs?: KeqQueryOptions | KeqQueryOptionsFactory\n plugins?: Plugin[]\n}\n","\nexport enum FileNamingStyle {\n camelCase = 'camelCase',\n capitalCase = 'capitalCase',\n constantCase = 'constantCase',\n dotCase = 'dotCase',\n headerCase = 'headerCase',\n noCase = 'noCase',\n paramCase = 'paramCase',\n pascalCase = 'pascalCase',\n pathCase = 'pathCase',\n sentenceCase = 'sentenceCase',\n snakeCase = 'snakeCase',\n}\n","import { Static, Type } from '@sinclair/typebox'\nimport { QsArrayFormat } from '~/constants/qs-array-format.js'\n\n\nexport const Qs = Type.Object({\n indices: Type.Optional(Type.Boolean()),\n arrayFormat: Type.Optional(Type.Enum(QsArrayFormat)),\n allowDots: Type.Optional(Type.Boolean()),\n})\n\nexport type Qs = Static<typeof Qs>\n","export enum QsArrayFormat {\n brackets = 'brackets',\n indices = 'indices',\n repeat = 'repeat',\n comma = 'comma',\n space = 'space',\n pipe = 'pipe',\n}\n","import * as R from 'ramda'\nimport fs from 'fs-extra'\nimport { OperationDefinition } from '~/tasks/utils/operation-definition.js'\nimport { ModuleDefinition } from '~/tasks/utils/module-definition.js'\n\n\nexport interface IgnoreMatcherRule {\n persist: boolean\n ignore: boolean\n moduleName: string\n operationMethod: string\n operationPathname: string\n}\n\n\nexport class IgnoreMatcher {\n private rules: IgnoreMatcherRule[]\n\n constructor(rules: IgnoreMatcherRule[]) {\n this.rules = rules\n }\n\n static async read(filepath: string): Promise<IgnoreMatcher> {\n let content = await fs.readFile(filepath, 'utf-8')\n\n content = content\n .replace(/\\r\\n/g, '\\n')\n .replace(/\\r/g, '\\n')\n .replace(/#.*$/gm, '')\n .replace(/\\n+/g, '\\n')\n .trim()\n\n let rules = content\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line): IgnoreMatcherRule => {\n const matched = line.match(/^(!)?\\s*([^\\s/]+)\\s+([^\\s/]+)\\s+([^\\s]+)$/)\n if (!matched) throw new Error(`Invalid ignore rule: \"${line}\"`)\n\n const [, flag, moduleName, operationMethod, operationPathname] = matched\n\n return {\n persist: true,\n ignore: !flag,\n moduleName,\n operationMethod: operationMethod.toLowerCase(),\n operationPathname,\n }\n })\n rules = R.sortBy(\n R.prop('ignore'),\n rules,\n )\n\n rules = R.uniqWith(\n (a, b) => a.moduleName === b.moduleName && a.operationMethod === b.operationMethod && a.operationPathname === b.operationPathname,\n rules,\n )\n\n return new IgnoreMatcher(rules)\n }\n\n async write(filepath: string): Promise<void> {\n const ruleGroups = R.compose(\n R.groupBy((rule: IgnoreMatcherRule) => rule.moduleName),\n R.reverse,\n R.uniqWith<IgnoreMatcherRule>(\n (a, b) => a.moduleName === b.moduleName && a.operationMethod === b.operationMethod && a.operationPathname === b.operationPathname,\n ),\n R.filter((rule: IgnoreMatcherRule) => rule.persist),\n )(this.rules)\n\n const content = Object.entries(ruleGroups)\n .sort((a, b) => {\n const aModuleName = a[0]\n const bModuleName = b[0]\n\n if (aModuleName === '*') return -1\n if (bModuleName === '*') return 1\n\n return aModuleName.localeCompare(bModuleName)\n })\n .map(([, rules]) => (rules || [])\n .sort((a, b) => {\n if (a.ignore !== b.ignore) return a.ignore ? -1 : 1\n\n if (a.operationMethod === '*') return -1\n if (b.operationMethod === '*') return 1\n if (a.operationPathname === '*') return -1\n if (b.operationPathname === '*') return 1\n\n if (a.operationMethod !== b.operationMethod) return a.operationMethod.localeCompare(b.operationMethod)\n if (a.operationPathname !== b.operationPathname) return a.operationPathname.localeCompare(b.operationPathname)\n\n return 0\n })\n .map((rule) => `${rule.ignore ? '' : '! '}${rule.moduleName} ${rule.operationMethod.toUpperCase()} ${rule.operationPathname}`)\n .join('\\n'))\n .join('\\n\\n')\n\n await fs.writeFile(filepath, content, 'utf-8')\n }\n\n append(rule: IgnoreMatcherRule): void {\n this.rules.unshift(rule)\n }\n\n // if operation is ignored, return true\n isOperationIgnored(operationDefinition: OperationDefinition): boolean {\n const moduleName = operationDefinition.module.name\n const operationMethod = operationDefinition.method.toLowerCase()\n const operationPathname = operationDefinition.pathname\n\n for (const rule of this.rules) {\n if (rule.moduleName !== '*' && rule.moduleName !== moduleName) continue\n if (rule.operationMethod !== '*' && rule.operationMethod !== operationMethod) continue\n if (rule.operationPathname !== '*' && rule.operationPathname !== operationPathname) continue\n\n return rule.ignore\n }\n\n return false\n }\n\n isModuleIgnored(moduleDefinition: ModuleDefinition): boolean {\n const moduleName = moduleDefinition.name\n\n for (const rule of this.rules) {\n if (!rule.ignore) {\n if (rule.moduleName === '*' || rule.moduleName === moduleName) return false\n continue\n }\n\n if (rule.operationMethod !== '*') continue\n if (rule.operationPathname !== '*') continue\n\n if (rule.moduleName === '*' || rule.moduleName === moduleName) return true\n }\n\n return false\n }\n}\n","import * as R from 'ramda'\nimport validator from 'validator'\n\n\nexport function validateModules(modules: Record<string, string>): void {\n const keys = Object.keys(modules)\n\n for (const key of keys) {\n if (!/^[A-Za-z_][A-Za-z0-9_$]*$/.test(key)) {\n throw new Error(`Module name \"${key}\" is not valid. It must start with a letter or underscore, and can only contain letters, numbers, and underscores.`)\n }\n }\n\n const keysGroupByLowerCase = R.groupBy(R.toLower, keys)\n\n for (const groupKey in keysGroupByLowerCase) {\n const keys = keysGroupByLowerCase[groupKey] || []\n if (keys.length > 1) {\n throw new Error(`Module names ${keys.map((name) => `\"${name}\"`).join(', ')} are case-insensitively duplicated.`)\n }\n }\n\n for (const key in modules) {\n const address = modules[key]\n\n if (validator.isURL(address, { require_host: true, require_protocol: true, protocols: ['http', 'https'] })) {\n continue\n }\n\n if (/^(\\/|\\.\\/|\\.\\.\\/)/.test(address)) {\n continue\n }\n\n throw new Error(`Module address \"${address}\" of module \"${key}\" is not valid. It must be a URL or a local path.`)\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport interface PackageJsonInfo {\n json: any\n path: string\n}\n\n\nexport function findNearestPackageJson(startDir = process.cwd()): PackageJsonInfo | null {\n let dir = startDir\n // 向上遍历直到磁盘根目录\n while (true) {\n const pkgPath = path.join(dir, 'package.json')\n if (fs.existsSync(pkgPath)) {\n const json = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))\n return { json, path: pkgPath }\n }\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n return null\n}\n","import { PackageJsonInfo } from './find-nearest-package-json.js'\n\ntype ModuleSystem = 'esm' | 'cjs'\n\nexport function getProjectModuleSystem(pkgInfo: PackageJsonInfo): ModuleSystem {\n if (!pkgInfo?.json) return 'cjs'\n const { json } = pkgInfo\n\n if (json.type === 'module') return 'esm'\n return 'cjs'\n}\n","import { ListrTask, PRESET_TIMER } from 'listr2'\nimport { ModuleDefinition } from '../utils/module-definition.js'\nimport { ApiDocument } from '../utils/api-document.js'\nimport { TaskContext } from '../types/task-context.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\n\n\ninterface DownloadTaskOptions {\n skipIgnoredModules?: boolean\n}\n\nfunction main(compiler: Compiler, options?: DownloadTaskOptions): ListrTask<TaskContext> {\n return {\n task: (context, task) => {\n if (!context.setup) {\n throw new Error('Please run setup task first.')\n }\n\n const rc = context.setup.rc\n const matcher = context.setup.matcher\n\n context.downloaded = {\n documents: [],\n }\n\n return task.newListr(\n Object.entries(rc.modules)\n .map(([moduleName, address]) => new ModuleDefinition(moduleName, address))\n .map((moduleDefinition): ListrTask<TaskContext> => ({\n title: moduleDefinition.name,\n task: async (ctx, task) => {\n if (options?.skipIgnoredModules && matcher.isModuleIgnored(moduleDefinition)) {\n task.skip(`(${moduleDefinition.name}) is ignored`)\n return\n }\n\n task.output = `Downloaded from ${moduleDefinition.address}`\n const document = await ApiDocument.create(moduleDefinition)\n ctx.downloaded!.documents.push(document)\n },\n })),\n {\n concurrent: true,\n exitOnError: false,\n collectErrors: 'minimal',\n rendererOptions: {\n collapseSubtasks: false,\n // collapseSkips: false,\n suffixSkips: true,\n timer: PRESET_TIMER,\n },\n },\n )\n },\n }\n}\n\nexport function createDownloadTask(compiler: Compiler, options?: DownloadTaskOptions & BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Download',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (_, task) => task.newListr(\n [\n main(compiler, options),\n {\n task: (context, task) => compiler.hooks.afterDownload\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","export class ModuleDefinition {\n name: string\n address: string\n\n constructor(name: string, address: string) {\n this.name = name\n this.address = address\n }\n}\n","import fs from 'fs-extra'\nimport * as path from 'path'\nimport * as yaml from 'js-yaml'\nimport * as validUrl from 'valid-url'\nimport { request } from 'keq'\nimport type { OpenAPI } from '@scalar/openapi-types'\nimport { ModuleDefinition } from './module-definition.js'\nimport { upgrade, validate } from '@scalar/openapi-parser'\nimport { ApiDocumentV3_1 } from './api-document_v3_1.js'\nimport { fixSwagger } from 'swagger-fix'\nimport { RuntimeConfig } from '~/types/runtime-config.js'\nimport { Debugger } from '~/utils/debugger.js'\nimport { SwaggerUtils } from '../../utils/swagger-utils/index.js'\n\n\nexport class ApiDocument<T extends OpenAPI.Document = OpenAPI.Document> {\n readonly module: ModuleDefinition\n readonly swagger: T\n\n constructor(swagger: T, module: ModuleDefinition) {\n this.module = module\n this.swagger = swagger\n }\n\n static cache: Map<string, ApiDocument> = new Map()\n\n private static async download(url: string): Promise<OpenAPI.Document> {\n let content: string\n try {\n const res = await request\n .get(url)\n .resolveWith('response')\n\n if (res.status >= 400) throw new Error(`Request failed with status code ${res.status}`)\n\n content = await res.text()\n } catch (e) {\n if (e instanceof Error) {\n e.message = `Unable get the swagger file from ${url}: ${e.message}`\n }\n\n throw e\n }\n\n\n try {\n return JSON.parse(content) as OpenAPI.Document\n } catch (e) {\n throw new Error(`The swagger file get from url isn't json: ${url}`)\n }\n }\n\n private static async read(filePath: string): Promise<OpenAPI.Document> {\n const fileExt = path.extname(filePath)\n const content = await fs.readFile(filePath, 'utf8')\n\n if (['.yml', '.yaml'].includes(fileExt)) {\n return yaml.load(content) as OpenAPI.Document\n } else if (fileExt === '.json') {\n return JSON.parse(content) as OpenAPI.Document\n }\n\n throw new Error(`File ${fileExt} not support.`)\n }\n\n static async create(moduleDefinition: ModuleDefinition): Promise<ApiDocument> {\n const { address } = moduleDefinition\n\n if (this.cache.has(moduleDefinition.address)) {\n return this.cache.get(moduleDefinition.address)!\n }\n\n const swagger = validUrl.isUri(address)\n ? await this.download(address)\n : await this.read(address)\n\n return new ApiDocument(swagger, moduleDefinition)\n }\n\n async validate(): ReturnType<typeof validate> {\n return await validate(this.swagger)\n }\n\n // remove chinese and special symbols\n fix(): ApiDocument {\n const swagger: T = fixSwagger(this.swagger as any)\n\n return new ApiDocument(\n swagger,\n new ModuleDefinition(\n this.module.name,\n `file://${this.module.name}.fixed.json`,\n ),\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async toV3_1(rc?: RuntimeConfig): Promise<ApiDocumentV3_1> {\n const debug = new Debugger(rc)\n let swagger: any = this.swagger\n\n const { specification } = upgrade(swagger)\n swagger = specification\n debug.writeSwagger(`.keq/${this.module.name}.3_1.json`, swagger)\n\n swagger = SwaggerUtils.dereferenceOperation(swagger)\n debug.writeSwagger(`.keq/${this.module.name}.3_1.sharked.json`, swagger)\n\n if (rc?.operationIdFactory) {\n const operationIdFactory = rc.operationIdFactory\n swagger = SwaggerUtils.updateOperationId(\n swagger,\n (method, pathname, operation) => operationIdFactory({ method, pathname, operation, module: this.module }),\n )\n debug.writeSwagger(`.keq/${this.module.name}.3_1.formatted.json`, swagger)\n }\n\n return new ApiDocumentV3_1(\n swagger,\n new ModuleDefinition(\n this.module.name,\n `file://${this.module.name}.v3_1.json`,\n ),\n )\n }\n}\n\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { ModuleDefinition } from './module-definition.js'\nimport { SupportedMethods } from '~/constants/supported-methods.js'\nimport { OperationDefinition } from './operation-definition.js'\nimport { SchemaDefinition } from './schema-definition.js'\nimport { logger } from '~/utils/logger.js'\nimport { openapiShakingSync } from '@opendoc/openapi-shaking'\n\n\nexport class ApiDocumentV3_1 {\n readonly module: ModuleDefinition\n readonly swagger: OpenAPIV3_1.Document\n\n constructor(swagger: OpenAPIV3_1.Document, module: ModuleDefinition) {\n this.module = module\n this.swagger = swagger\n }\n\n get schemas(): SchemaDefinition[] {\n const module = this.module\n\n return Object.entries(this.swagger.components?.schemas || {})\n .map(([name, schema]) => new SchemaDefinition({\n id: `#/components/schemas/${name}`,\n name,\n schema,\n module,\n document: this,\n }))\n }\n\n get operations(): OperationDefinition[] {\n const module = this.module\n\n return Object.entries(this.swagger.paths || {})\n .flatMap(([pathname, pathItem]) => Object.entries(pathItem || {})\n .filter(([method]) => SupportedMethods.includes(method.toLowerCase()))\n .map(([method, operation]) => new OperationDefinition({\n method,\n pathname,\n operation,\n module,\n document: this,\n })))\n }\n\n isEmpty(): boolean {\n return R.isEmpty(this.swagger.paths)\n }\n\n dereference($ref: string): SchemaDefinition | undefined {\n if ($ref.startsWith('#/')) {\n return this.schemas.find((schema) => schema.id === $ref)\n }\n\n logger.warn(`The $ref(${$ref}) is not defined in ${this.module.name} swagger.`)\n }\n\n isRefDefined($ref: string): boolean {\n if ($ref.startsWith('#/')) {\n const path = $ref.replace('#/', '').split('/')\n return R.path(path, this.swagger) !== undefined\n }\n\n return false\n }\n\n sharking(filter: (operationDefinition: OperationDefinition) => boolean): ApiDocumentV3_1 {\n const isAccepted = (pathname: string, method: string, operation: OpenAPIV3_1.Document): boolean => {\n if (!SupportedMethods.includes(method)) return false\n\n const operationDefinition = new OperationDefinition({\n method,\n pathname,\n operation,\n module: this.module,\n document: this,\n })\n\n return filter(operationDefinition)\n }\n\n\n const sharkedSwagger = openapiShakingSync(\n this.swagger as any,\n isAccepted as any,\n { tolerant: true },\n ) as OpenAPIV3_1.Document\n\n return new ApiDocumentV3_1(\n sharkedSwagger,\n new ModuleDefinition(\n this.module.name,\n `file://${this.module.name}.v3_1.sharked.json`,\n ),\n )\n }\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { ModuleDefinition } from './module-definition.js'\nimport { isKeywords } from '~/utils/is-keywords.js'\nimport { isReservedWord } from '~/utils/is-reserved-word.js'\nimport { ApiDocumentV3_1 } from './api-document_v3_1.js'\nimport { JSONPath } from 'jsonpath-plus'\nimport { SchemaDefinition } from './schema-definition.js'\n\n\nexport class OperationDefinition {\n readonly module: ModuleDefinition\n\n readonly operationId: string\n readonly method: string\n readonly pathname: string\n readonly operation: OpenAPIV3_1.OperationObject\n readonly document: ApiDocumentV3_1\n\n constructor(args: {\n method: string\n pathname: string\n operation: OpenAPIV3_1.OperationObject\n module: ModuleDefinition\n document: ApiDocumentV3_1\n }) {\n this.module = args.module\n this.method = args.method.toLowerCase()\n this.pathname = args.pathname\n this.document = args.document\n this.operationId = this.formatOperationId(args.method, args.pathname, args.operation)\n\n this.operation = {\n ...args.operation,\n operationId: this.operationId,\n }\n }\n\n private formatOperationId(method: string, pathname: string, operation: OpenAPIV3_1.OperationObject): string {\n const operationId = operation.operationId\n\n if (\n operationId\n && operationId !== 'index'\n && !isKeywords(operationId)\n && !isReservedWord(operationId)\n ) {\n return operationId as string\n }\n\n return `${method}_${pathname}`\n .replace(/\\//g, '_')\n .replace(/-/g, '_')\n .replace(/:/g, '$$')\n .replace(/{(.+)}/, '$$$1')\n }\n\n getDependencies(): SchemaDefinition[] {\n const refs = R.uniq([\n ...JSONPath<string>({\n path: '$.requestBody.content..schema..$ref',\n json: this.operation,\n }),\n ...JSONPath<string>({\n path: '$.responses..content..schema..$ref',\n json: this.operation,\n }),\n ...JSONPath<string>({\n path: '$.parameters..schema..$ref',\n json: this.operation,\n }),\n ])\n\n const dependencies = refs\n .filter((ref) => typeof ref === 'string' && ref)\n .map((ref) => {\n const schemaDefinition = this.document.dereference(ref)\n if (schemaDefinition) return schemaDefinition\n\n return new SchemaDefinition({\n id: ref,\n name: 'unknown',\n schema: {},\n module: this.module,\n document: this.document,\n })\n })\n\n return dependencies\n }\n}\n","const keywords = [\n 'break',\n 'case',\n 'catch',\n 'continue',\n 'default',\n 'delete',\n 'do',\n 'else',\n 'finally',\n 'for',\n 'function',\n 'if',\n 'in',\n 'instanceof',\n 'new',\n 'return',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'while',\n 'with',\n]\n\nexport function isKeywords(str: string): boolean {\n return keywords.includes(str)\n}\n","\nconst reservedWords = [\n 'abstract',\n 'boolean',\n 'byte',\n 'char',\n 'class',\n 'const',\n 'debugger',\n 'double',\n 'enum',\n 'export',\n 'extends',\n 'final',\n 'float',\n 'goto',\n 'implements',\n 'import',\n 'int',\n 'interface',\n 'long',\n 'native',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'short',\n 'static',\n 'super',\n 'synchronized',\n 'throws',\n 'transient',\n 'volatile',\n]\n\nexport function isReservedWord(str: string): boolean {\n return reservedWords.includes(str)\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { ModuleDefinition } from './module-definition.js'\nimport { JSONPath } from 'jsonpath-plus'\nimport { ApiDocumentV3_1 } from './api-document_v3_1.js'\n\n\nexport class SchemaDefinition {\n readonly id: string\n readonly name: string\n readonly schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject\n readonly module: ModuleDefinition\n readonly document: ApiDocumentV3_1\n\n constructor(args: {\n id: string\n name: string\n schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject\n module: ModuleDefinition\n document: ApiDocumentV3_1\n }) {\n this.module = args.module\n this.name = args.name\n this.id = args.id\n this.schema = args.schema\n this.document = args.document\n }\n\n getDependencies(): SchemaDefinition[] {\n const refs: string[] = R.uniq(JSONPath({\n path: \"$..*['$ref']\",\n json: this.schema,\n }))\n\n return refs\n .filter((ref) => typeof ref === 'string' && !!ref.trim())\n .map((ref) => {\n const definition = this.document.dereference(ref)\n if (definition) return definition\n\n return new SchemaDefinition({\n id: ref,\n name: 'unknown',\n schema: {},\n module: this.module,\n document: this.document,\n })\n })\n }\n}\n","import fs from 'fs-extra'\nimport { RuntimeConfig } from '~/types/runtime-config.js'\n\n\nexport class Debugger {\n constructor(private rc?: RuntimeConfig) {\n }\n\n writeSwagger(fullpath: string, swagger: any): void {\n if (this.rc?.debug) {\n void fs.writeJSON(fullpath, swagger, { spaces: 2 })\n }\n }\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\nexport function dereference<T extends OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ResponseObject | OpenAPIV3_1.ParameterObject | OpenAPIV3_1.RequestBodyObject | OpenAPIV3_1.ReferenceObject>($ref: string, swagger: OpenAPIV3_1.Document): T {\n let value\n\n for (const key of $ref.split('/')) {\n if (key === '#') {\n value = swagger\n } else {\n value = value[key]\n }\n\n if (!value) break\n }\n\n return value as T\n}\n","import * as R from 'ramda'\nimport jsonpointer from 'jsonpointer'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JSONPath } from 'jsonpath-plus'\nimport { removeUndefinedRef } from './remove-undefined-ref.js'\nimport { SwaggerUtils } from './index.js'\n\n\nfunction dereferencePathObject(swagger: OpenAPIV3_1.Document): void {\n const matches = JSONPath({\n path: '$.paths.*.$ref^',\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of matches) {\n const value = SwaggerUtils.dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n}\n\nfunction dereferenceRequestBody(swagger: OpenAPIV3_1.Document): void {\n const matches = JSONPath({\n path: '$.paths.*.*.requestBody.$ref^',\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of matches) {\n const value = SwaggerUtils.dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n}\n\nexport function dereferenceResponses(swagger: OpenAPIV3_1.Document): void {\n const matches = [\n ...JSONPath({\n path: '$.paths.*.*.responses.*.$ref^',\n json: swagger,\n resultType: 'all',\n }),\n ...JSONPath({\n path: '$.paths.*.*.responses.*.headers.*.$ref^',\n json: swagger,\n resultType: 'all',\n }),\n ]\n\n for (const match of matches) {\n const value = SwaggerUtils.dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n}\n\nfunction dereferenceParameters(swagger: OpenAPIV3_1.Document): void {\n const matches = JSONPath({\n path: '$.paths.*.*.parameters.*.$ref^',\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of matches) {\n const value = SwaggerUtils.dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n}\n\nexport function dereferenceOperation(swagger: OpenAPIV3_1.Document): OpenAPIV3_1.Document {\n const shadow = R.clone(swagger)\n\n dereferencePathObject(shadow)\n dereferenceRequestBody(shadow)\n dereferenceResponses(shadow)\n dereferenceParameters(shadow)\n\n return removeUndefinedRef(shadow)\n}\n","import * as R from 'ramda'\nimport jsonpointer from 'jsonpointer'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JSONPath } from 'jsonpath-plus'\nimport { isRefDefined } from './is-ref-defined.js'\n\n\n// remove schema $ref if the reference is not founded\nexport function removeUndefinedRef(swagger: OpenAPIV3_1.Document): OpenAPIV3_1.Document {\n const shadow = R.clone(swagger)\n\n const matches = JSONPath({\n path: \"$..*['$ref']^\",\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of matches) {\n if (match.value.$ref && !isRefDefined(match.value.$ref, swagger)) {\n jsonpointer.set(shadow, match.pointer, R.omit(['$ref'], match.value))\n }\n }\n\n return shadow\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\nexport function isRefDefined($ref: string, swagger: OpenAPIV3_1.Document): boolean {\n if ($ref.startsWith('#/')) {\n const path = $ref.replace('#/', '').split('/')\n return R.path(path, swagger) !== undefined\n }\n\n return false\n}\n\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { SupportedMethods } from '~/constants/supported-methods.js'\n\n\ntype OperationUpdater = (method: string, pathname: string, operation: OpenAPIV3_1.OperationObject) => string | undefined\n\n\nexport function updateOperationId(swagger: OpenAPIV3_1.Document, fn: OperationUpdater): OpenAPIV3_1.Document {\n const shadow = R.clone(swagger)\n\n for (const [pathname, pathItem] of Object.entries(shadow.paths || {})) {\n for (const m in pathItem) {\n const method = m.toLowerCase()\n if (!SupportedMethods.includes(method)) continue\n if (typeof pathItem[m] !== 'object' || Array.isArray(pathItem[m]) || pathItem[m] === null) continue\n\n const operation: OpenAPIV3_1.OperationObject = pathItem[m]\n const operationId = fn(method, pathname, operation)\n\n if (typeof operationId === 'string' && operationId.length > 0) {\n operation.operationId = operationId\n }\n }\n }\n\n return shadow\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\nexport function isArray(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): schema is OpenAPIV3_1.ArraySchemaObject {\n return schema.type === 'array'\n}\n","\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { MixedSchemaObject } from './types/mixed-schema-object.js'\n\nexport function isMixed(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): schema is MixedSchemaObject {\n return Array.isArray(schema.type)\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\nexport function isNonArray(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): schema is OpenAPIV3_1.NonArraySchemaObject {\n return typeof schema.type === 'string' && schema.type !== 'array'\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\nexport function isRef(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.ResponseObject | OpenAPIV3_1.ParameterObject): schema is OpenAPIV3_1.ReferenceObject {\n return '$ref' in schema\n}\n","import { isArray } from './is-array.js'\nimport { isMixed } from './is-mixed.js'\nimport { isNonArray } from './is-non-array.js'\nimport { isRef } from './is-ref.js'\n\n\nexport class JsonSchemaUtils {\n static isRef = isRef\n static isArray = isArray\n static isNonArray = isNonArray\n static isMixed = isMixed\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { dereference } from './dereference.js'\nimport { JsonSchemaUtils } from '../json-schema-utils/index.js'\n\n\nexport function dereferenceDeep<T extends OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ResponseObject | OpenAPIV3_1.ParameterObject | OpenAPIV3_1.RequestBodyObject>($ref: string, swagger: OpenAPIV3_1.Document): T {\n const stack = [$ref]\n let value\n\n while (true) {\n const last = stack[stack.length - 1]\n value = dereference(last, swagger)\n\n if (JsonSchemaUtils.isRef(value)) {\n if (!stack.includes(value.$ref)) {\n stack.push(value.$ref)\n continue\n } else {\n // Circular reference detected\n throw new Error(`Circular reference detected: ${stack.join(' -> ')} -> ${value.$ref}`)\n }\n }\n\n break\n }\n\n return value as T\n}\n","import { dereference } from './dereference.js'\nimport { dereferenceOperation } from './dereference-operation.js'\nimport { isRefDefined } from './is-ref-defined.js'\nimport { removeUndefinedRef } from './remove-undefined-ref.js'\nimport { updateOperationId } from './update-operation-id.js'\nimport { dereferenceDeep } from './dereference-deep.js'\n\n\nexport class SwaggerUtils {\n static isRefDefined = isRefDefined\n static dereference = dereference\n static dereferenceDeep = dereferenceDeep\n static removeUndefinedRef = removeUndefinedRef\n static dereferenceOperation = dereferenceOperation\n static updateOperationId = updateOperationId\n}\n","import { ListrTask } from 'listr2'\nimport { TaskContext } from '~/tasks/types/task-context.js'\nimport { Debugger } from '~/utils/debugger.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\n\n\nfunction main(): ListrTask<TaskContext> {\n return {\n task: (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.downloaded) throw new Error('Please run download task first.')\n\n const rc = context.setup.rc\n const downloadedDocuments = context.downloaded.documents\n const debug = new Debugger(rc)\n\n context.validated = {\n documents: [],\n }\n\n return task.newListr(\n downloadedDocuments.map((document): ListrTask<TaskContext> => ({\n title: document.module.name,\n task: async (ctx, task) => {\n const { valid, errors } = await document.validate()\n\n if (!valid) {\n const message = `${document.module.name} module swagger file does not conform to the openapi@3.1 standard specifications or have grammatical errors, which may cause unexpected errors: \\n${errors?.map((e) => ` - ${e.message}`).join('\\n')}`\n task.output = message\n }\n\n const fixedDocument = document.fix()\n debug.writeSwagger(`.keq/${document.module.name}.fixed.json`, fixedDocument.swagger)\n\n const v3_1Document = await fixedDocument.toV3_1(rc)\n ctx.validated!.documents.push(v3_1Document)\n },\n })),\n {\n concurrent: true,\n rendererOptions: {\n collapseSubtasks: false,\n persistentOutput: true,\n },\n },\n )\n },\n }\n}\n\nexport function createValidateTask(compiler: Compiler, options?: BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Validate',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(),\n {\n task: (context, task) => compiler.hooks.afterValidate\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import { ListrTask } from 'listr2'\nimport { TaskContext } from '~/tasks/types/task-context.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\n\n\nexport interface ShakingTaskOptions {\n skipIgnoredModules?: boolean\n skipEmptyDocuments?: boolean\n}\n\nfunction main(compiler: Compiler, options?: ShakingTaskOptions): ListrTask<TaskContext> {\n return {\n task: (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.validated) throw new Error('Please run validate task first.')\n\n const matcher = context.setup.matcher\n const documents = context.validated.documents\n\n context.shaken = {\n documents: [],\n }\n\n return task.newListr(\n documents.map((document): ListrTask<TaskContext> => ({\n title: document.module.name,\n task: (ctx, task) => {\n if (options?.skipIgnoredModules && matcher.isModuleIgnored(document.module)) {\n task.skip(`${document.module.name} module is ignored`)\n return\n }\n\n const shakenDocument = document.sharking(\n (operationDefinition) => !matcher.isOperationIgnored(operationDefinition),\n )\n\n if (options?.skipEmptyDocuments && shakenDocument.isEmpty()) {\n task.skip(`${document.module.name} module is empty`)\n return\n }\n\n ctx.shaken!.documents.push(shakenDocument)\n },\n })),\n {\n concurrent: true,\n rendererOptions: {\n collapseSubtasks: false,\n suffixSkips: true,\n },\n },\n )\n },\n }\n}\n\n\nexport function createShakingTask(compiler: Compiler, options?: ShakingTaskOptions & BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Shaking',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(compiler, options),\n {\n task: (context, task) => compiler.hooks.afterShaking\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import * as path from 'path'\nimport fs from 'fs-extra'\nimport { ListrTask } from 'listr2'\nimport { TaskContext } from '~/tasks/types/task-context.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\nimport { File } from '../types/file.js'\n\n\nfunction createPersistArtifactTask(): ListrTask<TaskContext> {\n return {\n title: 'Write files',\n task: async (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.compiled) throw new Error('Please run compile task first.')\n\n const rc = context.setup.rc\n const artifacts = context.compiled.artifacts\n\n for (const artifact of artifacts) {\n artifact.changeFileNameCase(rc.fileNamingStyle)\n }\n\n const total = artifacts.length\n let completed = 0\n\n const files = await Promise.all(artifacts.map(async (artifact): Promise<File> => {\n const realpath = `./${path.join(rc.outdir, artifact.filepath)}`\n await fs.ensureFile(realpath)\n await fs.writeFile(realpath, artifact.toCode({ esm: !!rc.esm }))\n\n completed += 1\n task.output = `Persisted ${completed}/${total} files`\n\n return { path: path.resolve(realpath) }\n }))\n\n context.persisted = { files }\n },\n }\n}\n\nfunction createPersistIgnoreTask(): ListrTask<TaskContext> {\n return {\n title: 'Update .keqignore',\n task: async (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n\n const matcher = context.setup.matcher\n await matcher.write('.keqignore')\n },\n }\n}\n\n\nfunction main(): ListrTask<TaskContext> {\n return {\n task: (context, task) => task.newListr(\n [\n createPersistArtifactTask(),\n createPersistIgnoreTask(),\n ],\n {\n concurrent: true,\n rendererOptions: {\n collapseSubtasks: true,\n },\n },\n ),\n }\n}\n\nexport function createPersistTask(compiler: Compiler, options?: BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Persist',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(),\n {\n task: (context, task) => compiler.hooks.afterPersist\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import * as R from 'ramda'\nimport { Compiler } from '~/compiler/compiler.js'\nimport { jsonSchemaRenderer } from '~/renderer/json-schema/index.js'\nimport { TaskWrapper } from '~/tasks/types/index.js'\nimport { SchemaDefinition, Artifact } from '~/tasks/utils/index.js'\n\n\ninterface CompileProcessorOptions {\n // rc: RuntimeConfig\n compiler: Compiler\n task: TaskWrapper\n schemaDefinitions: SchemaDefinition[]\n}\n\nexport function genSchemaDefinitionFilepath(schemaDefinition: SchemaDefinition): string {\n const filename = `${schemaDefinition.name}.schema.ts`\n return [\n '.',\n schemaDefinition.module.name,\n 'components',\n 'schemas',\n filename,\n ].join('/')\n}\n\nfunction genEntrypointFilepath(moduleName): string {\n return [\n '.',\n moduleName,\n 'components',\n 'schemas',\n 'index.ts',\n ].join('/')\n}\n\nexport const isArtifactCompiledBy = function (schemaDefinition: SchemaDefinition) {\n return (artifact: Artifact): boolean => artifact.id === genSchemaDefinitionFilepath(schemaDefinition)\n}\n\nexport async function compileSchemaDefinition(options: CompileProcessorOptions): Promise<Artifact[]> {\n const { task, compiler, schemaDefinitions } = options\n\n const artifacts = await Promise.all(\n schemaDefinitions\n .map(async (schemaDefinition): Promise<Artifact> => {\n const content = await jsonSchemaRenderer(schemaDefinition)\n const filepath = genSchemaDefinitionFilepath(schemaDefinition)\n\n const artifact = new Artifact({\n id: filepath,\n filepath,\n content,\n extensionName: '.schema.ts',\n })\n\n return await compiler.hooks.afterCompileSchema.promise(artifact, schemaDefinition, task)\n }),\n )\n\n\n for (const schemaDefinition of schemaDefinitions) {\n const artifact = artifacts.find(isArtifactCompiledBy(schemaDefinition))\n if (!artifact) continue\n\n const dependentSchemaDefinitions = schemaDefinition.getDependencies()\n\n for (const dependentSchemaDefinition of dependentSchemaDefinitions) {\n const dependentArtifact = artifacts.find(isArtifactCompiledBy(dependentSchemaDefinition))\n if (!dependentArtifact) {\n artifact.addWarn(`Cannot find dependent $ref: ${dependentSchemaDefinition.id}`)\n continue\n }\n\n artifact.addDependence(dependentArtifact, [dependentSchemaDefinition.name])\n }\n }\n\n\n const schemaDefinitionsGroupByModuleName = R.groupBy(\n (schemaDefinition) => schemaDefinition.module.name,\n schemaDefinitions,\n )\n\n\n const entrypointArtifacts = Object.entries(schemaDefinitionsGroupByModuleName)\n .map(([moduleName, schemaDefinitions]) => {\n const filepath = genEntrypointFilepath(moduleName)\n\n const artifact = new Artifact({\n id: filepath,\n filepath,\n content: [\n '/* @anchor:file:start */',\n '/* @anchor:file:end */',\n ].join('\\n'),\n })\n\n for (const schemaDefinition of (schemaDefinitions || [])) {\n const dependentArtifact = artifacts.find(isArtifactCompiledBy(schemaDefinition))\n if (!dependentArtifact) {\n artifact.addWarn(`Cannot find dependent $ref: ${schemaDefinition.id}`)\n continue\n }\n\n artifact.addDependence(dependentArtifact, [], { export: true })\n }\n\n return artifact\n })\n\n return [...artifacts, ...entrypointArtifacts]\n}\n","import * as R from 'ramda'\nimport { SchemaDefinition } from '~/tasks/utils/schema-definition.js'\nimport { generateComment, generateSchema } from '../utils/generate-schema.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\n\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function jsonSchemaRenderer(schemaDefinition: SchemaDefinition): Promise<string> {\n let $comment = generateComment(schemaDefinition.schema)\n if ($comment) $comment += '\\n'\n\n if (typeof schemaDefinition.schema === 'boolean') {\n return [\n '/* @anchor:file:start */',\n '',\n $comment || undefined,\n `type ${schemaDefinition.name} = unknown`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n\n if (JsonSchemaUtils.isNonArray(schemaDefinition.schema) && schemaDefinition.schema.type === 'object') {\n // return `${$comment}export interface ${schemaDefinition.name} ${generateSchema(schemaDefinition.schema)}`\n\n return [\n '/* @anchor:file:start */',\n '',\n $comment || undefined,\n `export interface ${schemaDefinition.name} ${generateSchema(schemaDefinition.schema)}`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n\n return [\n '/* @anchor:file:start */',\n '',\n $comment || undefined,\n `export type ${schemaDefinition.name} = ${generateSchema(schemaDefinition.schema)}`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { MixedSchemaObject } from '../types/mixed-schema-object.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\n\nexport type Alias = (name: string) => string\n\nexport function generateComment(schema: OpenAPIV3_1.SchemaObject): string {\n const lines = ['/**']\n\n if (schema.description) {\n const description = schema.description.replace('*/', '*\\\\/')\n lines.push(...description.split('\\n').map((line) => ` * ${line}`))\n }\n\n if (schema.deprecated) {\n lines.push(' * @deprecated')\n }\n\n if (schema.readOnly) {\n lines.push(' * @readonly')\n }\n\n if (schema.format) {\n lines.push(` * @format ${schema.format}`)\n }\n\n lines.push(' */')\n\n if (lines.length === 2) return ''\n return lines.join('\\n')\n}\n\n\nexport function generateSchema(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject, alias: Alias = R.identity): string {\n if (typeof schema === 'boolean') return 'unknown'\n\n if (JsonSchemaUtils.isRef(schema)) return generateReference(schema, alias)\n if (JsonSchemaUtils.isMixed(schema)) return generateMixed(schema, alias)\n if (JsonSchemaUtils.isArray(schema)) return generateArray(schema, alias)\n\n if (schema.type === 'object') return generateObject(schema, alias)\n if (schema.enum) return generateEnum(schema, alias)\n if (schema.oneOf) return generateOneOf(schema, alias)\n if (schema.anyOf) return generateAnyOf(schema, alias)\n if (schema.allOf) return generateAllOf(schema, alias)\n if (schema.type === 'string') return generateString(schema, alias)\n if (schema.type === 'number') return generateNumber(schema, alias)\n if (schema.type === 'boolean') return generateBoolean(schema, alias)\n if (schema.type === 'null') return generateNull(schema, alias)\n if (schema.type === 'integer') return generateInteger(schema, alias)\n\n return 'unknown'\n}\n\nfunction generateMixed(schema: MixedSchemaObject, alias: Alias): string {\n if (Array.isArray(schema.type)) {\n schema.type\n .map((type): (OpenAPIV3_1.ArraySchemaObject | OpenAPIV3_1.NonArraySchemaObject) => ({ ...schema, type }))\n .map((schema) => generateSchema(schema, alias))\n .join(' | ')\n }\n\n return 'unknown'\n}\n\nfunction generateReference(schema: OpenAPIV3_1.ReferenceObject, alias: Alias): string {\n if (!schema.$ref || !schema.$ref.startsWith('#')) return `unknown /* ${schema.$ref.replace('*/', '*\\\\/')} */`\n\n const parts: string[] = schema.$ref.split('/')\n\n // TODO: 检查引用是否存在\n return alias(parts[parts.length - 1]) || 'unknown'\n}\n\n\nfunction generateArray(schema: OpenAPIV3_1.ArraySchemaObject, alias: Alias): string {\n if (schema.items && Array.isArray(schema.items)) {\n const items = schema.items.map((s) => generateSchema(s, alias)).join(', ')\n return `[${items}]`\n }\n\n if (schema.items && typeof schema.items === 'object') {\n return `${generateSchema(schema.items, alias)}[]`\n }\n\n return 'any[]'\n}\n\nexport function indent(space: number, text: string): string {\n const indentation = ' '.repeat(space)\n return text.split('\\n')\n .map((line) => `${indentation}${line}`)\n .join('\\n')\n}\n\nfunction generateObject(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (\n (!schema.properties || R.isEmpty(schema.properties))\n && (!schema.additionalProperties || R.isEmpty(schema.additionalProperties))\n ) {\n return 'object'\n }\n\n const $properties = Object.entries(schema.properties || {})\n .map(([propertyName, propertySchema]) => {\n let $comment = generateComment(propertySchema)\n if ($comment) $comment += '\\n'\n\n const $key = `\"${propertyName}\"${schema.required?.includes(propertyName) ? '' : '?'}`\n const $value = generateSchema(propertySchema, alias)\n\n return indent(2, `${$comment}${$key}: ${$value}`)\n })\n\n if (schema.additionalProperties) {\n const $value = schema.additionalProperties === true\n ? 'any'\n : generateSchema(schema.additionalProperties, alias)\n $properties.push(indent(2, `[key: string]: ${$value}`))\n }\n\n return [\n '{',\n ...$properties,\n '}',\n ].join('\\n')\n}\n\nfunction generateOneOf(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (!schema.oneOf) return 'unknown'\n\n return schema.oneOf.map((s) => generateSchema(s, alias)).join(' | ')\n}\n\nfunction generateAnyOf(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (!schema.anyOf) return 'unknown'\n\n return schema.anyOf.map((s) => generateSchema(s, alias)).join(' | ')\n}\n\nfunction generateAllOf(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (!schema.allOf) return 'unknown'\n\n return schema.allOf.map((s) => generateSchema(s, alias)).join(' & ')\n}\n\nfunction generateEnum(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (!schema.enum) return 'unknown'\n return schema.enum.map((v) => JSON.stringify(v)).join(' | ')\n}\n\nfunction generateString(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (schema.contentMediaType === 'application/octet-stream') return 'Blob | Buffer'\n if (schema.format === 'binary') return 'Blob | Buffer'\n return 'string'\n}\n\nfunction generateNumber(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n return 'number'\n}\n\nfunction generateBoolean(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n return 'boolean'\n}\n\nfunction generateNull(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n return 'null'\n}\n\nfunction generateInteger(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n return 'number'\n}\n","import type { Artifact } from './artifact.js'\n\nclass AnchorBlock {\n constructor(\n private artifact: Artifact,\n ) {}\n\n /**\n * Append content to the end of the anchor block.\n */\n append(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n\n const anchor = `@anchor:${anchorName}:end`\n const anchorIndex = lines.findIndex((line) => line.includes(`/* ${anchor} */`))\n\n if (anchorIndex === -1) {\n throw new Error(`\"${anchor}\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(anchorIndex, 0, content)\n this.artifact.content = lines.join('\\n')\n }\n\n prepend(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n\n const anchor = `@anchor:${anchorName}:start`\n const anchorIndex = lines.findIndex((line) => line.includes(`/* ${anchor} */`))\n\n if (anchorIndex === -1) {\n throw new Error(`\"${anchor}\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(anchorIndex + 1, 0, content)\n this.artifact.content = lines.join('\\n')\n }\n\n replace(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n const startIndex = lines.findIndex((line) => line.includes(`/* @anchor:${anchorName}:start */`))\n const endIndex = lines.findIndex((line) => line.includes(`/* @anchor:${anchorName}:end */`))\n\n if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {\n throw new Error(`\"@anchor:${anchorName}:start\" or \"@anchor:${anchorName}:end\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(startIndex + 1, endIndex - startIndex - 1, content)\n this.artifact.content = lines.join('\\n')\n }\n}\n\n\nexport class Anchor {\n block: AnchorBlock\n\n constructor(\n private artifact: Artifact,\n ) {\n this.block = new AnchorBlock(artifact)\n }\n\n append(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n\n const anchor = `@anchor:${anchorName}`\n const anchorIndex = lines.findIndex((line) => line.includes(`/* ${anchor} */`))\n\n if (anchorIndex === -1) {\n throw new Error(`\"${anchor}\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(anchorIndex + 1, 0, content)\n this.artifact.content = lines.join('\\n')\n }\n\n prepend(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n\n const anchor = `@anchor:${anchorName}`\n const anchorIndex = lines.findIndex((line) => line.includes(`/* ${anchor} */`))\n\n if (anchorIndex === -1) {\n throw new Error(`\"${anchor}\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(anchorIndex, 0, content)\n this.artifact.content = lines.join('\\n')\n }\n}\n","import * as path from 'path'\nimport * as changeCase from 'change-case'\nimport { Dependency, DependencyIdentifier, DependencyOptions, DependencySource } from './dependency.js'\nimport { FileNamingStyle } from '~/constants/file-naming-style.js'\nimport { toComment } from './to-comment.js'\nimport { ToCodeOptions } from '~/types/to-code-options.js'\nimport { Anchor } from './anchor.js'\n\n\nconst HeaderComment = [\n '// Code generated by keq-cli. DO NOT EDIT.',\n '// Code generated by keq-cli. DO NOT EDIT.',\n '// Code generated by keq-cli. DO NOT EDIT.',\n '',\n '',\n].join('\\n')\n\nexport class Artifact {\n id: string\n filepath: string\n dependencies: Dependency[] = []\n warns: string[] = []\n content: string\n extensionName\n anchor = new Anchor(this)\n\n constructor(options: {\n id: string\n filepath: string\n dependencies?: Dependency[]\n content: string\n extensionName?: string\n }) {\n this.id = options.id\n this.filepath = options.filepath\n this.extensionName = options.extensionName || path.extname(options.filepath)\n this.content = options.content\n\n if (options.dependencies) this.dependencies = options.dependencies\n }\n\n get dirname(): string {\n return path.dirname(this.filepath)\n }\n\n changeFileNameCase(style: FileNamingStyle): this {\n this.filepath = this.filepath\n .split('/')\n .map((part, index, arr) => {\n if (part === '.' || part === '..') return part\n\n if (index !== arr.length - 1) {\n return `${changeCase[style](part)}`\n }\n\n const baesname = path.basename(part, this.extensionName)\n return `${changeCase[style](baesname)}${this.extensionName}`\n })\n .join('/')\n\n return this\n }\n\n relativeTo(filepath: string): string {\n const relativePath = path.relative(filepath, this.filepath)\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n }\n\n addDependence(source: DependencySource, identifiers: (string | DependencyIdentifier)[], options?: DependencyOptions): Dependency {\n const dependence = new Dependency(\n source,\n identifiers,\n this,\n options,\n )\n\n this.dependencies.push(dependence)\n return dependence\n }\n\n addWarn(message: string): void {\n this.warns.push(message)\n }\n\n toCode(options: ToCodeOptions): string {\n let $dependencies = this.dependencies\n .map((dependency) => dependency.toCode(options))\n .filter((line) => line.trim() !== '')\n .join('\\n')\n\n if ($dependencies) {\n $dependencies += '\\n\\n'\n }\n\n let $warns = ''\n\n if (this.warns.length) {\n $warns = toComment([\n '!!! Here is some Problems !!!',\n '',\n this.warns,\n ].join('\\n'))\n $warns += '\\n\\n'\n }\n\n return `${HeaderComment}${$warns}${$dependencies}${this.content}`\n }\n}\n","import * as path from 'path'\nimport { Artifact } from './artifact.js'\nimport { toComment } from './to-comment.js'\nimport { ToCodeOptions } from '~/types/to-code-options.js'\n\nexport type DependencySource = string | Artifact\n\nexport interface DependencyOptions {\n export?: boolean\n}\n\nexport class DependencyIdentifier {\n constructor(\n public name: string,\n public alias?: string,\n ) {}\n\n toCode(): string {\n if (this.alias) {\n return `${this.name} as ${this.alias}`\n }\n return this.name\n }\n}\n\nexport class Dependency {\n readonly source: DependencySource\n readonly identifiers: DependencyIdentifier[]\n readonly export: boolean\n readonly belongTo: Artifact\n\n\n constructor(source: DependencySource, identifiers: (string | DependencyIdentifier)[], belongTo: Artifact, options?: DependencyOptions) {\n this.source = source\n this.identifiers = identifiers.map((i) => (typeof i === 'string' ? new DependencyIdentifier(i) : i))\n this.export = !!options?.export\n this.belongTo = belongTo\n }\n\n private get realSource(): string {\n if (typeof this.source === 'string') {\n if (this.source.startsWith('.')) return path.relative(this.belongTo.filepath, this.source)\n return this.source\n }\n return this.source.relativeTo(this.belongTo.dirname)\n }\n\n toCode(options: ToCodeOptions): string {\n const { esm } = options\n\n try {\n let fullpath = this.realSource\n\n if (fullpath.startsWith('.') && fullpath.endsWith('.ts')) {\n if (esm) {\n fullpath = fullpath.replace(/\\.ts$/, '.js')\n } else {\n fullpath = fullpath.replace(/\\.ts$/, '')\n }\n }\n\n if (this.identifiers.length > 0) {\n const $identifiers = this.identifiers.map((i) => i.toCode()).join(', ')\n return `${this.export ? 'export' : 'import'} { ${$identifiers} } from '${fullpath}'`\n }\n\n if (this.export) {\n return `export * from '${fullpath}'`\n }\n\n return `import '${fullpath}'`\n } catch (err) {\n return toComment(String(err))\n }\n }\n}\n","export function toComment(msg?: string): string {\n if (!msg) return ''\n\n return msg.split('\\n')\n .map((str) => `// ${str}`)\n .join('\\n')\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JSONPath } from 'jsonpath-plus'\n\n\nexport class JsonSchema {\n constructor(\n private value: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject,\n ) {}\n\n toJson(): OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject {\n return this.value\n }\n\n pickRefs(): string[] {\n const $refs: string[] = JSONPath({\n path: \"$..*['$ref']\",\n json: this.value,\n })\n .filter((ref) => typeof ref === 'string')\n\n return R.uniq($refs)\n }\n}\n","import * as R from 'ramda'\nimport { KeqQueryOptions } from 'keq'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { operationTypeRenderer, typeNameFactory } from '~/renderer/operation-type/index.js'\nimport { RuntimeConfig } from '~/types/runtime-config.js'\nimport { operationRequestRenderer } from '~/renderer/operation-request/index.js'\nimport { isArtifactCompiledBy } from './compile-schema-definition.js'\nimport type { Compiler } from '~/compiler/compiler.js'\nimport { DependencyIdentifier, OperationDefinition, Artifact } from '~/tasks/utils/index.js'\nimport { TaskWrapper } from '~/tasks/types/index.js'\n\n\ninterface CompileProcessorOptions {\n compiler: Compiler\n task: TaskWrapper\n rc: RuntimeConfig\n requestArtifact: Artifact\n schemaArtifacts: Artifact[]\n operationDefinitions: OperationDefinition[]\n}\n\n\nfunction genOperationTypeFilepath(operationDefinition: OperationDefinition): string {\n const filename = `${operationDefinition.operationId}.type.ts`\n return [\n '.',\n operationDefinition.module.name,\n 'types',\n filename,\n ].join('/')\n}\n\nfunction genOperationRequestFilepath(operationDefinition: OperationDefinition): string {\n const filename = `${operationDefinition.operationId}.request.ts`\n return [\n '.',\n operationDefinition.module.name,\n 'operations',\n filename,\n ].join('/')\n}\n\nfunction genEntrypointFilepath(moduleName: string): string {\n return [\n '.',\n moduleName,\n 'operations',\n 'index.ts',\n ].join('/')\n}\n\nexport async function compileOperationDefinition(options: CompileProcessorOptions): Promise<Artifact[]> {\n const { compiler, task, rc, requestArtifact: requestArtifact, schemaArtifacts, operationDefinitions } = options\n\n const alias = (name: string): string => `${name}Schema`\n const qs = (parameter: OpenAPIV3_1.ParameterObject): KeqQueryOptions | undefined => {\n if (typeof rc.qs === 'function') {\n return rc.qs(parameter)\n } else if (typeof rc.qs === 'object') {\n return rc.qs\n }\n\n const style = parameter.style || 'form'\n const explode = parameter.explode ?? true\n\n if (style === 'deepObject') {\n return { arrayFormat: 'brackets' }\n } else if (explode) {\n return { arrayFormat: 'repeat' }\n } else {\n if (style === 'form') {\n return { arrayFormat: 'comma' }\n } else if (style === 'spaceDelimited') {\n return { arrayFormat: 'space' }\n } else if (style === 'pipeDelimited') {\n return { arrayFormat: 'pipe' }\n }\n }\n\n return {}\n }\n\n async function createTypeArtifact(operationDefinition: OperationDefinition): Promise<Artifact> {\n const content = await operationTypeRenderer(operationDefinition, alias)\n const filepath = genOperationTypeFilepath(operationDefinition)\n\n const typeArtifact = new Artifact({\n id: filepath,\n filepath,\n content,\n extensionName: '.type.ts',\n })\n\n typeArtifact.addDependence('keq', ['KeqOperation', 'KeqQueryInit', 'KeqPathParameterInit'])\n const dependentSchemaDefinitions = operationDefinition.getDependencies()\n\n for (const dependentSchemaDefinition of dependentSchemaDefinitions) {\n const dependentArtifact = schemaArtifacts.find(isArtifactCompiledBy(dependentSchemaDefinition))\n if (!dependentArtifact) {\n typeArtifact.addWarn(`Cannot find dependent $ref: ${dependentSchemaDefinition.id}`)\n continue\n }\n\n typeArtifact.addDependence(dependentArtifact, [\n new DependencyIdentifier(dependentSchemaDefinition.name, alias(dependentSchemaDefinition.name)),\n ])\n }\n\n return await compiler.hooks.afterCompileOperationType.promise(typeArtifact, operationDefinition, task)\n }\n\n async function createRequestArtifact(operationDefinition: OperationDefinition, typeArtifact: Artifact): Promise<Artifact> {\n const typeName = typeNameFactory(operationDefinition)\n\n const content = await operationRequestRenderer(operationDefinition, { qs })\n const filepath = genOperationRequestFilepath(operationDefinition)\n\n const artifact = new Artifact({\n id: filepath,\n filepath,\n content,\n extensionName: '.request.ts',\n })\n\n artifact.addDependence('keq', ['Keq'])\n // artifact.addDependence(rc.request || 'keq', ['request'])\n artifact.addDependence(requestArtifact, ['request'])\n artifact.addDependence(\n typeArtifact,\n [\n 'Operation',\n typeName('ResponseBodies'),\n typeName('RequestParameters'),\n ],\n )\n artifact.addDependence(\n typeArtifact,\n [\n `${typeName('RequestQuery')}`,\n `${typeName('RequestHeaders')}`,\n `${typeName('RequestBodies')}`,\n ],\n { export: true },\n )\n return await compiler.hooks.afterCompileOperationRequest.promise(artifact, operationDefinition, task)\n }\n\n\n const artifacts = R.unnest(\n await Promise.all(\n operationDefinitions.map(async (operationDefinition): Promise<Artifact[]> => {\n const typeArtifact = await createTypeArtifact(operationDefinition)\n const operationArtifact = await createRequestArtifact(operationDefinition, typeArtifact)\n\n return [typeArtifact, operationArtifact]\n }),\n ),\n )\n\n\n const operationDefinitionsGroupByModuleName = R.groupBy(\n (operationDefinition) => operationDefinition.module.name,\n operationDefinitions,\n )\n\n const entrypointArtifacts = Object.entries(operationDefinitionsGroupByModuleName)\n .map(([moduleName, operationDefinitions]) => {\n const filepath = genEntrypointFilepath(moduleName)\n const artifact = new Artifact({\n id: filepath,\n filepath,\n content: [\n '/* @anchor:file:start */',\n '/* @anchor:file:end */',\n ].join('\\n'),\n })\n\n for (const operationDefinition of (operationDefinitions || [])) {\n const dependentArtifact = artifacts.find((artifact) => artifact.filepath === genOperationRequestFilepath(operationDefinition))\n if (!dependentArtifact) {\n artifact.addWarn(`Cannot find operation: operation = ${operationDefinition.operationId}, pathname = ${operationDefinition.pathname}, method = ${operationDefinition.method}`)\n continue\n }\n\n artifact.addDependence(dependentArtifact, [], { export: true })\n }\n\n return artifact\n })\n\n return [...artifacts, ...entrypointArtifacts]\n}\n","import * as R from 'ramda'\nimport { Alias, generateSchema, indent } from '../utils/generate-schema.js'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { OperationDefinition } from '~/tasks/utils/operation-definition.js'\nimport * as changeCase from 'change-case'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { SwaggerUtils } from '~/utils/swagger-utils/index.js'\n\n\nexport type TypeNameFn = (name: string) => string\n\nexport function typeNameFactory(operationDefinition: OperationDefinition): TypeNameFn {\n const pascalCaseOperationId = changeCase.pascalCase(operationDefinition.operationId)\n return (name: string) => `${pascalCaseOperationId}${name}`\n}\n\nfunction responseBodies(operation: OpenAPIV3_1.OperationObject, alias: Alias = R.identity, typeName: TypeNameFn): string {\n if (!operation.responses || R.isEmpty(operation.responses)) {\n return `export interface ${typeName('ResponseBodies')} {}`\n }\n\n const $responses = Object.entries(operation.responses)\n .map(([statusCode, response]) => {\n if (!JsonSchemaUtils.isRef(response)) {\n const $value = Object.values(response.content || {})\n .map((mediaTypeObject) => mediaTypeObject.schema)\n .filter((schema) => !!schema)\n .map((schema) => generateSchema(schema, alias))\n .join(' | ')\n\n return indent(2, `${statusCode}: ${$value || 'void'}`)\n }\n })\n .join('\\n')\n\n return [\n `export interface ${typeName('ResponseBodies')} {`,\n $responses,\n '}',\n ].join('\\n')\n}\n\nfunction requestBodies(operation: OpenAPIV3_1.OperationObject, alias: Alias = R.identity, typeName: TypeNameFn): string {\n let $requestBodies = `export interface ${typeName('RequestBodies')} {}`\n\n if (operation.requestBody && !JsonSchemaUtils.isRef(operation.requestBody)) {\n const $mediaTypes = Object.entries(operation.requestBody.content || {})\n .map(([mediaType, mediaTypeObject]) => <const>[mediaType, mediaTypeObject.schema])\n .map(([mediaType, schema]) => {\n if (!schema) return `${JSON.stringify(mediaType)}: unknown`\n\n // if (mediaType === 'multipart/form-data') {\n // return `${JSON.stringify(mediaType)}: FormData | ${generateSchema(schema, alias)}`\n // } else if (mediaType === 'application/x-www-form-urlencoded') {\n // return `${JSON.stringify(mediaType)}: URLSearchParams | ${generateSchema(schema, alias)}`\n // }\n\n return `${JSON.stringify(mediaType)}: ${generateSchema(schema, alias)}`\n })\n .map((pair) => indent(2, pair))\n\n $requestBodies = [\n `export interface ${typeName('RequestBodies')} {`,\n ...$mediaTypes,\n '}',\n ].join('\\n')\n }\n\n return $requestBodies\n}\n\nfunction parameterBodies(operationDefinition: OperationDefinition, alias: Alias = R.identity, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n let parameterBodies = ''\n // let parameterBodies = `interface ${typeName('ParameterBodies')} {}`\n\n if (operation.requestBody && !JsonSchemaUtils.isRef(operation.requestBody)) {\n const $mediaTypes = Object.entries(operation.requestBody.content || {})\n .map(([mediaType, mediaTypeObject]) => <const>[mediaType, mediaTypeObject.schema])\n // .filter((pair): pair is [string, OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject] => !!pair[1])\n .map(([mediaType, schemaOrRef]) => {\n if (!schemaOrRef) return `${JSON.stringify(mediaType)}: unknown`\n\n const schema = JsonSchemaUtils.isRef(schemaOrRef)\n ? SwaggerUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(schemaOrRef.$ref, operationDefinition.document.swagger)\n : schemaOrRef\n\n if (schema.type === 'object' || schema.properties) {\n return `${JSON.stringify(mediaType)}: ${generateSchema(schemaOrRef, alias)} & { [key: string]: any }`\n }\n\n return `${JSON.stringify(mediaType)}: { [key: string]: any }`\n })\n .map((pair) => indent(2, pair))\n\n // $requestBodies = `export type ${typeName('RequestBody')} = ${$value || 'unknown'}`\n parameterBodies = [\n `interface ${typeName('ParameterBodies')} {`,\n ...$mediaTypes,\n '}',\n '',\n ].join('\\n')\n }\n\n return parameterBodies\n}\n\n\nfunction requestParameters(operation: OpenAPIV3_1.OperationObject, alias: Alias = R.identity, typeName: TypeNameFn): string {\n const mediaTypes = operation.requestBody && !JsonSchemaUtils.isRef(operation.requestBody)\n ? Object.keys(operation.requestBody.content || {})\n : []\n\n const base = `${typeName('RequestQuery')} & ${typeName('RouteParameters')} & ${typeName('RequestHeaders')}`\n\n if (mediaTypes.length === 1) {\n return `export type ${typeName('RequestParameters')} = ${base} & ${typeName('RequestBodies')}[${JSON.stringify(mediaTypes[0])}]`\n }\n\n if (mediaTypes.length > 1) {\n const unions = mediaTypes\n .map((mediaType) => `(${base} & ${typeName('RequestBodies')}[${JSON.stringify(mediaType)}] & { \"content-type\": ${JSON.stringify(mediaType)} })`)\n .join('\\n| ')\n\n return `export type ${typeName('RequestParameters')} = ${unions}`\n }\n\n return `export type ${typeName('RequestParameters')} = ${base}`\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function operationTypeRenderer(operationDefinition: OperationDefinition, alias: Alias = R.identity): Promise<string> {\n const { operation } = operationDefinition\n\n if (!operation.responses) return ''\n\n // const pascalCaseOperationId = changeCase.pascalCase(operationDefinition.operationId)\n const typeName = typeNameFactory(operationDefinition)\n\n const $responseBodies = responseBodies(operation, alias, typeName)\n const $requestBodies = requestBodies(operation, alias, typeName)\n const $parameterBodies = parameterBodies(operationDefinition, alias, typeName)\n const $requestParameters = requestParameters(operation, alias, typeName)\n\n\n return [\n '/* @anchor:file:start */',\n '',\n $responseBodies,\n '',\n $requestBodies,\n '',\n generateParameters(`${typeName('RequestQuery')}`, operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'query') || [], alias),\n '',\n generateParameters(`${typeName('RouteParameters')}`, operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'path') || [], alias),\n '',\n generateParameters(`${typeName('RequestHeaders')}`, operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'header') || [], alias),\n '',\n $parameterBodies || undefined,\n $requestParameters,\n '',\n `export interface Operation<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends ${$parameterBodies ? `keyof ${typeName('ParameterBodies')}` : 'string'} > extends KeqOperation {`,\n ` requestParams: ${typeName('RouteParameters')} & { [key: string]: KeqPathParameterInit }`,\n ` requestQuery: ${typeName('RequestQuery')} & { [key: string]: KeqQueryInit }`,\n ` requestHeaders: ${typeName('RequestHeaders')} & { [key: string]: string | number }`,\n ` requestBody: ${$parameterBodies ? `${typeName('ParameterBodies')}[CONTENT_TYPE] | ` : 'object | '}BodyInit`,\n ` responseBody: ${typeName('ResponseBodies')}[STATUS]`,\n '}',\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n}\n\nfunction generateParameters(name: string, parameters: OpenAPIV3_1.ParameterObject[], alias: Alias): string {\n if (parameters.length === 0) {\n return `export type ${name} = {}`\n }\n\n const $parameters = parameters.map((parameter) => {\n const parameterName = `\"${parameter.name}\"`\n const $key = parameter.required ? parameterName : `${parameterName}?`\n const $value = generateSchema(parameter.schema || { type: 'any' }, alias)\n\n return indent(2, `${$key}: ${$value}`)\n })\n .join('\\n')\n\n\n return [\n `export type ${name} = {`,\n $parameters,\n '}',\n ].filter(Boolean).join('\\n')\n}\n","import * as R from 'ramda'\nimport { OperationDefinition } from '~/tasks/utils/operation-definition.js'\nimport { typeNameFactory, TypeNameFn } from '../operation-type/index.js'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { SwaggerUtils } from '~/utils/swagger-utils/index.js'\nimport { indent } from '../utils/generate-schema.js'\nimport { KeqQueryOptionsFactory } from '~/types/runtime-config.js'\n\n\nfunction errorToComment(err: unknown, mediaType: string): string {\n const $err = String(err)\n .split('\\n')\n .map(((line) => ` * ${line}`))\n .join('\\n')\n\n return [\n '/**',\n ` * Unable to dereference schema for media type ${mediaType}`,\n $err,\n ' */',\n ].join('\\n')\n}\n\ninterface OperationRequestRendererOptions {\n qs: KeqQueryOptionsFactory\n}\n\nfunction requestBodyRenderer(operationDefinition: OperationDefinition, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n const requestBodyContent = (operation.requestBody?.content || {}) as Record<string, OpenAPIV3_1.MediaTypeObject>\n\n const $requestBody = Object.entries(requestBodyContent)\n .map(([mediaType, mediaTypeObject]): string | undefined => {\n if (!mediaTypeObject.schema) return\n\n try {\n const schema = JsonSchemaUtils.isRef(mediaTypeObject.schema)\n ? SwaggerUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(mediaTypeObject.schema.$ref, operationDefinition.document.swagger)\n : mediaTypeObject.schema\n\n if (schema.type !== 'object') return\n\n const properties = (schema.properties || {}) as OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject\n\n return Object.entries(properties)\n .map(([propertyName, propertySchema]) => {\n const $propertyName = JSON.stringify(propertyName)\n\n if (mediaType === 'application/json') {\n return ` if (args && ${$propertyName} in args) req.send({ ${$propertyName}: args[${$propertyName}] })`\n } else if (mediaType === 'multipart/form-data') {\n try {\n const schema = JsonSchemaUtils.isRef(propertySchema)\n ? SwaggerUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(propertySchema.$ref, operationDefinition.document.swagger)\n : propertySchema\n\n if (schema.type === 'string' && schema.format === 'binary' || schema.contentMediaType === 'application/octet-stream') {\n return ` if (args && ${$propertyName} in args && args[${$propertyName}]) req.attach(${$propertyName}, args[${$propertyName}])`\n }\n\n return ` if (args && ${$propertyName} in args && args[${$propertyName}] !== undefined) req.field(${$propertyName}, args[${$propertyName}])`\n } catch (err) {\n return indent(2, errorToComment(err, mediaType))\n }\n } else {\n throw new Error(`Unsupported media type: ${mediaType}`)\n }\n })\n .join('\\n')\n } catch (err) {\n return indent(2, errorToComment(err, mediaType))\n }\n })\n .filter(R.isNotNil)\n .join('\\n')\n\n return $requestBody\n}\n\nfunction requestHeadersRenderer(operationDefinition: OperationDefinition, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n\n const $headers = (operation.parameters || [])\n .filter((p): p is OpenAPIV3_1.ParameterObject => !JsonSchemaUtils.isRef(p))\n .filter((p) => p.in === 'header')\n .map((p) => ` if (args && ${JSON.stringify(p.name)} in args) req.header(${JSON.stringify(p.name)}, args[${JSON.stringify(p.name)}])`)\n .concat('')\n .join('\\n')\n\n return $headers\n}\n\nfunction requestQueryRenderer(operationDefinition: OperationDefinition, qs: KeqQueryOptionsFactory, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n\n const $query = (operation.parameters || [])\n .filter((p): p is OpenAPIV3_1.ParameterObject => !JsonSchemaUtils.isRef(p))\n .filter((p) => p.in === 'query')\n .map((p) => {\n const option = qs(p)\n const $option = (!option || R.isEmpty(option)) ? '' : `, ${JSON.stringify(option)}`\n\n return ` if (args && ${JSON.stringify(p.name)} in args) req.query(${JSON.stringify(p.name)}, args[${JSON.stringify(p.name)}]${$option})`\n })\n .concat('')\n .join('\\n')\n\n return $query\n}\n\nfunction requestPathParametersRenderer(operationDefinition: OperationDefinition, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n\n const $pathParameters = (operation.parameters || [])\n .filter((p): p is OpenAPIV3_1.ParameterObject => !JsonSchemaUtils.isRef(p))\n .filter((p) => p.in === 'path')\n .map((p) => ` if (args && ${JSON.stringify(p.name)} in args) req.params(${JSON.stringify(p.name)}, args[${JSON.stringify(p.name)}])`)\n .concat('')\n .join('\\n')\n\n return $pathParameters\n}\n\nfunction getRequestMediaTypes(operationDefinition: OperationDefinition): string[] {\n const { operation } = operationDefinition\n const requestBodyContent = (operation.requestBody?.content || {}) as Record<string, OpenAPIV3_1.MediaTypeObject>\n return Object.keys(requestBodyContent)\n}\n\nfunction mediaTypeRenderer(operationDefinition: OperationDefinition): string {\n const mediaTypes = getRequestMediaTypes(operationDefinition)\n\n if (mediaTypes.length === 1 && !mediaTypes[0].endsWith('/*')) {\n return ` req.type(\"${mediaTypes[0]}\")\\n`\n } else if (mediaTypes.some((mediaType) => mediaType === '*/*')) {\n // no-op\n } else if (mediaTypes.some((mediaType) => mediaType.endsWith('/*'))) {\n return ' if(args?.[\"content-type\"]) req.type(args[\"content-type\"])\\n'\n } else if (mediaTypes.length > 1) {\n return ' if(args?.[\"content-type\"]) req.type(args[\"content-type\"])\\n'\n }\n\n return ''\n}\n\nfunction operationDeclarationRenderer(operationDefinition: OperationDefinition, typeName: TypeNameFn): string {\n const { operationId } = operationDefinition\n\n const mediaTypes = getRequestMediaTypes(operationDefinition)\n\n if (mediaTypes.length === 0) {\n return `function ${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}>(args?: ${typeName('RequestParameters')}): Keq<Operation<STATUS, never>>`\n } else if (mediaTypes.length === 1) {\n return `function ${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}>(args?: ${typeName('RequestParameters')}): Keq<Operation<STATUS, ${JSON.stringify(mediaTypes[0])}>>`\n } else if (mediaTypes.length > 1) {\n return `function ${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends ${typeName('RequestParameters')}[\"content-type\"]>(args?: Extract<${typeName('RequestParameters')}, { \"content-type\": CONTENT_TYPE }>): Keq<Operation<STATUS, CONTENT_TYPE>>`\n }\n\n throw new Error('[operationDeclarationRenderer] Unreachable')\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function operationRequestRenderer(operationDefinition: OperationDefinition, options: OperationRequestRendererOptions): Promise<string> {\n const { operation, operationId, method, pathname } = operationDefinition\n const { qs } = options\n\n if (!operation.responses) return ''\n\n const typeName = typeNameFactory(operationDefinition)\n const moduleName = operationDefinition.module.name\n\n const $queryParameters = requestQueryRenderer(operationDefinition, qs, typeName)\n const $headerParameters = requestHeadersRenderer(operationDefinition, typeName)\n const $pathParameters = requestPathParametersRenderer(operationDefinition, typeName)\n\n const $mediaType = mediaTypeRenderer(operationDefinition)\n\n const $requestBody = requestBodyRenderer(operationDefinition, typeName)\n\n const $operationDeclaration = operationDeclarationRenderer(operationDefinition, typeName)\n\n return [\n '/* @anchor:file:start */',\n '',\n `const moduleName = \"${moduleName}\"`,\n `const method = \"${method}\"`,\n `const pathname = \"${pathname}\"`,\n '',\n '/* @anchor:operation-declaration */',\n `export ${$operationDeclaration} {`,\n ` const req = request.post<${typeName('ResponseBodies')}[STATUS]>(\"${pathname}\")`,\n ' .option(\\'module\\', { name: moduleName, pathname, method })',\n '',\n $mediaType || undefined,\n ' /* @anchor:query:start */',\n $queryParameters || undefined,\n ' /* @anchor:query:end */',\n '',\n ' /* @anchor:headers:start */',\n $headerParameters || undefined,\n ' /* @anchor:headers:end */',\n '',\n ' /* @anchor:path-parameters:start */',\n $pathParameters || undefined,\n ' /* @anchor:path-parameters:end */',\n '',\n ' /* @anchor:body:start */',\n $requestBody || undefined,\n ' /* @anchor:body:end */',\n '',\n ' /* @anchor:operation-return */',\n ` return req as ReturnType<typeof ${operationId}>`,\n '}',\n '',\n `${operationId}.pathname = pathname`,\n `${operationId}.method = method`,\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n}\n","// eslint-disable-next-line @typescript-eslint/require-await\nexport async function requestRenderer(): Promise<string> {\n return [\n '/* @anchor:file:start */',\n '',\n '/* @anchor:request-declaration */',\n 'export const request = new KeqRequest()',\n '',\n '/* @anchor:file:end */',\n ].join('\\n')\n}\n","import { ListrTask } from 'listr2'\nimport { TaskContext } from '~/tasks/types/task-context.js'\nimport { compileSchemaDefinition } from './utils/compile-schema-definition.js'\nimport { compileOperationDefinition } from './utils/compile-operation-definition.js'\nimport { Artifact } from '../utils/artifact.js'\nimport { requestRenderer } from '~/renderer/request/index.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\n\n\nfunction main(compiler: Compiler): ListrTask<TaskContext> {\n return {\n task: async (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.shaken) throw new Error('Please run shaking task first.')\n\n const rc = context.setup.rc\n const matcher = context.setup.matcher\n const documents = context.shaken.documents\n .filter((document) => !matcher.isModuleIgnored(document.module))\n\n let requestArtifact = new Artifact({\n id: 'request',\n filepath: 'request',\n content: await requestRenderer(),\n extensionName: '.ts',\n })\n\n requestArtifact.addDependence('keq', ['KeqRequest'])\n\n requestArtifact = await compiler.hooks.afterCompileKeqRequest\n .promise(\n requestArtifact,\n task,\n )\n\n const schemaDefinitions = documents.flatMap((document) => document.schemas)\n const operationDefinitions = documents.flatMap((document) => document.operations)\n\n const schemaArtifacts = await compileSchemaDefinition({ compiler, task, schemaDefinitions })\n const operationArtifacts = await compileOperationDefinition({ compiler, task, rc, operationDefinitions, schemaArtifacts, requestArtifact })\n\n const artifacts = [requestArtifact, ...schemaArtifacts, ...operationArtifacts]\n\n context.compiled = {\n artifacts,\n }\n },\n }\n}\n\nexport function createCompileTask(compiler: Compiler, options?: BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Compile',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(compiler),\n {\n task: (context, task) => compiler.hooks.afterCompile\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import { ListrTaskWrapper } from 'listr2'\nimport { OperationDefinition } from '../../utils/operation-definition.js'\nimport { TaskContext } from '../../types/task-context.js'\nimport { select } from 'inquirer-select-pro'\nimport { ListrInquirerPromptAdapter } from '@listr2/prompt-adapter-inquirer'\n\nexport async function selectOperationDefinitions(\n task: ListrTaskWrapper<TaskContext, any, any>,\n operationDefinitions: OperationDefinition[],\n): Promise<OperationDefinition[]> {\n const selectedOperationDefinitions = await task.prompt(ListrInquirerPromptAdapter).run(\n select<OperationDefinition>,\n {\n message: 'Select Pathname',\n defaultValue: [],\n options: (input) => {\n const items = operationDefinitions.map((op) => ({ name: `${op.module.name} ${op.method.toUpperCase()} ${op.pathname}`, value: op }))\n\n if (!input) return items\n const keys = input\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n\n return items.filter((i) => {\n const name = i.name.toLowerCase()\n return keys.every((q) => name.includes(q))\n })\n },\n },\n )\n\n return selectedOperationDefinitions\n}\n","import { ListrTask } from 'listr2'\nimport { TaskContext } from '../types/task-context.js'\nimport { selectOperationDefinitions } from './utils/select-operation-definitions.js'\nimport { IgnoreMode } from '../types/ignore-mode.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\n\nexport interface InteractiveTaskOptions {\n mode: IgnoreMode\n\n persist?: boolean\n\n /**\n * Remove all previously matcher rules.\n * This means that all rules form `.keqignore` file will be removed.\n */\n clear?: boolean\n}\n\n\nexport function createInteractiveTask(options: InteractiveTaskOptions & BaseTaskOptions): ListrTask<TaskContext> {\n return {\n enabled: options?.enabled,\n skip: options?.skip,\n task: async (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.validated) throw new Error('Please run validate task first.')\n\n const matcher = context.setup.matcher\n const documents = context.validated.documents\n const operationDefinitions = documents.flatMap((document) => document.operations)\n const selectedOperationDefinitions = await selectOperationDefinitions(task, operationDefinitions)\n\n if (options.clear) {\n matcher.append({\n persist: false,\n ignore: true,\n moduleName: '*',\n operationMethod: '*',\n operationPathname: '*',\n })\n }\n\n for (const op of selectedOperationDefinitions) {\n matcher.append({\n persist: !!options.persist,\n ignore: options.mode === 'add',\n moduleName: op.module.name,\n operationMethod: op.method,\n operationPathname: op.pathname,\n })\n }\n },\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport * as R from 'ramda'\nimport { FullTap, HookInterceptor, InnerCallback } from 'tapable'\n\nexport function perfectErrorMessage(): HookInterceptor<unknown, unknown> {\n return {\n register: <T extends FullTap>(tap: T): T => {\n const fn = tap.fn\n\n function prefix(err: unknown): void {\n if (err instanceof Error) {\n err.message = `[Plugin: ${tap.name}] ${err.message}`\n }\n }\n\n if (tap.type === 'promise') {\n tap.fn = async (...args: any[]) => {\n try {\n return await fn(...args)\n } catch (err) {\n prefix(err)\n throw err\n }\n }\n }\n\n if (tap.type === 'sync') {\n tap.fn = (...args: any[]) => {\n try {\n return fn(...args)\n } catch (err) {\n prefix(err)\n throw err\n }\n }\n }\n\n if (tap.type === 'async') {\n tap.fn = (...args: any[]) => {\n const callback = R.last(args) as InnerCallback<Error, any>\n\n return fn(...R.init(args), (err: Error | null, result: any) => {\n prefix(err)\n return callback(err, result)\n })\n }\n }\n\n return tap\n },\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport { FullTap, HookInterceptor } from 'tapable'\nimport { TaskWrapper } from '~/tasks/index.js'\n\n\nexport function proxyTaskWrapper(pluginName: string, task: TaskWrapper): TaskWrapper {\n return new Proxy(task, {\n set(target, prop, value) {\n if (prop !== 'output') {\n return Reflect.set(target, prop, value)\n }\n\n target.output = `[Plugin: ${pluginName}] ${value}`\n return true\n },\n })\n}\n\n\nexport function printInformation(taskIndex: number): HookInterceptor<unknown, unknown> {\n return {\n register: <T extends FullTap>(tap: T): T => {\n const fn = tap.fn\n\n if (tap.type === 'promise') {\n tap.fn = (...args: any[]) => {\n const task = args[taskIndex] as TaskWrapper\n const proxyTask = proxyTaskWrapper(tap.name, task)\n args[taskIndex] = proxyTask\n proxyTask.output = 'Processing...'\n return fn(...args)\n }\n }\n\n if (tap.type === 'sync') {\n tap.fn = (...args: any[]) => {\n const task = args[taskIndex] as TaskWrapper\n const proxyTask = proxyTaskWrapper(tap.name, task)\n args[taskIndex] = proxyTask\n proxyTask.output = 'Processing...'\n return fn(...args)\n }\n }\n\n if (tap.type === 'async') {\n tap.fn = (...args: any[]) => {\n const task = args[taskIndex] as TaskWrapper\n const proxyTask = proxyTaskWrapper(tap.name, task)\n args[taskIndex] = proxyTask\n proxyTask.output = 'Processing...'\n return fn(...args)\n }\n }\n\n return tap\n },\n }\n}\n\n"],"mappings":"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","names":["R","fs","path","Type","FileNamingStyle","QsArrayFormat","Type","R","keys","fs","path","message","fs","context","task","fs","path","R","R","JSONPath","R","JSONPath","path","filter","fs","R","jsonpointer","JSONPath","R","JSONPath","R","path","JSONPath","JSONPath","jsonpointer","R","last","fs","main","task","main","task","context","main","task","context","path","fs","main","context","task","R","R","R","schema","path","path","R","JSONPath","schemaDefinitions","R","R","changeCase","parameterBodies","R","schema","genEntrypointFilepath","operationDefinitions","artifact","main","context","task","keys","R","prop","moduleNames","main"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/constants/supported-methods.ts","../src/utils/logger.ts","../src/compiler/compiler.ts","../src/tasks/setup/index.ts","../src/types/runtime-config.ts","../src/constants/file-naming-style.ts","../src/types/qs.ts","../src/constants/qs-array-format.ts","../src/utils/ignore-matcher.ts","../src/tasks/setup/utils/validate-modules.ts","../src/tasks/setup/utils/find-nearest-package-json.ts","../src/tasks/setup/utils/get-project-module-system.ts","../src/tasks/download/index.ts","../src/tasks/utils/module-definition.ts","../src/tasks/utils/api-document.ts","../src/tasks/utils/api-document_v3_1.ts","../src/tasks/utils/operation-definition.ts","../src/utils/is-keywords.ts","../src/utils/is-reserved-word.ts","../src/tasks/utils/schema-definition.ts","../src/utils/debugger.ts","../src/utils/swagger-utils/dereference.ts","../src/utils/swagger-utils/dereference-operation.ts","../src/utils/swagger-utils/remove-undefined-ref.ts","../src/utils/swagger-utils/is-ref-defined.ts","../src/utils/swagger-utils/update-operation-id.ts","../src/utils/json-schema-utils/is-array.ts","../src/utils/json-schema-utils/is-mixed.ts","../src/utils/json-schema-utils/is-non-array.ts","../src/utils/json-schema-utils/is-ref.ts","../src/utils/json-schema-utils/index.ts","../src/utils/swagger-utils/dereference-deep.ts","../src/utils/swagger-utils/index.ts","../src/tasks/validate/index.ts","../src/tasks/shaking/index.ts","../src/tasks/persist/index.ts","../src/tasks/compile/utils/compile-schema-definition.ts","../src/renderer/json-schema/index.ts","../src/renderer/utils/generate-schema.ts","../src/tasks/utils/anchor.ts","../src/tasks/utils/artifact.ts","../src/tasks/utils/dependency.ts","../src/tasks/utils/to-comment.ts","../src/tasks/utils/json-schema.ts","../src/tasks/compile/utils/compile-operation-definition.ts","../src/renderer/operation-type/index.ts","../src/renderer/operation-request/index.ts","../src/renderer/operation-request/request-body.ts","../src/renderer/operation-request/error-to-comment.ts","../src/renderer/request/index.ts","../src/tasks/compile/index.ts","../src/tasks/interactive/utils/select-operation-definitions.ts","../src/tasks/interactive/index.ts","../src/compiler/intercepter/perfect-error-message.ts","../src/compiler/intercepter/print-information.ts"],"sourcesContent":["#!/usr/bin/env node\nimport semver from 'semver'\nimport { Argument, Command, Option } from 'commander'\nimport { SupportedMethods } from './constants/supported-methods.js'\nimport { logger } from './utils/logger.js'\nimport { Compiler } from './compiler/compiler.js'\n\n\nif (semver.lt(process.version, '18.0.0')) {\n throw new Error('Node.js version must be greater than 18')\n}\n\nconst program = new Command()\n\n\nprogram\n .command('build')\n .option('-c --config <config>', 'The keq-cli config file')\n .option('--module <modules...>', 'Filter module(s) to generate')\n .option('--debug', 'Print debug information')\n .option('--tolerant', 'Tolerate wrong swagger structure')\n .option('-i --interactive', 'Interactive select the scope of generation')\n .action(async (options) => {\n const compiler = new Compiler({\n build: {\n shaking: {\n skipIgnoredModules: true,\n skipEmptyDocuments: true,\n },\n },\n config: options.config,\n modules: options.module,\n debug: !!options.debug,\n tolerant: !!options.tolerant,\n interactive: !!options.interactive,\n })\n\n await compiler.run()\n })\n\n\nprogram\n .command('ignore')\n .addArgument(\n new Argument('<mode>', 'The ignore mode')\n .choices(['all', 'add', 'except'])\n .argRequired(),\n )\n .option('-c --config <config>', 'The keq-cli config file')\n .option('--debug', 'Print debug information')\n .option('--module <modules...>')\n .option('--build', 'Build after updating .keqignore file')\n .addOption(\n new Option('--method <method>', 'Only generate files of the specified operation method')\n .choices([\n ...SupportedMethods,\n ...SupportedMethods.map((method) => method.toUpperCase()),\n ]),\n )\n .option('--pathname <pathnames>', 'Only generate files of the specified operation pathname')\n .option('-i --interactive', 'Interactive select the scope of generation')\n .action(async (mode, options) => {\n let compiler: Compiler\n\n if (mode === 'all') {\n if (options.build) throw new Error(\"'--build' cannot be used with 'all' mode\")\n\n compiler = new Compiler({\n build: false,\n config: options.config,\n modules: options.module,\n debug: !!options.debug,\n interactive: false,\n ignore: {\n rules: [{\n persist: true,\n ignore: true,\n moduleName: '*',\n operationMethod: '*',\n operationPathname: '*',\n }],\n },\n })\n } else if (options.interactive) {\n if (options.interactive) {\n if (options.method) throw new Error(\"'--method' cannot be used with '--interactive'\")\n if (options.pathname) throw new Error(\"'--pathname' cannot be used with '--interactive'\")\n }\n\n compiler = new Compiler({\n build: !!options.build && {\n shaking: {\n skipIgnoredModules: true,\n skipEmptyDocuments: true,\n },\n },\n config: options.config,\n modules: options.module,\n debug: !!options.debug,\n\n interactive: {\n mode,\n persist: true,\n },\n })\n } else {\n if (!options.method && !options.pathname) {\n throw new Error(\"at least one of '-i --interactive', '--method' or '--pathname' must be specified\")\n }\n\n const moduleNames = options.module || ['*']\n\n compiler = new Compiler({\n build: !!options.build && {\n shaking: {\n skipIgnoredModules: true,\n skipEmptyDocuments: true,\n },\n },\n config: options.config,\n debug: !!options.debug,\n modules: options.module,\n ignore: {\n rules: moduleNames.map((moduleNames) => ({\n persist: true,\n ignore: mode === 'add',\n moduleName: moduleNames,\n operationMethod: options.method,\n operationPathname: options.pathname,\n })),\n },\n interactive: false,\n })\n }\n\n await compiler.run()\n })\n\nasync function main(): Promise<void> {\n program.on('command:*', function (operands) {\n throw new Error(`Unknown command '${String(operands[0])}'`)\n })\n\n try {\n await program.parseAsync(process.argv)\n } catch (err) {\n if (process.argv.includes('--debug')) {\n console.error(err)\n } else {\n logger.error(err instanceof Error ? err.message : String(err))\n }\n }\n}\n\nvoid main()\n","export const SupportedMethods = [\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n]\n","import chalk from 'chalk'\n\n\nexport const logger = {\n log: (str: string) => console.log(chalk.green(str)),\n warn: (str: string) => console.warn(chalk.yellow(str)),\n error: (str: string) => console.error(chalk.red(str)),\n}\n","\n\nimport * as R from 'ramda'\nimport { AsyncSeriesHook, AsyncSeriesWaterfallHook, FullTap, Hook, HookInterceptor, InnerCallback, SyncHook } from 'tapable'\nimport { Listr } from 'listr2'\nimport {\n createCompileTask,\n createDownloadTask,\n createInteractiveTask,\n createPersistTask,\n createSetupTask,\n createShakingTask,\n createValidateTask,\n InteractiveTaskOptions,\n SetupTaskOptions,\n ShakingTaskOptions,\n type TaskWrapper,\n type TaskContext,\n Artifact,\n OperationDefinition,\n SchemaDefinition,\n} from '../tasks/index.js'\nimport { perfectErrorMessage } from './intercepter/perfect-error-message.js'\nimport { printInformation } from './intercepter/print-information.js'\n\n\ninterface Options extends SetupTaskOptions {\n build: boolean | {\n shaking?: ShakingTaskOptions\n }\n\n interactive?: boolean | InteractiveTaskOptions\n}\n\n\nexport class Compiler {\n context: TaskContext = {}\n\n hooks = {\n // core\n afterSetup: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterDownload: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterValidate: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterShaking: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterCompile: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n afterPersist: new AsyncSeriesHook<[TaskWrapper]>(['task']),\n done: new SyncHook<[]>(),\n\n // compile\n afterCompileKeqRequest: new AsyncSeriesWaterfallHook<[Artifact, TaskWrapper], Artifact>(['artifact', 'task']),\n afterCompileSchema: new AsyncSeriesWaterfallHook<[Artifact, SchemaDefinition, TaskWrapper], Artifact>(['artifact', 'schema', 'task']),\n afterCompileOperationType: new AsyncSeriesWaterfallHook<[Artifact, OperationDefinition, TaskWrapper], Artifact>(['artifact', 'operation', 'task']),\n afterCompileOperationRequest: new AsyncSeriesWaterfallHook<[Artifact, OperationDefinition, TaskWrapper], Artifact>(['artifact', 'operation', 'task']),\n }\n\n constructor(\n public options: Options,\n ) {\n for (const hook of Object.values(this.hooks)) {\n hook.intercept(perfectErrorMessage())\n }\n\n this.hooks.afterSetup.intercept(printInformation(0))\n this.hooks.afterPersist.intercept(printInformation(0))\n }\n\n async run(): Promise<void> {\n const options = this.options\n\n const tasks = new Listr<TaskContext>(\n [\n createSetupTask(this, options),\n createDownloadTask(this, { skipIgnoredModules: !options.interactive }),\n createValidateTask(this),\n createInteractiveTask({ enabled: !!options.interactive, ...(typeof options.interactive === 'object' ? options.interactive : { mode: 'except' }) }),\n createShakingTask(this, { enabled: !!options.build, ...(typeof options.build === 'object' ? options.build.shaking : undefined) }),\n createCompileTask(this, { enabled: !!options.build }),\n createPersistTask(this),\n ],\n {\n concurrent: false,\n renderer: 'default',\n rendererOptions: {\n suffixSkips: true,\n collapseSubtasks: false,\n collapseErrors: false,\n },\n },\n )\n\n await tasks.run(this.context)\n\n await this.hooks.done.promise()\n }\n}\n","import * as R from 'ramda'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport { CosmiconfigResult } from 'cosmiconfig'\nimport { Value } from '@sinclair/typebox/value'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { ListrTask } from 'listr2'\nimport { RuntimeConfig } from '~/types/runtime-config.js'\nimport { IgnoreMatcher, IgnoreMatcherRule } from '../../utils/ignore-matcher.js'\nimport { validateModules, findNearestPackageJson, getProjectModuleSystem } from './utils/index.js'\nimport type { TaskContext } from '../types/task-context.js'\nimport type { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '../../compiler/compiler.js'\n\n\nexport interface SetupTaskOptions {\n config?: string\n debug?: boolean\n tolerant?: boolean\n modules?: string[]\n\n ignore?: false | {\n rules: IgnoreMatcherRule[]\n }\n}\n\nconst explore = cosmiconfig('keq')\n\nfunction main(compiler: Compiler, options: SetupTaskOptions): ListrTask<TaskContext> {\n return {\n task: async (context, task) => {\n const result: CosmiconfigResult = options?.config\n ? await explore.load(options.config)\n : await explore.search()\n\n if (!result || ('isEmpty' in result && result.isEmpty)) {\n throw new Error('Cannot find config file.')\n }\n\n if (!Value.Check(RuntimeConfig, result.config)) {\n const errors = [...Value.Errors(RuntimeConfig, result.config)]\n const message = errors.map(({ path, message }) => `${path}: ${message}`).join('\\n')\n throw new Error(`Invalid Config: ${message}`)\n }\n\n const rc = Value.Default(RuntimeConfig, result.config) as RuntimeConfig\n\n validateModules(rc.modules)\n\n if (options?.debug) {\n await fs.ensureDir('.keq')\n rc.debug = true\n }\n\n if (options?.tolerant) {\n rc.tolerant = true\n }\n\n const packageJsonInfo = findNearestPackageJson()\n if (packageJsonInfo) {\n const moduleSystem = getProjectModuleSystem(packageJsonInfo)\n rc.esm = moduleSystem === 'esm'\n }\n\n let matcher: IgnoreMatcher = new IgnoreMatcher([])\n if (result.filepath) {\n const ignoreFilepath = path.resolve(path.dirname(result.filepath), '.keqignore')\n if (await fs.exists(ignoreFilepath)) {\n matcher = await IgnoreMatcher.read(ignoreFilepath)\n }\n }\n\n const ignoreRules = options.ignore === false ? [] : options.ignore?.rules || []\n for (const rule of ignoreRules) {\n matcher.append({\n persist: !!rule.persist,\n ignore: rule.ignore,\n moduleName: rule.moduleName,\n operationMethod: rule.operationMethod,\n operationPathname: rule.operationPathname,\n })\n }\n\n if (options?.modules && options.modules.length) {\n const notExistModules = options.modules.filter((moduleName) => !(moduleName in rc.modules))\n if (notExistModules.length) {\n throw new Error(`Cannot find module(s) ${notExistModules.join(', ')} in config file.`)\n }\n\n const ignoredModules = R.difference(R.keys(rc.modules), options.modules)\n for (const moduleName of ignoredModules) {\n matcher.append({\n persist: false,\n ignore: true,\n moduleName,\n operationMethod: '*',\n operationPathname: '*',\n })\n }\n }\n\n context.setup = { rc, matcher: matcher }\n\n if (rc.plugins && rc.plugins.length) {\n for (const plugin of rc.plugins) {\n plugin.apply(compiler)\n }\n }\n },\n }\n}\n\nexport function createSetupTask(compiler: Compiler, options: SetupTaskOptions & BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Setup',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(compiler, options),\n {\n task: (context, task) => compiler.hooks.afterSetup\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import { KeqQueryOptions } from 'keq'\nimport { Static, Type } from '@sinclair/typebox'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { OperationIdFactory } from './operation-id-factory.js'\nimport { FileNamingStyle } from '../constants/file-naming-style.js'\nimport { Qs } from './qs.js'\nimport { Plugin } from './plugin.js'\n\n\nexport const RuntimeConfig = Type.Object({\n /**\n * Whether to generate ES Module code\n *\n * If not specified, the module system will be inferred from the nearest package.json \"type\" field\n * or defaults to \"cjs\" if no package.json is found.\n */\n esm: Type.Optional(Type.Boolean({ default: false })),\n\n /**\n * Output directory for generated files\n */\n outdir: Type.String({ default: `${process.cwd()}/api` }),\n\n /**\n * File naming style for generated files\n */\n fileNamingStyle: Type.Enum(FileNamingStyle, { default: FileNamingStyle.snakeCase }),\n\n modules: Type.Record(Type.String(), Type.String()),\n\n operationIdFactory: Type.Optional(Type.Function([Type.Any()], Type.String())),\n\n qs: Type.Optional(Type.Union([\n Qs,\n Type.Function([Type.Any()], Qs),\n ])),\n\n debug: Type.Optional(Type.Boolean({ default: false })),\n\n /**\n * Whether to tolerate wrong swagger structure\n */\n tolerant: Type.Optional(Type.Boolean({ default: false })),\n\n plugins: Type.Optional(Type.Array(Type.Any(), { default: [] })),\n})\n\n\nexport type KeqQueryOptionsFactory = (parameter: OpenAPIV3_1.ParameterObject) => KeqQueryOptions | undefined\n\nexport interface RuntimeConfig extends Omit<Static<typeof RuntimeConfig>, 'operationId' | 'qs' | 'plugins'> {\n operationIdFactory?: OperationIdFactory\n qs?: KeqQueryOptions | KeqQueryOptionsFactory\n plugins?: Plugin[]\n}\n","\nexport enum FileNamingStyle {\n camelCase = 'camelCase',\n capitalCase = 'capitalCase',\n constantCase = 'constantCase',\n dotCase = 'dotCase',\n headerCase = 'headerCase',\n noCase = 'noCase',\n paramCase = 'paramCase',\n pascalCase = 'pascalCase',\n pathCase = 'pathCase',\n sentenceCase = 'sentenceCase',\n snakeCase = 'snakeCase',\n}\n","import { Static, Type } from '@sinclair/typebox'\nimport { QsArrayFormat } from '~/constants/qs-array-format.js'\n\n\nexport const Qs = Type.Object({\n indices: Type.Optional(Type.Boolean()),\n arrayFormat: Type.Optional(Type.Enum(QsArrayFormat)),\n allowDots: Type.Optional(Type.Boolean()),\n})\n\nexport type Qs = Static<typeof Qs>\n","export enum QsArrayFormat {\n brackets = 'brackets',\n indices = 'indices',\n repeat = 'repeat',\n comma = 'comma',\n space = 'space',\n pipe = 'pipe',\n}\n","import * as R from 'ramda'\nimport fs from 'fs-extra'\nimport { OperationDefinition } from '~/tasks/utils/operation-definition.js'\nimport { ModuleDefinition } from '~/tasks/utils/module-definition.js'\n\n\nexport interface IgnoreMatcherRule {\n persist: boolean\n ignore: boolean\n moduleName: string\n operationMethod: string\n operationPathname: string\n}\n\n\nexport class IgnoreMatcher {\n private rules: IgnoreMatcherRule[]\n\n constructor(rules: IgnoreMatcherRule[]) {\n this.rules = rules\n }\n\n static async read(filepath: string): Promise<IgnoreMatcher> {\n let content = await fs.readFile(filepath, 'utf-8')\n\n content = content\n .replace(/\\r\\n/g, '\\n')\n .replace(/\\r/g, '\\n')\n .replace(/#.*$/gm, '')\n .replace(/\\n+/g, '\\n')\n .trim()\n\n let rules = content\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line): IgnoreMatcherRule => {\n const matched = line.match(/^(!)?\\s*([^\\s/]+)\\s+([^\\s/]+)\\s+([^\\s]+)$/)\n if (!matched) throw new Error(`Invalid ignore rule: \"${line}\"`)\n\n const [, flag, moduleName, operationMethod, operationPathname] = matched\n\n return {\n persist: true,\n ignore: !flag,\n moduleName,\n operationMethod: operationMethod.toLowerCase(),\n operationPathname,\n }\n })\n rules = R.sortBy(\n R.prop('ignore'),\n rules,\n )\n\n rules = R.uniqWith(\n (a, b) => a.moduleName === b.moduleName && a.operationMethod === b.operationMethod && a.operationPathname === b.operationPathname,\n rules,\n )\n\n return new IgnoreMatcher(rules)\n }\n\n async write(filepath: string): Promise<void> {\n const ruleGroups = R.compose(\n R.groupBy((rule: IgnoreMatcherRule) => rule.moduleName),\n R.reverse,\n R.uniqWith<IgnoreMatcherRule>(\n (a, b) => a.moduleName === b.moduleName && a.operationMethod === b.operationMethod && a.operationPathname === b.operationPathname,\n ),\n R.filter((rule: IgnoreMatcherRule) => rule.persist),\n )(this.rules)\n\n const content = Object.entries(ruleGroups)\n .sort((a, b) => {\n const aModuleName = a[0]\n const bModuleName = b[0]\n\n if (aModuleName === '*') return -1\n if (bModuleName === '*') return 1\n\n return aModuleName.localeCompare(bModuleName)\n })\n .map(([, rules]) => (rules || [])\n .sort((a, b) => {\n if (a.ignore !== b.ignore) return a.ignore ? -1 : 1\n\n if (a.operationMethod === '*') return -1\n if (b.operationMethod === '*') return 1\n if (a.operationPathname === '*') return -1\n if (b.operationPathname === '*') return 1\n\n if (a.operationMethod !== b.operationMethod) return a.operationMethod.localeCompare(b.operationMethod)\n if (a.operationPathname !== b.operationPathname) return a.operationPathname.localeCompare(b.operationPathname)\n\n return 0\n })\n .map((rule) => `${rule.ignore ? '' : '! '}${rule.moduleName} ${rule.operationMethod.toUpperCase()} ${rule.operationPathname}`)\n .join('\\n'))\n .join('\\n\\n')\n\n await fs.writeFile(filepath, content, 'utf-8')\n }\n\n append(rule: IgnoreMatcherRule): void {\n this.rules.unshift(rule)\n }\n\n // if operation is ignored, return true\n isOperationIgnored(operationDefinition: OperationDefinition): boolean {\n const moduleName = operationDefinition.module.name\n const operationMethod = operationDefinition.method.toLowerCase()\n const operationPathname = operationDefinition.pathname\n\n for (const rule of this.rules) {\n if (rule.moduleName !== '*' && rule.moduleName !== moduleName) continue\n if (rule.operationMethod !== '*' && rule.operationMethod !== operationMethod) continue\n if (rule.operationPathname !== '*' && rule.operationPathname !== operationPathname) continue\n\n return rule.ignore\n }\n\n return false\n }\n\n isModuleIgnored(moduleDefinition: ModuleDefinition): boolean {\n const moduleName = moduleDefinition.name\n\n for (const rule of this.rules) {\n if (!rule.ignore) {\n if (rule.moduleName === '*' || rule.moduleName === moduleName) return false\n continue\n }\n\n if (rule.operationMethod !== '*') continue\n if (rule.operationPathname !== '*') continue\n\n if (rule.moduleName === '*' || rule.moduleName === moduleName) return true\n }\n\n return false\n }\n}\n","import * as R from 'ramda'\nimport validator from 'validator'\n\n\nexport function validateModules(modules: Record<string, string>): void {\n const keys = Object.keys(modules)\n\n for (const key of keys) {\n if (!/^[A-Za-z_][A-Za-z0-9_$]*$/.test(key)) {\n throw new Error(`Module name \"${key}\" is not valid. It must start with a letter or underscore, and can only contain letters, numbers, and underscores.`)\n }\n }\n\n const keysGroupByLowerCase = R.groupBy(R.toLower, keys)\n\n for (const groupKey in keysGroupByLowerCase) {\n const keys = keysGroupByLowerCase[groupKey] || []\n if (keys.length > 1) {\n throw new Error(`Module names ${keys.map((name) => `\"${name}\"`).join(', ')} are case-insensitively duplicated.`)\n }\n }\n\n for (const key in modules) {\n const address = modules[key]\n\n if (validator.isURL(address, { require_host: true, require_protocol: true, protocols: ['http', 'https'] })) {\n continue\n }\n\n if (/^(\\/|\\.\\/|\\.\\.\\/)/.test(address)) {\n continue\n }\n\n throw new Error(`Module address \"${address}\" of module \"${key}\" is not valid. It must be a URL or a local path.`)\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport interface PackageJsonInfo {\n json: any\n path: string\n}\n\n\nexport function findNearestPackageJson(startDir = process.cwd()): PackageJsonInfo | null {\n let dir = startDir\n // 向上遍历直到磁盘根目录\n while (true) {\n const pkgPath = path.join(dir, 'package.json')\n if (fs.existsSync(pkgPath)) {\n const json = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))\n return { json, path: pkgPath }\n }\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n return null\n}\n","import { PackageJsonInfo } from './find-nearest-package-json.js'\n\ntype ModuleSystem = 'esm' | 'cjs'\n\nexport function getProjectModuleSystem(pkgInfo: PackageJsonInfo): ModuleSystem {\n if (!pkgInfo?.json) return 'cjs'\n const { json } = pkgInfo\n\n if (json.type === 'module') return 'esm'\n return 'cjs'\n}\n","import { ListrTask, PRESET_TIMER } from 'listr2'\nimport { ModuleDefinition } from '../utils/module-definition.js'\nimport { ApiDocument } from '../utils/api-document.js'\nimport { TaskContext } from '../types/task-context.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\n\n\ninterface DownloadTaskOptions {\n skipIgnoredModules?: boolean\n}\n\nfunction main(compiler: Compiler, options?: DownloadTaskOptions): ListrTask<TaskContext> {\n return {\n task: (context, task) => {\n if (!context.setup) {\n throw new Error('Please run setup task first.')\n }\n\n const rc = context.setup.rc\n const matcher = context.setup.matcher\n\n context.downloaded = {\n documents: [],\n }\n\n return task.newListr(\n Object.entries(rc.modules)\n .map(([moduleName, address]) => new ModuleDefinition(moduleName, address))\n .map((moduleDefinition): ListrTask<TaskContext> => ({\n title: moduleDefinition.name,\n task: async (ctx, task) => {\n if (options?.skipIgnoredModules && matcher.isModuleIgnored(moduleDefinition)) {\n task.skip(`(${moduleDefinition.name}) is ignored`)\n return\n }\n\n task.output = `Downloaded from ${moduleDefinition.address}`\n const document = await ApiDocument.create(moduleDefinition)\n ctx.downloaded!.documents.push(document)\n },\n })),\n {\n concurrent: true,\n exitOnError: false,\n collectErrors: 'minimal',\n rendererOptions: {\n collapseSubtasks: false,\n // collapseSkips: false,\n suffixSkips: true,\n timer: PRESET_TIMER,\n },\n },\n )\n },\n }\n}\n\nexport function createDownloadTask(compiler: Compiler, options?: DownloadTaskOptions & BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Download',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (_, task) => task.newListr(\n [\n main(compiler, options),\n {\n task: (context, task) => compiler.hooks.afterDownload\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","export class ModuleDefinition {\n name: string\n address: string\n\n constructor(name: string, address: string) {\n this.name = name\n this.address = address\n }\n}\n","import fs from 'fs-extra'\nimport * as path from 'path'\nimport * as yaml from 'js-yaml'\nimport * as validUrl from 'valid-url'\nimport { request } from 'keq'\nimport type { OpenAPI } from '@scalar/openapi-types'\nimport { ModuleDefinition } from './module-definition.js'\nimport { upgrade, validate } from '@scalar/openapi-parser'\nimport { ApiDocumentV3_1 } from './api-document_v3_1.js'\nimport { fixSwagger } from 'swagger-fix'\nimport { RuntimeConfig } from '~/types/runtime-config.js'\nimport { Debugger } from '~/utils/debugger.js'\nimport { SwaggerUtils } from '../../utils/swagger-utils/index.js'\n\n\nexport class ApiDocument<T extends OpenAPI.Document = OpenAPI.Document> {\n readonly module: ModuleDefinition\n readonly swagger: T\n\n constructor(swagger: T, module: ModuleDefinition) {\n this.module = module\n this.swagger = swagger\n }\n\n static cache: Map<string, ApiDocument> = new Map()\n\n private static async download(url: string): Promise<OpenAPI.Document> {\n let content: string\n try {\n const res = await request\n .get(url)\n .resolveWith('response')\n\n if (res.status >= 400) throw new Error(`Request failed with status code ${res.status}`)\n\n content = await res.text()\n } catch (e) {\n if (e instanceof Error) {\n e.message = `Unable get the swagger file from ${url}: ${e.message}`\n }\n\n throw e\n }\n\n\n try {\n return JSON.parse(content) as OpenAPI.Document\n } catch (e) {\n throw new Error(`The swagger file get from url isn't json: ${url}`)\n }\n }\n\n private static async read(filePath: string): Promise<OpenAPI.Document> {\n const fileExt = path.extname(filePath)\n const content = await fs.readFile(filePath, 'utf8')\n\n if (['.yml', '.yaml'].includes(fileExt)) {\n return yaml.load(content) as OpenAPI.Document\n } else if (fileExt === '.json') {\n return JSON.parse(content) as OpenAPI.Document\n }\n\n throw new Error(`File ${fileExt} not support.`)\n }\n\n static async create(moduleDefinition: ModuleDefinition): Promise<ApiDocument> {\n const { address } = moduleDefinition\n\n if (this.cache.has(moduleDefinition.address)) {\n return this.cache.get(moduleDefinition.address)!\n }\n\n const swagger = validUrl.isUri(address)\n ? await this.download(address)\n : await this.read(address)\n\n return new ApiDocument(swagger, moduleDefinition)\n }\n\n async validate(): ReturnType<typeof validate> {\n return await validate(this.swagger)\n }\n\n // remove chinese and special symbols\n fix(): ApiDocument {\n const swagger: T = fixSwagger(this.swagger as any)\n\n return new ApiDocument(\n swagger,\n new ModuleDefinition(\n this.module.name,\n `file://${this.module.name}.fixed.json`,\n ),\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async toV3_1(rc?: RuntimeConfig): Promise<ApiDocumentV3_1> {\n const debug = new Debugger(rc)\n let swagger: any = this.swagger\n\n const { specification } = upgrade(swagger)\n swagger = specification\n debug.writeSwagger(`.keq/${this.module.name}.3_1.json`, swagger)\n\n swagger = SwaggerUtils.dereferenceOperation(swagger)\n debug.writeSwagger(`.keq/${this.module.name}.3_1.sharked.json`, swagger)\n\n if (rc?.operationIdFactory) {\n const operationIdFactory = rc.operationIdFactory\n swagger = SwaggerUtils.updateOperationId(\n swagger,\n (method, pathname, operation) => operationIdFactory({ method, pathname, operation, module: this.module }),\n )\n debug.writeSwagger(`.keq/${this.module.name}.3_1.formatted.json`, swagger)\n }\n\n return new ApiDocumentV3_1(\n swagger,\n new ModuleDefinition(\n this.module.name,\n `file://${this.module.name}.v3_1.json`,\n ),\n )\n }\n}\n\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { ModuleDefinition } from './module-definition.js'\nimport { SupportedMethods } from '~/constants/supported-methods.js'\nimport { OperationDefinition } from './operation-definition.js'\nimport { SchemaDefinition } from './schema-definition.js'\nimport { logger } from '~/utils/logger.js'\nimport { openapiShakingSync } from '@opendoc/openapi-shaking'\n\n\nexport class ApiDocumentV3_1 {\n readonly module: ModuleDefinition\n readonly swagger: OpenAPIV3_1.Document\n\n constructor(swagger: OpenAPIV3_1.Document, module: ModuleDefinition) {\n this.module = module\n this.swagger = swagger\n }\n\n get schemas(): SchemaDefinition[] {\n const module = this.module\n\n return Object.entries(this.swagger.components?.schemas || {})\n .map(([name, schema]) => new SchemaDefinition({\n id: `#/components/schemas/${name}`,\n name,\n schema,\n module,\n document: this,\n }))\n }\n\n get operations(): OperationDefinition[] {\n const module = this.module\n\n return Object.entries(this.swagger.paths || {})\n .flatMap(([pathname, pathItem]) => Object.entries(pathItem || {})\n .filter(([method]) => SupportedMethods.includes(method.toLowerCase()))\n .map(([method, operation]) => new OperationDefinition({\n method,\n pathname,\n operation,\n module,\n document: this,\n })))\n }\n\n isEmpty(): boolean {\n return R.isEmpty(this.swagger.paths)\n }\n\n dereference($ref: string): SchemaDefinition | undefined {\n if ($ref.startsWith('#/')) {\n return this.schemas.find((schema) => schema.id === $ref)\n }\n\n logger.warn(`The $ref(${$ref}) is not defined in ${this.module.name} swagger.`)\n }\n\n isRefDefined($ref: string): boolean {\n if ($ref.startsWith('#/')) {\n const path = $ref.replace('#/', '').split('/')\n return R.path(path, this.swagger) !== undefined\n }\n\n return false\n }\n\n sharking(filter: (operationDefinition: OperationDefinition) => boolean): ApiDocumentV3_1 {\n const isAccepted = (pathname: string, method: string, operation: OpenAPIV3_1.Document): boolean => {\n if (!SupportedMethods.includes(method)) return false\n\n const operationDefinition = new OperationDefinition({\n method,\n pathname,\n operation,\n module: this.module,\n document: this,\n })\n\n return filter(operationDefinition)\n }\n\n\n const sharkedSwagger = openapiShakingSync(\n this.swagger as any,\n isAccepted as any,\n { tolerant: true },\n ) as OpenAPIV3_1.Document\n\n return new ApiDocumentV3_1(\n sharkedSwagger,\n new ModuleDefinition(\n this.module.name,\n `file://${this.module.name}.v3_1.sharked.json`,\n ),\n )\n }\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { ModuleDefinition } from './module-definition.js'\nimport { isKeywords } from '~/utils/is-keywords.js'\nimport { isReservedWord } from '~/utils/is-reserved-word.js'\nimport { ApiDocumentV3_1 } from './api-document_v3_1.js'\nimport { JSONPath } from 'jsonpath-plus'\nimport { SchemaDefinition } from './schema-definition.js'\n\n\nexport class OperationDefinition {\n readonly module: ModuleDefinition\n\n readonly operationId: string\n readonly method: string\n readonly pathname: string\n readonly operation: OpenAPIV3_1.OperationObject\n readonly document: ApiDocumentV3_1\n\n constructor(args: {\n method: string\n pathname: string\n operation: OpenAPIV3_1.OperationObject\n module: ModuleDefinition\n document: ApiDocumentV3_1\n }) {\n this.module = args.module\n this.method = args.method.toLowerCase()\n this.pathname = args.pathname\n this.document = args.document\n this.operationId = this.formatOperationId(args.method, args.pathname, args.operation)\n\n this.operation = {\n ...args.operation,\n operationId: this.operationId,\n }\n }\n\n private formatOperationId(method: string, pathname: string, operation: OpenAPIV3_1.OperationObject): string {\n const operationId = operation.operationId\n\n if (\n operationId\n && operationId !== 'index'\n && !isKeywords(operationId)\n && !isReservedWord(operationId)\n ) {\n return operationId as string\n }\n\n return `${method}_${pathname}`\n .replace(/\\//g, '_')\n .replace(/-/g, '_')\n .replace(/:/g, '$$')\n .replace(/{(.+)}/, '$$$1')\n }\n\n getDependencies(): SchemaDefinition[] {\n const refs = R.uniq([\n ...JSONPath<string>({\n path: '$.requestBody.content..schema..$ref',\n json: this.operation,\n }),\n ...JSONPath<string>({\n path: '$.responses..content..schema..$ref',\n json: this.operation,\n }),\n ...JSONPath<string>({\n path: '$.parameters..schema..$ref',\n json: this.operation,\n }),\n ])\n\n const dependencies = refs\n .filter((ref) => typeof ref === 'string' && ref)\n .map((ref) => {\n const schemaDefinition = this.document.dereference(ref)\n if (schemaDefinition) return schemaDefinition\n\n return new SchemaDefinition({\n id: ref,\n name: 'unknown',\n schema: {},\n module: this.module,\n document: this.document,\n })\n })\n\n return dependencies\n }\n}\n","const keywords = [\n 'break',\n 'case',\n 'catch',\n 'continue',\n 'default',\n 'delete',\n 'do',\n 'else',\n 'finally',\n 'for',\n 'function',\n 'if',\n 'in',\n 'instanceof',\n 'new',\n 'return',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'while',\n 'with',\n]\n\nexport function isKeywords(str: string): boolean {\n return keywords.includes(str)\n}\n","\nconst reservedWords = [\n 'abstract',\n 'boolean',\n 'byte',\n 'char',\n 'class',\n 'const',\n 'debugger',\n 'double',\n 'enum',\n 'export',\n 'extends',\n 'final',\n 'float',\n 'goto',\n 'implements',\n 'import',\n 'int',\n 'interface',\n 'long',\n 'native',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'short',\n 'static',\n 'super',\n 'synchronized',\n 'throws',\n 'transient',\n 'volatile',\n]\n\nexport function isReservedWord(str: string): boolean {\n return reservedWords.includes(str)\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { ModuleDefinition } from './module-definition.js'\nimport { JSONPath } from 'jsonpath-plus'\nimport { ApiDocumentV3_1 } from './api-document_v3_1.js'\n\n\nexport class SchemaDefinition {\n readonly id: string\n readonly name: string\n readonly schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject\n readonly module: ModuleDefinition\n readonly document: ApiDocumentV3_1\n\n constructor(args: {\n id: string\n name: string\n schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject\n module: ModuleDefinition\n document: ApiDocumentV3_1\n }) {\n this.module = args.module\n this.name = args.name\n this.id = args.id\n this.schema = args.schema\n this.document = args.document\n }\n\n getDependencies(): SchemaDefinition[] {\n const refs: string[] = R.uniq(JSONPath({\n path: \"$..*['$ref']\",\n json: this.schema,\n }))\n\n return refs\n .filter((ref) => typeof ref === 'string' && !!ref.trim())\n .map((ref) => {\n const definition = this.document.dereference(ref)\n if (definition) return definition\n\n return new SchemaDefinition({\n id: ref,\n name: 'unknown',\n schema: {},\n module: this.module,\n document: this.document,\n })\n })\n }\n}\n","import fs from 'fs-extra'\nimport { RuntimeConfig } from '~/types/runtime-config.js'\n\n\nexport class Debugger {\n constructor(private rc?: RuntimeConfig) {\n }\n\n writeSwagger(fullpath: string, swagger: any): void {\n if (this.rc?.debug) {\n void fs.writeJSON(fullpath, swagger, { spaces: 2 })\n }\n }\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\nexport function dereference<T extends OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ResponseObject | OpenAPIV3_1.ParameterObject | OpenAPIV3_1.RequestBodyObject | OpenAPIV3_1.ReferenceObject>($ref: string, swagger: OpenAPIV3_1.Document): T {\n let value\n\n for (const key of $ref.split('/')) {\n if (key === '#') {\n value = swagger\n } else {\n value = value[key]\n }\n\n if (!value) break\n }\n\n return value as T\n}\n","import * as R from 'ramda'\nimport jsonpointer from 'jsonpointer'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JSONPath } from 'jsonpath-plus'\nimport { removeUndefinedRef } from './remove-undefined-ref.js'\nimport { SwaggerUtils } from './index.js'\n\n\nfunction dereferencePathObject(swagger: OpenAPIV3_1.Document): void {\n const matches = JSONPath({\n path: '$.paths.*.$ref^',\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of matches) {\n const value = SwaggerUtils.dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n}\n\nfunction dereferenceRequestBody(swagger: OpenAPIV3_1.Document): void {\n const matches = JSONPath({\n path: '$.paths.*.*.requestBody.$ref^',\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of matches) {\n const value = SwaggerUtils.dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n}\n\nexport function dereferenceResponses(swagger: OpenAPIV3_1.Document): void {\n const matches = [\n ...JSONPath({\n path: '$.paths.*.*.responses.*.$ref^',\n json: swagger,\n resultType: 'all',\n }),\n ...JSONPath({\n path: '$.paths.*.*.responses.*.headers.*.$ref^',\n json: swagger,\n resultType: 'all',\n }),\n ]\n\n for (const match of matches) {\n const value = SwaggerUtils.dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n}\n\nfunction dereferenceParameters(swagger: OpenAPIV3_1.Document): void {\n const matches = JSONPath({\n path: '$.paths.*.*.parameters.*.$ref^',\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of matches) {\n const value = SwaggerUtils.dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n}\n\nexport function dereferenceOperation(swagger: OpenAPIV3_1.Document): OpenAPIV3_1.Document {\n const shadow = R.clone(swagger)\n\n dereferencePathObject(shadow)\n dereferenceRequestBody(shadow)\n dereferenceResponses(shadow)\n dereferenceParameters(shadow)\n\n return removeUndefinedRef(shadow)\n}\n","import * as R from 'ramda'\nimport jsonpointer from 'jsonpointer'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JSONPath } from 'jsonpath-plus'\nimport { isRefDefined } from './is-ref-defined.js'\n\n\n// remove schema $ref if the reference is not founded\nexport function removeUndefinedRef(swagger: OpenAPIV3_1.Document): OpenAPIV3_1.Document {\n const shadow = R.clone(swagger)\n\n const matches = JSONPath({\n path: \"$..*['$ref']^\",\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of matches) {\n if (match.value.$ref && !isRefDefined(match.value.$ref, swagger)) {\n jsonpointer.set(shadow, match.pointer, R.omit(['$ref'], match.value))\n }\n }\n\n return shadow\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\nexport function isRefDefined($ref: string, swagger: OpenAPIV3_1.Document): boolean {\n if ($ref.startsWith('#/')) {\n const path = $ref.replace('#/', '').split('/')\n return R.path(path, swagger) !== undefined\n }\n\n return false\n}\n\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { SupportedMethods } from '~/constants/supported-methods.js'\n\n\ntype OperationUpdater = (method: string, pathname: string, operation: OpenAPIV3_1.OperationObject) => string | undefined\n\n\nexport function updateOperationId(swagger: OpenAPIV3_1.Document, fn: OperationUpdater): OpenAPIV3_1.Document {\n const shadow = R.clone(swagger)\n\n for (const [pathname, pathItem] of Object.entries(shadow.paths || {})) {\n for (const m in pathItem) {\n const method = m.toLowerCase()\n if (!SupportedMethods.includes(method)) continue\n if (typeof pathItem[m] !== 'object' || Array.isArray(pathItem[m]) || pathItem[m] === null) continue\n\n const operation: OpenAPIV3_1.OperationObject = pathItem[m]\n const operationId = fn(method, pathname, operation)\n\n if (typeof operationId === 'string' && operationId.length > 0) {\n operation.operationId = operationId\n }\n }\n }\n\n return shadow\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\nexport function isArray(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): schema is OpenAPIV3_1.ArraySchemaObject {\n return schema.type === 'array'\n}\n","\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { MixedSchemaObject } from './types/mixed-schema-object.js'\n\nexport function isMixed(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): schema is MixedSchemaObject {\n return Array.isArray(schema.type)\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\nexport function isNonArray(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): schema is OpenAPIV3_1.NonArraySchemaObject {\n return typeof schema.type === 'string' && schema.type !== 'array'\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\nexport function isRef(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.ResponseObject | OpenAPIV3_1.ParameterObject): schema is OpenAPIV3_1.ReferenceObject {\n return '$ref' in schema\n}\n","import { isArray } from './is-array.js'\nimport { isMixed } from './is-mixed.js'\nimport { isNonArray } from './is-non-array.js'\nimport { isRef } from './is-ref.js'\n\n\nexport class JsonSchemaUtils {\n static isRef = isRef\n static isArray = isArray\n static isNonArray = isNonArray\n static isMixed = isMixed\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { dereference } from './dereference.js'\nimport { JsonSchemaUtils } from '../json-schema-utils/index.js'\n\n\nexport function dereferenceDeep<T extends OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ResponseObject | OpenAPIV3_1.ParameterObject | OpenAPIV3_1.RequestBodyObject>($ref: string, swagger: OpenAPIV3_1.Document): T {\n const stack = [$ref]\n let value\n\n while (true) {\n const last = stack[stack.length - 1]\n value = dereference(last, swagger)\n\n if (JsonSchemaUtils.isRef(value)) {\n if (!stack.includes(value.$ref)) {\n stack.push(value.$ref)\n continue\n } else {\n // Circular reference detected\n throw new Error(`Circular reference detected: ${stack.join(' -> ')} -> ${value.$ref}`)\n }\n }\n\n break\n }\n\n return value as T\n}\n","import { dereference } from './dereference.js'\nimport { dereferenceOperation } from './dereference-operation.js'\nimport { isRefDefined } from './is-ref-defined.js'\nimport { removeUndefinedRef } from './remove-undefined-ref.js'\nimport { updateOperationId } from './update-operation-id.js'\nimport { dereferenceDeep } from './dereference-deep.js'\n\n\nexport class SwaggerUtils {\n static isRefDefined = isRefDefined\n static dereference = dereference\n static dereferenceDeep = dereferenceDeep\n static removeUndefinedRef = removeUndefinedRef\n static dereferenceOperation = dereferenceOperation\n static updateOperationId = updateOperationId\n}\n","import { ListrTask } from 'listr2'\nimport { TaskContext } from '~/tasks/types/task-context.js'\nimport { Debugger } from '~/utils/debugger.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\n\n\nfunction main(): ListrTask<TaskContext> {\n return {\n task: (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.downloaded) throw new Error('Please run download task first.')\n\n const rc = context.setup.rc\n const downloadedDocuments = context.downloaded.documents\n const debug = new Debugger(rc)\n\n context.validated = {\n documents: [],\n }\n\n return task.newListr(\n downloadedDocuments.map((document): ListrTask<TaskContext> => ({\n title: document.module.name,\n task: async (ctx, task) => {\n const { valid, errors } = await document.validate()\n\n if (!valid) {\n const message = `${document.module.name} module swagger file does not conform to the openapi@3.1 standard specifications or have grammatical errors, which may cause unexpected errors: \\n${errors?.map((e) => ` - ${e.message}`).join('\\n')}`\n task.output = message\n }\n\n const fixedDocument = document.fix()\n debug.writeSwagger(`.keq/${document.module.name}.fixed.json`, fixedDocument.swagger)\n\n const v3_1Document = await fixedDocument.toV3_1(rc)\n ctx.validated!.documents.push(v3_1Document)\n },\n })),\n {\n concurrent: true,\n rendererOptions: {\n collapseSubtasks: false,\n persistentOutput: true,\n },\n },\n )\n },\n }\n}\n\nexport function createValidateTask(compiler: Compiler, options?: BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Validate',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(),\n {\n task: (context, task) => compiler.hooks.afterValidate\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import { ListrTask } from 'listr2'\nimport { TaskContext } from '~/tasks/types/task-context.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\n\n\nexport interface ShakingTaskOptions {\n skipIgnoredModules?: boolean\n skipEmptyDocuments?: boolean\n}\n\nfunction main(compiler: Compiler, options?: ShakingTaskOptions): ListrTask<TaskContext> {\n return {\n task: (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.validated) throw new Error('Please run validate task first.')\n\n const matcher = context.setup.matcher\n const documents = context.validated.documents\n\n context.shaken = {\n documents: [],\n }\n\n return task.newListr(\n documents.map((document): ListrTask<TaskContext> => ({\n title: document.module.name,\n task: (ctx, task) => {\n if (options?.skipIgnoredModules && matcher.isModuleIgnored(document.module)) {\n task.skip(`${document.module.name} module is ignored`)\n return\n }\n\n const shakenDocument = document.sharking(\n (operationDefinition) => !matcher.isOperationIgnored(operationDefinition),\n )\n\n if (options?.skipEmptyDocuments && shakenDocument.isEmpty()) {\n task.skip(`${document.module.name} module is empty`)\n return\n }\n\n ctx.shaken!.documents.push(shakenDocument)\n },\n })),\n {\n concurrent: true,\n rendererOptions: {\n collapseSubtasks: false,\n suffixSkips: true,\n },\n },\n )\n },\n }\n}\n\n\nexport function createShakingTask(compiler: Compiler, options?: ShakingTaskOptions & BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Shaking',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(compiler, options),\n {\n task: (context, task) => compiler.hooks.afterShaking\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import * as path from 'path'\nimport fs from 'fs-extra'\nimport { ListrTask } from 'listr2'\nimport { TaskContext } from '~/tasks/types/task-context.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\nimport { File } from '../types/file.js'\n\n\nfunction createPersistArtifactTask(): ListrTask<TaskContext> {\n return {\n title: 'Write files',\n task: async (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.compiled) {\n task.skip('No compiled artifacts to persist.')\n return\n }\n\n const rc = context.setup.rc\n const artifacts = context.compiled.artifacts\n\n for (const artifact of artifacts) {\n artifact.changeFileNameCase(rc.fileNamingStyle)\n }\n\n const total = artifacts.length\n let completed = 0\n\n const files = await Promise.all(artifacts.map(async (artifact): Promise<File> => {\n const realpath = `./${path.join(rc.outdir, artifact.filepath)}`\n await fs.ensureFile(realpath)\n await fs.writeFile(realpath, artifact.toCode({ esm: !!rc.esm }))\n\n completed += 1\n task.output = `Persisted ${completed}/${total} files`\n\n return { path: path.resolve(realpath) }\n }))\n\n context.persisted = { files }\n },\n }\n}\n\nfunction createPersistIgnoreTask(): ListrTask<TaskContext> {\n return {\n title: 'Update .keqignore',\n task: async (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n\n const matcher = context.setup.matcher\n await matcher.write('.keqignore')\n },\n }\n}\n\n\nfunction main(): ListrTask<TaskContext> {\n return {\n task: (context, task) => task.newListr(\n [\n createPersistArtifactTask(),\n createPersistIgnoreTask(),\n ],\n {\n concurrent: true,\n rendererOptions: {\n collapseSubtasks: true,\n },\n },\n ),\n }\n}\n\nexport function createPersistTask(compiler: Compiler, options?: BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Persist',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(),\n {\n task: (context, task) => compiler.hooks.afterPersist\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import * as R from 'ramda'\nimport { Compiler } from '~/compiler/compiler.js'\nimport { jsonSchemaRenderer } from '~/renderer/json-schema/index.js'\nimport { TaskWrapper } from '~/tasks/types/index.js'\nimport { SchemaDefinition, Artifact } from '~/tasks/utils/index.js'\n\n\ninterface CompileProcessorOptions {\n // rc: RuntimeConfig\n compiler: Compiler\n task: TaskWrapper\n schemaDefinitions: SchemaDefinition[]\n}\n\nexport function genSchemaDefinitionFilepath(schemaDefinition: SchemaDefinition): string {\n const filename = `${schemaDefinition.name}.schema.ts`\n return [\n '.',\n schemaDefinition.module.name,\n 'components',\n 'schemas',\n filename,\n ].join('/')\n}\n\nfunction genEntrypointFilepath(moduleName): string {\n return [\n '.',\n moduleName,\n 'components',\n 'schemas',\n 'index.ts',\n ].join('/')\n}\n\nexport const isArtifactCompiledBy = function (schemaDefinition: SchemaDefinition) {\n return (artifact: Artifact): boolean => artifact.id === genSchemaDefinitionFilepath(schemaDefinition)\n}\n\nexport async function compileSchemaDefinition(options: CompileProcessorOptions): Promise<Artifact[]> {\n const { task, compiler, schemaDefinitions } = options\n\n const artifacts = await Promise.all(\n schemaDefinitions\n .map(async (schemaDefinition): Promise<Artifact> => {\n const content = await jsonSchemaRenderer(schemaDefinition)\n const filepath = genSchemaDefinitionFilepath(schemaDefinition)\n\n const artifact = new Artifact({\n id: filepath,\n filepath,\n content,\n extensionName: '.schema.ts',\n })\n\n return await compiler.hooks.afterCompileSchema.promise(artifact, schemaDefinition, task)\n }),\n )\n\n\n for (const schemaDefinition of schemaDefinitions) {\n const artifact = artifacts.find(isArtifactCompiledBy(schemaDefinition))\n if (!artifact) continue\n\n const dependentSchemaDefinitions = schemaDefinition.getDependencies()\n\n for (const dependentSchemaDefinition of dependentSchemaDefinitions) {\n const dependentArtifact = artifacts.find(isArtifactCompiledBy(dependentSchemaDefinition))\n if (!dependentArtifact) {\n artifact.addWarn(`Cannot find dependent $ref: ${dependentSchemaDefinition.id}`)\n continue\n }\n\n artifact.addDependence(dependentArtifact, [dependentSchemaDefinition.name])\n }\n }\n\n\n const schemaDefinitionsGroupByModuleName = R.groupBy(\n (schemaDefinition) => schemaDefinition.module.name,\n schemaDefinitions,\n )\n\n\n const entrypointArtifacts = Object.entries(schemaDefinitionsGroupByModuleName)\n .map(([moduleName, schemaDefinitions]) => {\n const filepath = genEntrypointFilepath(moduleName)\n\n const artifact = new Artifact({\n id: filepath,\n filepath,\n content: [\n '/* @anchor:file:start */',\n '/* @anchor:file:end */',\n ].join('\\n'),\n })\n\n for (const schemaDefinition of (schemaDefinitions || [])) {\n const dependentArtifact = artifacts.find(isArtifactCompiledBy(schemaDefinition))\n if (!dependentArtifact) {\n artifact.addWarn(`Cannot find dependent $ref: ${schemaDefinition.id}`)\n continue\n }\n\n artifact.addDependence(dependentArtifact, [], { export: true })\n }\n\n return artifact\n })\n\n return [...artifacts, ...entrypointArtifacts]\n}\n","import * as R from 'ramda'\nimport { SchemaDefinition } from '~/tasks/utils/schema-definition.js'\nimport { generateComment, generateSchema } from '../utils/generate-schema.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\n\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function jsonSchemaRenderer(schemaDefinition: SchemaDefinition): Promise<string> {\n let $comment = generateComment(schemaDefinition.schema)\n if ($comment) $comment += '\\n'\n\n if (typeof schemaDefinition.schema === 'boolean') {\n return [\n '/* @anchor:file:start */',\n '',\n $comment || undefined,\n `type ${schemaDefinition.name} = unknown`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n\n if (JsonSchemaUtils.isNonArray(schemaDefinition.schema) && schemaDefinition.schema.type === 'object') {\n // return `${$comment}export interface ${schemaDefinition.name} ${generateSchema(schemaDefinition.schema)}`\n\n return [\n '/* @anchor:file:start */',\n '',\n $comment || undefined,\n `export interface ${schemaDefinition.name} ${generateSchema(schemaDefinition.schema)}`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n\n return [\n '/* @anchor:file:start */',\n '',\n $comment || undefined,\n `export type ${schemaDefinition.name} = ${generateSchema(schemaDefinition.schema)}`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { MixedSchemaObject } from '../types/mixed-schema-object.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\n\nexport type Alias = (name: string) => string\n\nexport function generateComment(schema: OpenAPIV3_1.SchemaObject): string {\n const lines = ['/**']\n\n if (schema.description) {\n const description = schema.description.replace('*/', '*\\\\/')\n lines.push(...description.split('\\n').map((line) => ` * ${line}`))\n }\n\n if (schema.deprecated) {\n lines.push(' * @deprecated')\n }\n\n if (schema.readOnly) {\n lines.push(' * @readonly')\n }\n\n if (schema.format) {\n lines.push(` * @format ${schema.format}`)\n }\n\n lines.push(' */')\n\n if (lines.length === 2) return ''\n return lines.join('\\n')\n}\n\n\nexport function generateSchema(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject, alias: Alias = R.identity): string {\n if (typeof schema === 'boolean') return 'unknown'\n\n if (JsonSchemaUtils.isRef(schema)) return generateReference(schema, alias)\n if (JsonSchemaUtils.isMixed(schema)) return generateMixed(schema, alias)\n if (JsonSchemaUtils.isArray(schema)) return generateArray(schema, alias)\n\n if (schema.type === 'object') return generateObject(schema, alias)\n if (schema.enum) return generateEnum(schema, alias)\n if (schema.oneOf) return generateOneOf(schema, alias)\n if (schema.anyOf) return generateAnyOf(schema, alias)\n if (schema.allOf) return generateAllOf(schema, alias)\n if (schema.type === 'string') return generateString(schema, alias)\n if (schema.type === 'number') return generateNumber(schema, alias)\n if (schema.type === 'boolean') return generateBoolean(schema, alias)\n if (schema.type === 'null') return generateNull(schema, alias)\n if (schema.type === 'integer') return generateInteger(schema, alias)\n\n return 'unknown'\n}\n\nfunction generateMixed(schema: MixedSchemaObject, alias: Alias): string {\n if (Array.isArray(schema.type)) {\n schema.type\n .map((type): (OpenAPIV3_1.ArraySchemaObject | OpenAPIV3_1.NonArraySchemaObject) => ({ ...schema, type }))\n .map((schema) => generateSchema(schema, alias))\n .join(' | ')\n }\n\n return 'unknown'\n}\n\nfunction generateReference(schema: OpenAPIV3_1.ReferenceObject, alias: Alias): string {\n if (!schema.$ref || !schema.$ref.startsWith('#')) return `unknown /* ${schema.$ref.replace('*/', '*\\\\/')} */`\n\n const parts: string[] = schema.$ref.split('/')\n\n // TODO: 检查引用是否存在\n return alias(parts[parts.length - 1]) || 'unknown'\n}\n\n\nfunction generateArray(schema: OpenAPIV3_1.ArraySchemaObject, alias: Alias): string {\n if (schema.items && Array.isArray(schema.items)) {\n const items = schema.items.map((s) => generateSchema(s, alias)).join(', ')\n return `[${items}]`\n }\n\n if (schema.items && typeof schema.items === 'object') {\n return `${generateSchema(schema.items, alias)}[]`\n }\n\n return 'any[]'\n}\n\nexport function indent(space: number, text: string): string {\n if (text === '') return ''\n\n const indentation = ' '.repeat(space)\n return text.split('\\n')\n .map((line) => `${indentation}${line}`)\n .join('\\n')\n}\n\nfunction generateObject(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (\n (!schema.properties || R.isEmpty(schema.properties))\n && (!schema.additionalProperties || R.isEmpty(schema.additionalProperties))\n ) {\n return 'object'\n }\n\n const $properties = Object.entries(schema.properties || {})\n .map(([propertyName, propertySchema]) => {\n let $comment = generateComment(propertySchema)\n if ($comment) $comment += '\\n'\n\n const $key = `\"${propertyName}\"${schema.required?.includes(propertyName) ? '' : '?'}`\n const $value = generateSchema(propertySchema, alias)\n\n return indent(2, `${$comment}${$key}: ${$value}`)\n })\n\n if (schema.additionalProperties) {\n const $value = schema.additionalProperties === true\n ? 'any'\n : generateSchema(schema.additionalProperties, alias)\n $properties.push(indent(2, `[key: string]: ${$value}`))\n }\n\n return [\n '{',\n ...$properties,\n '}',\n ].join('\\n')\n}\n\nfunction generateOneOf(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (!schema.oneOf) return 'unknown'\n\n return schema.oneOf.map((s) => generateSchema(s, alias)).join(' | ')\n}\n\nfunction generateAnyOf(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (!schema.anyOf) return 'unknown'\n\n return schema.anyOf.map((s) => generateSchema(s, alias)).join(' | ')\n}\n\nfunction generateAllOf(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (!schema.allOf) return 'unknown'\n\n return schema.allOf.map((s) => generateSchema(s, alias)).join(' & ')\n}\n\nfunction generateEnum(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (!schema.enum) return 'unknown'\n return schema.enum.map((v) => JSON.stringify(v)).join(' | ')\n}\n\nfunction generateString(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n if (schema.contentMediaType === 'application/octet-stream') return 'Blob | Buffer'\n if (schema.format === 'binary') return 'Blob | Buffer'\n return 'string'\n}\n\nfunction generateNumber(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n return 'number'\n}\n\nfunction generateBoolean(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n return 'boolean'\n}\n\nfunction generateNull(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n return 'null'\n}\n\nfunction generateInteger(schema: OpenAPIV3_1.NonArraySchemaObject, alias: Alias): string {\n return 'number'\n}\n","import type { Artifact } from './artifact.js'\n\nclass AnchorBlock {\n constructor(\n private artifact: Artifact,\n ) {}\n\n /**\n * Append content to the end of the anchor block.\n */\n append(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n\n const anchor = `@anchor:${anchorName}:end`\n const anchorIndex = lines.findIndex((line) => line.includes(`/* ${anchor} */`))\n\n if (anchorIndex === -1) {\n throw new Error(`\"${anchor}\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(anchorIndex, 0, content)\n this.artifact.content = lines.join('\\n')\n }\n\n prepend(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n\n const anchor = `@anchor:${anchorName}:start`\n const anchorIndex = lines.findIndex((line) => line.includes(`/* ${anchor} */`))\n\n if (anchorIndex === -1) {\n throw new Error(`\"${anchor}\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(anchorIndex + 1, 0, content)\n this.artifact.content = lines.join('\\n')\n }\n\n replace(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n const startIndex = lines.findIndex((line) => line.includes(`/* @anchor:${anchorName}:start */`))\n const endIndex = lines.findIndex((line) => line.includes(`/* @anchor:${anchorName}:end */`))\n\n if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {\n throw new Error(`\"@anchor:${anchorName}:start\" or \"@anchor:${anchorName}:end\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(startIndex + 1, endIndex - startIndex - 1, content)\n this.artifact.content = lines.join('\\n')\n }\n}\n\n\nexport class Anchor {\n block: AnchorBlock\n\n constructor(\n private artifact: Artifact,\n ) {\n this.block = new AnchorBlock(artifact)\n }\n\n append(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n\n const anchor = `@anchor:${anchorName}`\n const anchorIndex = lines.findIndex((line) => line.includes(`/* ${anchor} */`))\n\n if (anchorIndex === -1) {\n throw new Error(`\"${anchor}\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(anchorIndex + 1, 0, content)\n this.artifact.content = lines.join('\\n')\n }\n\n prepend(anchorName: string, content: string): void {\n const lines = this.artifact.content.split('\\n')\n\n const anchor = `@anchor:${anchorName}`\n const anchorIndex = lines.findIndex((line) => line.includes(`/* ${anchor} */`))\n\n if (anchorIndex === -1) {\n throw new Error(`\"${anchor}\" not found in artifact \"${this.artifact.filepath}\".`)\n }\n\n lines.splice(anchorIndex, 0, content)\n this.artifact.content = lines.join('\\n')\n }\n}\n","import * as path from 'path'\nimport * as changeCase from 'change-case'\nimport { Dependency, DependencyIdentifier, DependencyOptions, DependencySource } from './dependency.js'\nimport { FileNamingStyle } from '~/constants/file-naming-style.js'\nimport { toComment } from './to-comment.js'\nimport { ToCodeOptions } from '~/types/to-code-options.js'\nimport { Anchor } from './anchor.js'\n\n\nconst HeaderComment = [\n '// Code generated by keq-cli. DO NOT EDIT.',\n '// Code generated by keq-cli. DO NOT EDIT.',\n '// Code generated by keq-cli. DO NOT EDIT.',\n '',\n '',\n].join('\\n')\n\nexport class Artifact {\n id: string\n filepath: string\n dependencies: Dependency[] = []\n warns: string[] = []\n content: string\n extensionName\n anchor = new Anchor(this)\n\n constructor(options: {\n id: string\n filepath: string\n dependencies?: Dependency[]\n content: string\n extensionName?: string\n }) {\n this.id = options.id\n this.filepath = options.filepath\n this.extensionName = options.extensionName || path.extname(options.filepath)\n this.content = options.content\n\n if (options.dependencies) this.dependencies = options.dependencies\n }\n\n get dirname(): string {\n return path.dirname(this.filepath)\n }\n\n changeFileNameCase(style: FileNamingStyle): this {\n this.filepath = this.filepath\n .split('/')\n .map((part, index, arr) => {\n if (part === '.' || part === '..') return part\n\n if (index !== arr.length - 1) {\n return `${changeCase[style](part)}`\n }\n\n const baesname = path.basename(part, this.extensionName)\n return `${changeCase[style](baesname)}${this.extensionName}`\n })\n .join('/')\n\n return this\n }\n\n relativeTo(filepath: string): string {\n const relativePath = path.relative(filepath, this.filepath)\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n }\n\n addDependence(source: DependencySource, identifiers: (string | DependencyIdentifier)[], options?: DependencyOptions): Dependency {\n const dependence = new Dependency(\n source,\n identifiers,\n this,\n options,\n )\n\n this.dependencies.push(dependence)\n return dependence\n }\n\n addWarn(message: string): void {\n this.warns.push(message)\n }\n\n toCode(options: ToCodeOptions): string {\n let $dependencies = this.dependencies\n .map((dependency) => dependency.toCode(options))\n .filter((line) => line.trim() !== '')\n .join('\\n')\n\n if ($dependencies) {\n $dependencies += '\\n\\n'\n }\n\n let $warns = ''\n\n if (this.warns.length) {\n $warns = toComment([\n '!!! Here is some Problems !!!',\n '',\n this.warns,\n ].join('\\n'))\n $warns += '\\n\\n'\n }\n\n return `${HeaderComment}${$warns}${$dependencies}${this.content}`\n }\n}\n","import * as path from 'path'\nimport { Artifact } from './artifact.js'\nimport { toComment } from './to-comment.js'\nimport { ToCodeOptions } from '~/types/to-code-options.js'\n\nexport type DependencySource = string | Artifact\n\nexport interface DependencyOptions {\n type?: boolean\n export?: boolean\n}\n\nexport class DependencyIdentifier {\n constructor(\n public name: string,\n public alias?: string,\n public type: boolean = false,\n ) {}\n\n toCode(): string {\n const $type = this.type ? 'type ' : ''\n if (this.alias) {\n return `${$type}${this.name} as ${this.alias}`\n }\n return `${$type}${this.name}`\n }\n}\n\nexport class Dependency {\n readonly source: DependencySource\n readonly identifiers: DependencyIdentifier[]\n readonly export: boolean\n readonly belongTo: Artifact\n\n\n constructor(source: DependencySource, identifiers: (string | DependencyIdentifier)[], belongTo: Artifact, options?: DependencyOptions) {\n this.source = source\n\n this.identifiers = identifiers.map((i) => (typeof i === 'string' ? new DependencyIdentifier(i) : i))\n if (options?.type) {\n for (const identifier of this.identifiers) {\n identifier.type = true\n }\n }\n\n this.export = !!options?.export\n this.belongTo = belongTo\n }\n\n private get realSource(): string {\n if (typeof this.source === 'string') {\n if (this.source.startsWith('.')) return path.relative(this.belongTo.filepath, this.source)\n return this.source\n }\n return this.source.relativeTo(this.belongTo.dirname)\n }\n\n toCode(options: ToCodeOptions): string {\n const { esm } = options\n\n try {\n let fullpath = this.realSource\n\n if (fullpath.startsWith('.') && fullpath.endsWith('.ts')) {\n if (esm) {\n fullpath = fullpath.replace(/\\.ts$/, '.js')\n } else {\n fullpath = fullpath.replace(/\\.ts$/, '')\n }\n }\n\n if (this.identifiers.length > 0) {\n const $identifiers = this.identifiers.map((i) => i.toCode()).join(', ')\n return `${this.export ? 'export' : 'import'} { ${$identifiers} } from '${fullpath}'`\n }\n\n if (this.export) {\n return `export * from '${fullpath}'`\n }\n\n return `import '${fullpath}'`\n } catch (err) {\n return toComment(String(err))\n }\n }\n}\n","export function toComment(msg?: string): string {\n if (!msg) return ''\n\n return msg.split('\\n')\n .map((str) => `// ${str}`)\n .join('\\n')\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JSONPath } from 'jsonpath-plus'\n\n\nexport class JsonSchema {\n constructor(\n private value: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject,\n ) {}\n\n toJson(): OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject {\n return this.value\n }\n\n pickRefs(): string[] {\n const $refs: string[] = JSONPath({\n path: \"$..*['$ref']\",\n json: this.value,\n })\n .filter((ref) => typeof ref === 'string')\n\n return R.uniq($refs)\n }\n}\n","import * as R from 'ramda'\nimport { KeqQueryOptions } from 'keq'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { operationTypeRenderer, typeNameFactory } from '~/renderer/operation-type/index.js'\nimport { RuntimeConfig } from '~/types/runtime-config.js'\nimport { operationRequestRenderer } from '~/renderer/operation-request/index.js'\nimport { isArtifactCompiledBy } from './compile-schema-definition.js'\nimport type { Compiler } from '~/compiler/compiler.js'\nimport { DependencyIdentifier, OperationDefinition, Artifact } from '~/tasks/utils/index.js'\nimport { TaskWrapper } from '~/tasks/types/index.js'\n\n\ninterface CompileProcessorOptions {\n compiler: Compiler\n task: TaskWrapper\n rc: RuntimeConfig\n requestArtifact: Artifact\n schemaArtifacts: Artifact[]\n operationDefinitions: OperationDefinition[]\n}\n\n\nfunction genOperationTypeFilepath(operationDefinition: OperationDefinition): string {\n const filename = `${operationDefinition.operationId}.type.ts`\n return [\n '.',\n operationDefinition.module.name,\n 'types',\n filename,\n ].join('/')\n}\n\nfunction genOperationRequestFilepath(operationDefinition: OperationDefinition): string {\n const filename = `${operationDefinition.operationId}.request.ts`\n return [\n '.',\n operationDefinition.module.name,\n 'operations',\n filename,\n ].join('/')\n}\n\nfunction genEntrypointFilepath(moduleName: string): string {\n return [\n '.',\n moduleName,\n 'operations',\n 'index.ts',\n ].join('/')\n}\n\nexport async function compileOperationDefinition(options: CompileProcessorOptions): Promise<Artifact[]> {\n const { compiler, task, rc, requestArtifact: requestArtifact, schemaArtifacts, operationDefinitions } = options\n\n const alias = (name: string): string => `${name}Schema`\n const qs = (parameter: OpenAPIV3_1.ParameterObject): KeqQueryOptions | undefined => {\n if (typeof rc.qs === 'function') {\n return rc.qs(parameter)\n } else if (typeof rc.qs === 'object') {\n return rc.qs\n }\n\n const style = parameter.style || 'form'\n const explode = parameter.explode ?? true\n\n if (style === 'deepObject') {\n return { arrayFormat: 'brackets' }\n } else if (explode) {\n return { arrayFormat: 'repeat' }\n } else {\n if (style === 'form') {\n return { arrayFormat: 'comma' }\n } else if (style === 'spaceDelimited') {\n return { arrayFormat: 'space' }\n } else if (style === 'pipeDelimited') {\n return { arrayFormat: 'pipe' }\n }\n }\n\n return {}\n }\n\n async function createTypeArtifact(operationDefinition: OperationDefinition): Promise<Artifact> {\n const content = await operationTypeRenderer(operationDefinition, alias)\n const filepath = genOperationTypeFilepath(operationDefinition)\n\n const typeArtifact = new Artifact({\n id: filepath,\n filepath,\n content,\n extensionName: '.type.ts',\n })\n\n typeArtifact.addDependence('keq', ['KeqOperation', 'KeqQueryInit', 'KeqPathParameterInit'])\n const dependentSchemaDefinitions = operationDefinition.getDependencies()\n\n for (const dependentSchemaDefinition of dependentSchemaDefinitions) {\n const dependentArtifact = schemaArtifacts.find(isArtifactCompiledBy(dependentSchemaDefinition))\n if (!dependentArtifact) {\n typeArtifact.addWarn(`Cannot find dependent $ref: ${dependentSchemaDefinition.id}`)\n continue\n }\n\n typeArtifact.addDependence(dependentArtifact, [\n new DependencyIdentifier(dependentSchemaDefinition.name, alias(dependentSchemaDefinition.name)),\n ])\n }\n\n return await compiler.hooks.afterCompileOperationType.promise(typeArtifact, operationDefinition, task)\n }\n\n async function createRequestArtifact(operationDefinition: OperationDefinition, typeArtifact: Artifact): Promise<Artifact> {\n const typeName = typeNameFactory(operationDefinition)\n\n const content = await operationRequestRenderer(operationDefinition, { qs })\n const filepath = genOperationRequestFilepath(operationDefinition)\n\n const artifact = new Artifact({\n id: filepath,\n filepath,\n content,\n extensionName: '.request.ts',\n })\n\n artifact.addDependence('keq', ['Keq'])\n // artifact.addDependence(rc.request || 'keq', ['request'])\n artifact.addDependence(requestArtifact, ['request'])\n artifact.addDependence(\n typeArtifact,\n [\n 'Operation',\n typeName('ResponseBodies'),\n typeName('RequestParameters'),\n ],\n { type: true },\n )\n artifact.addDependence(\n typeArtifact,\n [\n `${typeName('RequestQuery')}`,\n `${typeName('RequestHeaders')}`,\n `${typeName('RequestBodies')}`,\n ],\n { export: true, type: true },\n )\n return await compiler.hooks.afterCompileOperationRequest.promise(artifact, operationDefinition, task)\n }\n\n\n const artifacts = R.unnest(\n await Promise.all(\n operationDefinitions.map(async (operationDefinition): Promise<Artifact[]> => {\n const typeArtifact = await createTypeArtifact(operationDefinition)\n const operationArtifact = await createRequestArtifact(operationDefinition, typeArtifact)\n\n return [typeArtifact, operationArtifact]\n }),\n ),\n )\n\n\n const operationDefinitionsGroupByModuleName = R.groupBy(\n (operationDefinition) => operationDefinition.module.name,\n operationDefinitions,\n )\n\n const entrypointArtifacts = Object.entries(operationDefinitionsGroupByModuleName)\n .map(([moduleName, operationDefinitions]) => {\n const filepath = genEntrypointFilepath(moduleName)\n const artifact = new Artifact({\n id: filepath,\n filepath,\n content: [\n '/* @anchor:file:start */',\n '/* @anchor:file:end */',\n ].join('\\n'),\n })\n\n for (const operationDefinition of (operationDefinitions || [])) {\n const dependentArtifact = artifacts.find((artifact) => artifact.filepath === genOperationRequestFilepath(operationDefinition))\n if (!dependentArtifact) {\n artifact.addWarn(`Cannot find operation: operation = ${operationDefinition.operationId}, pathname = ${operationDefinition.pathname}, method = ${operationDefinition.method}`)\n continue\n }\n\n artifact.addDependence(dependentArtifact, [], { export: true })\n }\n\n return artifact\n })\n\n return [...artifacts, ...entrypointArtifacts]\n}\n","import * as R from 'ramda'\nimport { Alias, generateSchema, indent } from '../utils/generate-schema.js'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { OperationDefinition } from '~/tasks/utils/operation-definition.js'\nimport * as changeCase from 'change-case'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { SwaggerUtils } from '~/utils/swagger-utils/index.js'\n\n\nexport type TypeNameFn = (name: string) => string\n\nexport function typeNameFactory(operationDefinition: OperationDefinition): TypeNameFn {\n const pascalCaseOperationId = changeCase.pascalCase(operationDefinition.operationId)\n return (name: string) => `${pascalCaseOperationId}${name}`\n}\n\nfunction responseBodies(operation: OpenAPIV3_1.OperationObject, alias: Alias = R.identity, typeName: TypeNameFn): string {\n if (!operation.responses || R.isEmpty(operation.responses)) {\n return `export interface ${typeName('ResponseBodies')} {}`\n }\n\n const $responses = Object.entries(operation.responses)\n .map(([statusCode, response]) => {\n if (!JsonSchemaUtils.isRef(response)) {\n const $value = Object.values(response.content || {})\n .map((mediaTypeObject) => mediaTypeObject.schema)\n .filter((schema) => !!schema)\n .map((schema) => generateSchema(schema, alias))\n .join(' | ')\n\n return indent(2, `${statusCode}: ${$value || 'void'}`)\n }\n })\n .join('\\n')\n\n return [\n `export interface ${typeName('ResponseBodies')} {`,\n $responses,\n '}',\n ].join('\\n')\n}\n\nfunction requestBodies(operation: OpenAPIV3_1.OperationObject, alias: Alias = R.identity, typeName: TypeNameFn): string {\n let $requestBodies = `export interface ${typeName('RequestBodies')} {}`\n\n if (operation.requestBody && !JsonSchemaUtils.isRef(operation.requestBody)) {\n const $mediaTypes = Object.entries(operation.requestBody.content || {})\n .map(([mediaType, mediaTypeObject]) => <const>[mediaType, mediaTypeObject.schema])\n .map(([mediaType, schema]) => {\n if (!schema) return `${JSON.stringify(mediaType)}: unknown`\n\n // if (mediaType === 'multipart/form-data') {\n // return `${JSON.stringify(mediaType)}: FormData | ${generateSchema(schema, alias)}`\n // } else if (mediaType === 'application/x-www-form-urlencoded') {\n // return `${JSON.stringify(mediaType)}: URLSearchParams | ${generateSchema(schema, alias)}`\n // }\n\n return `${JSON.stringify(mediaType)}: ${generateSchema(schema, alias)}`\n })\n .map((pair) => indent(2, pair))\n\n $requestBodies = [\n `export interface ${typeName('RequestBodies')} {`,\n ...$mediaTypes,\n '}',\n ].join('\\n')\n }\n\n return $requestBodies\n}\n\nfunction parameterBodies(operationDefinition: OperationDefinition, alias: Alias = R.identity, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n let parameterBodies = ''\n // let parameterBodies = `interface ${typeName('ParameterBodies')} {}`\n\n if (operation.requestBody && !JsonSchemaUtils.isRef(operation.requestBody)) {\n const $mediaTypes = Object.entries(operation.requestBody.content || {})\n .map(([mediaType, mediaTypeObject]) => <const>[mediaType, mediaTypeObject.schema])\n // .filter((pair): pair is [string, OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject] => !!pair[1])\n .map(([mediaType, schemaOrRef]) => {\n if (!schemaOrRef) return `${JSON.stringify(mediaType)}: unknown`\n\n const schema = JsonSchemaUtils.isRef(schemaOrRef)\n ? SwaggerUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(schemaOrRef.$ref, operationDefinition.document.swagger)\n : schemaOrRef\n\n if (schema.type === 'object' || schema.properties) {\n return `${JSON.stringify(mediaType)}: ${generateSchema(schemaOrRef, alias)} & { [key: string]: any }`\n }\n\n return `${JSON.stringify(mediaType)}: { [key: string]: any }`\n })\n .map((pair) => indent(2, pair))\n\n // $requestBodies = `export type ${typeName('RequestBody')} = ${$value || 'unknown'}`\n parameterBodies = [\n `interface ${typeName('ParameterBodies')} {`,\n ...$mediaTypes,\n '}',\n '',\n ].join('\\n')\n }\n\n return parameterBodies\n}\n\n\nfunction requestParameters(operation: OpenAPIV3_1.OperationObject, alias: Alias = R.identity, typeName: TypeNameFn): string {\n const mediaTypes = operation.requestBody && !JsonSchemaUtils.isRef(operation.requestBody)\n ? Object.keys(operation.requestBody.content || {})\n : []\n\n const base = `${typeName('RequestQuery')} & ${typeName('RouteParameters')} & ${typeName('RequestHeaders')}`\n\n if (mediaTypes.length === 1) {\n return `export type ${typeName('RequestParameters')} = ${base} & ${typeName('RequestBodies')}[${JSON.stringify(mediaTypes[0])}]`\n }\n\n if (mediaTypes.length > 1) {\n const unions = mediaTypes\n .map((mediaType) => `(${base} & ${typeName('RequestBodies')}[${JSON.stringify(mediaType)}] & { \"content-type\": ${JSON.stringify(mediaType)} })`)\n .join('\\n| ')\n\n return `export type ${typeName('RequestParameters')} = ${unions}`\n }\n\n return `export type ${typeName('RequestParameters')} = ${base}`\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function operationTypeRenderer(operationDefinition: OperationDefinition, alias: Alias = R.identity): Promise<string> {\n const { operation } = operationDefinition\n\n if (!operation.responses) return ''\n\n // const pascalCaseOperationId = changeCase.pascalCase(operationDefinition.operationId)\n const typeName = typeNameFactory(operationDefinition)\n\n const $responseBodies = responseBodies(operation, alias, typeName)\n const $requestBodies = requestBodies(operation, alias, typeName)\n const $parameterBodies = parameterBodies(operationDefinition, alias, typeName)\n const $requestParameters = requestParameters(operation, alias, typeName)\n\n\n return [\n '/* @anchor:file:start */',\n '',\n $responseBodies,\n '',\n $requestBodies,\n '',\n generateParameters(`${typeName('RequestQuery')}`, operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'query') || [], alias),\n '',\n generateParameters(`${typeName('RouteParameters')}`, operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'path') || [], alias),\n '',\n generateParameters(`${typeName('RequestHeaders')}`, operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'header') || [], alias),\n '',\n $parameterBodies || undefined,\n $requestParameters,\n '',\n `export interface Operation<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends ${$parameterBodies ? `keyof ${typeName('ParameterBodies')}` : 'string'} > extends KeqOperation {`,\n ` requestParams: ${typeName('RouteParameters')} & { [key: string]: KeqPathParameterInit }`,\n ` requestQuery: ${typeName('RequestQuery')} & { [key: string]: KeqQueryInit }`,\n ` requestHeaders: ${typeName('RequestHeaders')} & { [key: string]: string | number }`,\n ` requestBody: ${$parameterBodies ? `${typeName('ParameterBodies')}[CONTENT_TYPE] | ` : 'object | '}BodyInit`,\n ` responseBody: ${typeName('ResponseBodies')}[STATUS]`,\n '}',\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n}\n\nfunction generateParameters(name: string, parameters: OpenAPIV3_1.ParameterObject[], alias: Alias): string {\n if (parameters.length === 0) {\n return `export type ${name} = {}`\n }\n\n const $parameters = parameters.map((parameter) => {\n const parameterName = `\"${parameter.name}\"`\n const $key = parameter.required ? parameterName : `${parameterName}?`\n const $value = generateSchema(parameter.schema || { type: 'any' }, alias)\n\n return indent(2, `${$key}: ${$value}`)\n })\n .join('\\n')\n\n\n return [\n `export type ${name} = {`,\n $parameters,\n '}',\n ].filter(Boolean).join('\\n')\n}\n","import * as R from 'ramda'\nimport { OperationDefinition } from '~/tasks/utils/operation-definition.js'\nimport { typeNameFactory, TypeNameFn } from '../operation-type/index.js'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { KeqQueryOptionsFactory } from '~/types/runtime-config.js'\nimport { requestBodyRenderer } from './request-body.js'\n\n\ninterface OperationRequestRendererOptions {\n qs: KeqQueryOptionsFactory\n}\n\n\nfunction requestHeadersRenderer(operationDefinition: OperationDefinition, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n\n const $headers = (operation.parameters || [])\n .filter((p): p is OpenAPIV3_1.ParameterObject => !JsonSchemaUtils.isRef(p))\n .filter((p) => p.in === 'header')\n .map((p) => ` if (args && ${JSON.stringify(p.name)} in args) req.header(${JSON.stringify(p.name)}, args[${JSON.stringify(p.name)}])`)\n .concat('')\n .join('\\n')\n\n return $headers\n}\n\nfunction requestQueryRenderer(operationDefinition: OperationDefinition, qs: KeqQueryOptionsFactory, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n\n const $query = (operation.parameters || [])\n .filter((p): p is OpenAPIV3_1.ParameterObject => !JsonSchemaUtils.isRef(p))\n .filter((p) => p.in === 'query')\n .map((p) => {\n const option = qs(p)\n const $option = (!option || R.isEmpty(option)) ? '' : `, ${JSON.stringify(option)}`\n\n return ` if (args && ${JSON.stringify(p.name)} in args) req.query(${JSON.stringify(p.name)}, args[${JSON.stringify(p.name)}]${$option})`\n })\n .concat('')\n .join('\\n')\n\n return $query\n}\n\nfunction requestPathParametersRenderer(operationDefinition: OperationDefinition, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n\n const $pathParameters = (operation.parameters || [])\n .filter((p): p is OpenAPIV3_1.ParameterObject => !JsonSchemaUtils.isRef(p))\n .filter((p) => p.in === 'path')\n .map((p) => ` if (args && ${JSON.stringify(p.name)} in args) req.params(${JSON.stringify(p.name)}, args[${JSON.stringify(p.name)}])`)\n .concat('')\n .join('\\n')\n\n return $pathParameters\n}\n\nfunction getRequestMediaTypes(operationDefinition: OperationDefinition): string[] {\n const { operation } = operationDefinition\n const requestBodyContent = (operation.requestBody?.content || {}) as Record<string, OpenAPIV3_1.MediaTypeObject>\n return Object.keys(requestBodyContent)\n}\n\nfunction mediaTypeRenderer(operationDefinition: OperationDefinition): string {\n const mediaTypes = getRequestMediaTypes(operationDefinition)\n\n if (mediaTypes.length === 1 && !mediaTypes[0].endsWith('/*')) {\n return ` req.type(\"${mediaTypes[0]}\")\\n`\n } else if (mediaTypes.some((mediaType) => mediaType === '*/*')) {\n // no-op\n } else if (mediaTypes.some((mediaType) => mediaType.endsWith('/*'))) {\n return ' if(args?.[\"content-type\"]) req.type(args[\"content-type\"])\\n'\n } else if (mediaTypes.length > 1) {\n return ' if(args?.[\"content-type\"]) req.type(args[\"content-type\"])\\n'\n }\n\n return ''\n}\n\nfunction operationDeclarationRenderer(operationDefinition: OperationDefinition, typeName: TypeNameFn): string {\n const { operationId } = operationDefinition\n\n const mediaTypes = getRequestMediaTypes(operationDefinition)\n\n if (mediaTypes.length === 0) {\n return `function ${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends never = never>(args?: ${typeName('RequestParameters')}): Keq<Operation<STATUS, CONTENT_TYPE>>`\n } else if (mediaTypes.length === 1) {\n return `function ${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends ${JSON.stringify(mediaTypes[0])} = ${JSON.stringify(mediaTypes[0])}>(args?: ${typeName('RequestParameters')}): Keq<Operation<STATUS, CONTENT_TYPE>>`\n } else if (mediaTypes.length > 1) {\n return `function ${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends ${typeName('RequestParameters')}[\"content-type\"]>(args?: Extract<${typeName('RequestParameters')}, { \"content-type\": CONTENT_TYPE }>): Keq<Operation<STATUS, CONTENT_TYPE>>`\n }\n\n throw new Error('[operationDeclarationRenderer] Unreachable')\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function operationRequestRenderer(operationDefinition: OperationDefinition, options: OperationRequestRendererOptions): Promise<string> {\n const { operation, operationId, method, pathname } = operationDefinition\n const { qs } = options\n\n if (!operation.responses) return ''\n\n const typeName = typeNameFactory(operationDefinition)\n const moduleName = operationDefinition.module.name\n\n const $method = method.toLowerCase()\n const $queryParameters = requestQueryRenderer(operationDefinition, qs, typeName)\n const $headerParameters = requestHeadersRenderer(operationDefinition, typeName)\n const $pathParameters = requestPathParametersRenderer(operationDefinition, typeName)\n\n const $mediaType = mediaTypeRenderer(operationDefinition)\n\n const $requestBody = requestBodyRenderer(operationDefinition, typeName)\n\n const $operationDeclaration = operationDeclarationRenderer(operationDefinition, typeName)\n\n return [\n '/* @anchor:file:start */',\n '',\n `const moduleName = \"${moduleName}\"`,\n `const method = \"${method}\"`,\n `const pathname = \"${pathname}\"`,\n '',\n '/* @anchor:operation-declaration */',\n `export ${$operationDeclaration} {`,\n ` const req = request.${$method}<${typeName('ResponseBodies')}[STATUS]>(\"${pathname}\")`,\n ' .option(\\'module\\', { name: moduleName, pathname, method })',\n '',\n $mediaType || undefined,\n ' /* @anchor:query:start */',\n $queryParameters || undefined,\n ' /* @anchor:query:end */',\n '',\n ' /* @anchor:headers:start */',\n $headerParameters || undefined,\n ' /* @anchor:headers:end */',\n '',\n ' /* @anchor:path-parameters:start */',\n $pathParameters || undefined,\n ' /* @anchor:path-parameters:end */',\n '',\n ' /* @anchor:body:start */',\n $requestBody || undefined,\n ' /* @anchor:body:end */',\n '',\n ' /* @anchor:operation-return */',\n ` return req as ReturnType<typeof ${operationId}<STATUS${$operationDeclaration.includes('CONTENT_TYPE') ? ', CONTENT_TYPE' : ''}>>`,\n '}',\n '',\n `${operationId}.pathname = pathname`,\n `${operationId}.method = method`,\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n}\n","import * as R from 'ramda'\nimport { OperationDefinition } from '~/tasks/utils/operation-definition.js'\nimport { TypeNameFn } from '../operation-type/index.js'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { SwaggerUtils } from '~/utils/swagger-utils/index.js'\nimport { indent } from '../utils/generate-schema.js'\nimport { errorToComment } from './error-to-comment.js'\n\n\nfunction requestBodyFormDataPropertyRenderer(\n propertyName: string,\n propertySchema: OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject,\n mediaType: string,\n operationDefinition: OperationDefinition,\n): string {\n try {\n const $propertyName = JSON.stringify(propertyName)\n\n const schema = JsonSchemaUtils.isRef(propertySchema)\n ? SwaggerUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(propertySchema.$ref, operationDefinition.document.swagger)\n : propertySchema\n\n if (\n (schema.type === 'string' && schema.format === 'binary')\n || schema.contentMediaType === 'application/octet-stream') {\n return `if (args && ${$propertyName} in args && args[${$propertyName}]) req.attach(${$propertyName}, args[${$propertyName}])`\n } else if (\n schema.type === 'string'\n || (schema.type === 'array' && schema.items && schema.items.type === 'string')\n ) {\n return `if (args && ${$propertyName} in args && args[${$propertyName}] !== undefined) req.field(${$propertyName}, args[${$propertyName}])`\n } else if (schema.type === 'number' || schema.type === 'integer') {\n return `if (args && ${$propertyName} in args && args[${$propertyName}] !== undefined) req.field(${$propertyName}, String(args[${$propertyName}]))`\n }\n\n return `if (args && ${$propertyName} in args && args[${$propertyName}] !== undefined) req.field(${$propertyName}, String(args[${$propertyName}]) /* type is non-string in schema; triggers type coercion here */)`\n } catch (err) {\n return errorToComment(err, mediaType)\n }\n}\n\nfunction requestBodyPropertyRenderer(\n propertyName: string,\n propertySchema: OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject,\n mediaType: string,\n operationDefinition: OperationDefinition,\n): string {\n if (mediaType === 'application/json') {\n const $propertyName = JSON.stringify(propertyName)\n return `if (args && ${$propertyName} in args) req.send({ ${$propertyName}: args[${$propertyName}] })`\n } else if (mediaType === 'multipart/form-data') {\n return requestBodyFormDataPropertyRenderer(propertyName, propertySchema, mediaType, operationDefinition)\n } else {\n throw new Error(`Unsupported media type: ${mediaType}`)\n }\n}\n\nexport function requestBodyRenderer(operationDefinition: OperationDefinition, typeName: TypeNameFn): string {\n const { operation } = operationDefinition\n const requestBodyContent = (operation.requestBody?.content || {}) as Record<string, OpenAPIV3_1.MediaTypeObject>\n\n const $requestBody = Object.entries(requestBodyContent)\n .map(([mediaType, mediaTypeObject]): string | undefined => {\n if (!mediaTypeObject.schema) return\n\n try {\n const schema = JsonSchemaUtils.isRef(mediaTypeObject.schema)\n ? SwaggerUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(mediaTypeObject.schema.$ref, operationDefinition.document.swagger)\n : mediaTypeObject.schema\n\n if (schema.type !== 'object') return\n\n const properties = (schema.properties || {}) as OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject\n\n return Object.entries(properties)\n .map(([propertyName, propertySchema]) => {\n return indent(\n 2,\n requestBodyPropertyRenderer(propertyName, propertySchema, mediaType, operationDefinition),\n )\n })\n .join('\\n')\n } catch (err) {\n return indent(2, errorToComment(err, mediaType))\n }\n })\n .filter(R.isNotNil)\n .join('\\n')\n\n return $requestBody\n}\n","export function errorToComment(err: unknown, mediaType: string): string {\n const $err = String(err)\n .split('\\n')\n .map(((line) => ` * ${line}`))\n .join('\\n')\n\n return [\n '/**',\n ` * Unable to dereference schema for media type ${mediaType}`,\n $err,\n ' */',\n ].join('\\n')\n}\n","// eslint-disable-next-line @typescript-eslint/require-await\nexport async function requestRenderer(): Promise<string> {\n return [\n '/* @anchor:file:start */',\n '',\n '/* @anchor:request-declaration */',\n 'export const request = new KeqRequest()',\n '',\n '/* @anchor:file:end */',\n ].join('\\n')\n}\n","import { ListrTask } from 'listr2'\nimport { TaskContext } from '~/tasks/types/task-context.js'\nimport { compileSchemaDefinition } from './utils/compile-schema-definition.js'\nimport { compileOperationDefinition } from './utils/compile-operation-definition.js'\nimport { Artifact } from '../utils/artifact.js'\nimport { requestRenderer } from '~/renderer/request/index.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\nimport type { Compiler } from '~/compiler/compiler.js'\n\n\nfunction main(compiler: Compiler): ListrTask<TaskContext> {\n return {\n task: async (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.shaken) throw new Error('Please run shaking task first.')\n\n const rc = context.setup.rc\n const matcher = context.setup.matcher\n const documents = context.shaken.documents\n .filter((document) => !matcher.isModuleIgnored(document.module))\n\n let requestArtifact = new Artifact({\n id: 'request',\n filepath: 'request',\n content: await requestRenderer(),\n extensionName: '.ts',\n })\n\n requestArtifact.addDependence('keq', ['KeqRequest'])\n\n requestArtifact = await compiler.hooks.afterCompileKeqRequest\n .promise(\n requestArtifact,\n task,\n )\n\n const schemaDefinitions = documents.flatMap((document) => document.schemas)\n const operationDefinitions = documents.flatMap((document) => document.operations)\n\n const schemaArtifacts = await compileSchemaDefinition({ compiler, task, schemaDefinitions })\n const operationArtifacts = await compileOperationDefinition({ compiler, task, rc, operationDefinitions, schemaArtifacts, requestArtifact })\n\n const artifacts = [requestArtifact, ...schemaArtifacts, ...operationArtifacts]\n\n context.compiled = {\n artifacts,\n }\n },\n }\n}\n\nexport function createCompileTask(compiler: Compiler, options?: BaseTaskOptions): ListrTask<TaskContext> {\n return {\n title: 'Compile',\n enabled: options?.enabled,\n skip: options?.skip,\n task: (context, task) => task.newListr(\n [\n main(compiler),\n {\n task: (context, task) => compiler.hooks.afterCompile\n .promise(task),\n },\n ],\n {\n concurrent: false,\n },\n ),\n }\n}\n","import { ListrTaskWrapper } from 'listr2'\nimport { OperationDefinition } from '../../utils/operation-definition.js'\nimport { TaskContext } from '../../types/task-context.js'\nimport { select } from 'inquirer-select-pro'\nimport { ListrInquirerPromptAdapter } from '@listr2/prompt-adapter-inquirer'\n\nexport async function selectOperationDefinitions(\n task: ListrTaskWrapper<TaskContext, any, any>,\n operationDefinitions: OperationDefinition[],\n): Promise<OperationDefinition[]> {\n const selectedOperationDefinitions = await task.prompt(ListrInquirerPromptAdapter).run(\n select<OperationDefinition>,\n {\n message: 'Select Pathname',\n defaultValue: [],\n options: (input) => {\n const items = operationDefinitions.map((op) => ({ name: `${op.module.name} ${op.method.toUpperCase()} ${op.pathname}`, value: op }))\n\n if (!input) return items\n const keys = input\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n\n return items.filter((i) => {\n const name = i.name.toLowerCase()\n return keys.every((q) => name.includes(q))\n })\n },\n },\n )\n\n return selectedOperationDefinitions\n}\n","import { ListrTask } from 'listr2'\nimport { TaskContext } from '../types/task-context.js'\nimport { selectOperationDefinitions } from './utils/select-operation-definitions.js'\nimport { IgnoreMode } from '../types/ignore-mode.js'\nimport { BaseTaskOptions } from '../types/base-task-options.js'\n\nexport interface InteractiveTaskOptions {\n mode: IgnoreMode\n\n persist?: boolean\n\n /**\n * Remove all previously matcher rules.\n * This means that all rules form `.keqignore` file will be removed.\n */\n clear?: boolean\n}\n\n\nexport function createInteractiveTask(options: InteractiveTaskOptions & BaseTaskOptions): ListrTask<TaskContext> {\n return {\n enabled: options?.enabled,\n skip: options?.skip,\n task: async (context, task) => {\n if (!context.setup) throw new Error('Please run setup task first.')\n if (!context.validated) throw new Error('Please run validate task first.')\n\n const matcher = context.setup.matcher\n const documents = context.validated.documents\n const operationDefinitions = documents.flatMap((document) => document.operations)\n const selectedOperationDefinitions = await selectOperationDefinitions(task, operationDefinitions)\n\n if (options.clear) {\n matcher.append({\n persist: false,\n ignore: true,\n moduleName: '*',\n operationMethod: '*',\n operationPathname: '*',\n })\n }\n\n for (const op of selectedOperationDefinitions) {\n matcher.append({\n persist: !!options.persist,\n ignore: options.mode === 'add',\n moduleName: op.module.name,\n operationMethod: op.method,\n operationPathname: op.pathname,\n })\n }\n },\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport * as R from 'ramda'\nimport { FullTap, HookInterceptor, InnerCallback } from 'tapable'\n\nexport function perfectErrorMessage(): HookInterceptor<unknown, unknown> {\n return {\n register: <T extends FullTap>(tap: T): T => {\n const fn = tap.fn\n\n function prefix(err: unknown): void {\n if (err instanceof Error) {\n err.message = `[Plugin: ${tap.name}] ${err.message}`\n }\n }\n\n if (tap.type === 'promise') {\n tap.fn = async (...args: any[]) => {\n try {\n return await fn(...args)\n } catch (err) {\n prefix(err)\n throw err\n }\n }\n }\n\n if (tap.type === 'sync') {\n tap.fn = (...args: any[]) => {\n try {\n return fn(...args)\n } catch (err) {\n prefix(err)\n throw err\n }\n }\n }\n\n if (tap.type === 'async') {\n tap.fn = (...args: any[]) => {\n const callback = R.last(args) as InnerCallback<Error, any>\n\n return fn(...R.init(args), (err: Error | null, result: any) => {\n prefix(err)\n return callback(err, result)\n })\n }\n }\n\n return tap\n },\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport { FullTap, HookInterceptor } from 'tapable'\nimport { TaskWrapper } from '~/tasks/index.js'\n\n\nexport function proxyTaskWrapper(pluginName: string, task: TaskWrapper): TaskWrapper {\n return new Proxy(task, {\n set(target, prop, value) {\n if (prop !== 'output') {\n return Reflect.set(target, prop, value)\n }\n\n target.output = `[Plugin: ${pluginName}] ${value}`\n return true\n },\n })\n}\n\n\nexport function printInformation(taskIndex: number): HookInterceptor<unknown, unknown> {\n return {\n register: <T extends FullTap>(tap: T): T => {\n const fn = tap.fn\n\n if (tap.type === 'promise') {\n tap.fn = (...args: any[]) => {\n const task = args[taskIndex] as TaskWrapper\n const proxyTask = proxyTaskWrapper(tap.name, task)\n args[taskIndex] = proxyTask\n proxyTask.output = 'Processing...'\n return fn(...args)\n }\n }\n\n if (tap.type === 'sync') {\n tap.fn = (...args: any[]) => {\n const task = args[taskIndex] as TaskWrapper\n const proxyTask = proxyTaskWrapper(tap.name, task)\n args[taskIndex] = proxyTask\n proxyTask.output = 'Processing...'\n return fn(...args)\n }\n }\n\n if (tap.type === 'async') {\n tap.fn = (...args: any[]) => {\n const task = args[taskIndex] as TaskWrapper\n const proxyTask = proxyTaskWrapper(tap.name, task)\n args[taskIndex] = proxyTask\n proxyTask.output = 'Processing...'\n return fn(...args)\n }\n }\n\n return tap\n },\n }\n}\n\n"],"mappings":"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","names":["R","fs","path","Type","FileNamingStyle","QsArrayFormat","Type","R","keys","fs","path","message","fs","context","task","fs","path","R","R","JSONPath","R","JSONPath","path","filter","fs","R","jsonpointer","JSONPath","R","JSONPath","R","path","JSONPath","JSONPath","jsonpointer","R","last","fs","main","task","main","task","context","main","task","context","path","fs","main","context","task","R","R","R","schema","path","path","R","JSONPath","schemaDefinitions","R","R","changeCase","parameterBodies","R","R","genEntrypointFilepath","operationDefinitions","artifact","main","context","task","keys","R","prop","moduleNames","main"]}
|