keq 2.9.0 → 2.10.0

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.
Files changed (151) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/esm/src/constant.d.ts +2 -0
  3. package/dist/esm/src/constant.js +2 -0
  4. package/dist/esm/src/core.d.ts +30 -0
  5. package/dist/esm/src/core.js +162 -53
  6. package/dist/esm/src/exception/abort.exception.d.ts +3 -0
  7. package/dist/esm/src/exception/abort.exception.js +6 -0
  8. package/dist/esm/src/index.d.ts +1 -0
  9. package/dist/esm/src/index.js +1 -0
  10. package/dist/esm/src/is/is-abort-signal.d.ts +1 -0
  11. package/dist/esm/src/is/is-abort-signal.js +8 -0
  12. package/dist/esm/src/middlewares/fetch-arguments-middleware.js +5 -1
  13. package/dist/esm/src/middlewares/retry-middleware.js +20 -3
  14. package/dist/esm/src/middlewares/timeout-middleware.js +3 -1
  15. package/dist/esm/src/types/keq-context.d.ts +10 -1
  16. package/dist/esm/src/types/keq-context.js +1 -1
  17. package/dist/umd/src/constant.d.ts +2 -0
  18. package/dist/umd/src/constant.js +3 -1
  19. package/dist/umd/src/core.d.ts +30 -0
  20. package/dist/umd/src/core.js +162 -53
  21. package/dist/umd/src/exception/abort.exception.d.ts +3 -0
  22. package/dist/umd/src/exception/abort.exception.js +20 -0
  23. package/dist/umd/src/index.d.ts +1 -0
  24. package/dist/umd/src/index.js +4 -2
  25. package/dist/umd/src/is/is-abort-signal.d.ts +1 -0
  26. package/dist/umd/src/is/is-abort-signal.js +22 -0
  27. package/dist/umd/src/middlewares/fetch-arguments-middleware.js +4 -0
  28. package/dist/umd/src/middlewares/retry-middleware.js +21 -4
  29. package/dist/umd/src/middlewares/timeout-middleware.js +4 -2
  30. package/dist/umd/src/types/keq-context.d.ts +10 -1
  31. package/package.json +10 -13
  32. package/.claude/settings.local.json +0 -26
  33. package/packages/cache/.turbo/turbo-build.log +0 -29
  34. package/packages/cache/dist/index.d.mts +0 -354
  35. package/packages/cache/dist/index.d.mts.map +0 -1
  36. package/packages/cache/dist/index.d.ts +0 -353
  37. package/packages/cache/dist/index.d.ts.map +0 -1
  38. package/packages/cache/dist/index.js +0 -1271
  39. package/packages/cache/dist/index.js.map +0 -1
  40. package/packages/cache/dist/index.mjs +0 -1237
  41. package/packages/cache/dist/index.mjs.map +0 -1
  42. package/packages/cli/.turbo/turbo-build.log +0 -91
  43. package/packages/cli/dist/cli.cjs +0 -1364
  44. package/packages/cli/dist/cli.cjs.map +0 -1
  45. package/packages/cli/dist/cli.d.cts +0 -1
  46. package/packages/cli/dist/cli.d.mts +0 -1
  47. package/packages/cli/dist/cli.mjs +0 -1359
  48. package/packages/cli/dist/cli.mjs.map +0 -1
  49. package/packages/cli/dist/compiler-0Kli6UCr.cjs +0 -738
  50. package/packages/cli/dist/compiler-0Kli6UCr.cjs.map +0 -1
  51. package/packages/cli/dist/compiler-C3AE8j54.mjs +0 -715
  52. package/packages/cli/dist/compiler-C3AE8j54.mjs.map +0 -1
  53. package/packages/cli/dist/index.cjs +0 -20
  54. package/packages/cli/dist/index.cjs.map +0 -1
  55. package/packages/cli/dist/index.d.cts +0 -17
  56. package/packages/cli/dist/index.d.cts.map +0 -1
  57. package/packages/cli/dist/index.d.mts +0 -17
  58. package/packages/cli/dist/index.d.mts.map +0 -1
  59. package/packages/cli/dist/index.mjs +0 -10
  60. package/packages/cli/dist/index.mjs.map +0 -1
  61. package/packages/cli/dist/init-BNhD2oCI.mjs +0 -168
  62. package/packages/cli/dist/init-BNhD2oCI.mjs.map +0 -1
  63. package/packages/cli/dist/init-DqxLcRSQ.cjs +0 -170
  64. package/packages/cli/dist/init-DqxLcRSQ.cjs.map +0 -1
  65. package/packages/cli/dist/logger-D7PyVZo3.cjs +0 -46
  66. package/packages/cli/dist/logger-D7PyVZo3.cjs.map +0 -1
  67. package/packages/cli/dist/logger-QLBHySQ3.mjs +0 -12
  68. package/packages/cli/dist/logger-QLBHySQ3.mjs.map +0 -1
  69. package/packages/cli/dist/micro-function.translator-BmJZzkKh.cjs +0 -16
  70. package/packages/cli/dist/micro-function.translator-BmJZzkKh.cjs.map +0 -1
  71. package/packages/cli/dist/micro-function.translator-CDfkj4Tt.mjs +0 -11
  72. package/packages/cli/dist/micro-function.translator-CDfkj4Tt.mjs.map +0 -1
  73. package/packages/cli/dist/mock-command-Bp1LxSls.mjs +0 -350
  74. package/packages/cli/dist/mock-command-Bp1LxSls.mjs.map +0 -1
  75. package/packages/cli/dist/mock-command-WZcfy5Iq.cjs +0 -353
  76. package/packages/cli/dist/mock-command-WZcfy5Iq.cjs.map +0 -1
  77. package/packages/cli/dist/plugins-CgMhaNZq.cjs +0 -3558
  78. package/packages/cli/dist/plugins-CgMhaNZq.cjs.map +0 -1
  79. package/packages/cli/dist/plugins-DCvJ8iHR.mjs +0 -3280
  80. package/packages/cli/dist/plugins-DCvJ8iHR.mjs.map +0 -1
  81. package/packages/cli/dist/plugins.cjs +0 -36
  82. package/packages/cli/dist/plugins.d.cts +0 -2
  83. package/packages/cli/dist/plugins.d.mts +0 -2
  84. package/packages/cli/dist/plugins.mjs +0 -2
  85. package/packages/cli/dist/runtime-config-BWQlPhiB.d.cts +0 -780
  86. package/packages/cli/dist/runtime-config-BWQlPhiB.d.cts.map +0 -1
  87. package/packages/cli/dist/runtime-config-CrzK-Ucf.d.mts +0 -780
  88. package/packages/cli/dist/runtime-config-CrzK-Ucf.d.mts.map +0 -1
  89. package/packages/cli/dist/translators.cjs +0 -14
  90. package/packages/cli/dist/translators.cjs.map +0 -1
  91. package/packages/cli/dist/translators.d.cts +0 -14
  92. package/packages/cli/dist/translators.d.cts.map +0 -1
  93. package/packages/cli/dist/translators.d.mts +0 -14
  94. package/packages/cli/dist/translators.d.mts.map +0 -1
  95. package/packages/cli/dist/translators.mjs +0 -12
  96. package/packages/cli/dist/translators.mjs.map +0 -1
  97. package/packages/cli/node_modules/.bin/eslint +0 -21
  98. package/packages/cli/node_modules/.bin/jiti +0 -21
  99. package/packages/cli/node_modules/.bin/js-yaml +0 -21
  100. package/packages/cli/node_modules/.bin/jsf +0 -21
  101. package/packages/cli/node_modules/.bin/jsonpath +0 -21
  102. package/packages/cli/node_modules/.bin/jsonpath-plus +0 -21
  103. package/packages/cli/node_modules/.bin/semver +0 -21
  104. package/packages/cli/node_modules/.bin/tsc +0 -21
  105. package/packages/cli/node_modules/.bin/tsserver +0 -21
  106. package/packages/exception/.turbo/turbo-build.log +0 -29
  107. package/packages/exception/dist/index.d.mts +0 -21
  108. package/packages/exception/dist/index.d.mts.map +0 -1
  109. package/packages/exception/dist/index.d.ts +0 -21
  110. package/packages/exception/dist/index.d.ts.map +0 -1
  111. package/packages/exception/dist/index.js +0 -104
  112. package/packages/exception/dist/index.js.map +0 -1
  113. package/packages/exception/dist/index.mjs +0 -99
  114. package/packages/exception/dist/index.mjs.map +0 -1
  115. package/packages/headers/.turbo/turbo-build.log +0 -29
  116. package/packages/headers/dist/index.d.mts +0 -46
  117. package/packages/headers/dist/index.d.mts.map +0 -1
  118. package/packages/headers/dist/index.d.ts +0 -46
  119. package/packages/headers/dist/index.d.ts.map +0 -1
  120. package/packages/headers/dist/index.js +0 -81
  121. package/packages/headers/dist/index.js.map +0 -1
  122. package/packages/headers/dist/index.mjs +0 -75
  123. package/packages/headers/dist/index.mjs.map +0 -1
  124. package/packages/keq/.turbo/turbo-build.log +0 -29
  125. package/packages/keq/dist/index.d.mts +0 -962
  126. package/packages/keq/dist/index.d.mts.map +0 -1
  127. package/packages/keq/dist/index.d.ts +0 -962
  128. package/packages/keq/dist/index.d.ts.map +0 -1
  129. package/packages/keq/dist/index.js +0 -1876
  130. package/packages/keq/dist/index.js.map +0 -1
  131. package/packages/keq/dist/index.mjs +0 -1814
  132. package/packages/keq/dist/index.mjs.map +0 -1
  133. package/packages/nestjs/.turbo/turbo-build.log +0 -29
  134. package/packages/nestjs/dist/index.d.mts +0 -52
  135. package/packages/nestjs/dist/index.d.mts.map +0 -1
  136. package/packages/nestjs/dist/index.d.ts +0 -52
  137. package/packages/nestjs/dist/index.d.ts.map +0 -1
  138. package/packages/nestjs/dist/index.js +0 -166
  139. package/packages/nestjs/dist/index.js.map +0 -1
  140. package/packages/nestjs/dist/index.mjs +0 -136
  141. package/packages/nestjs/dist/index.mjs.map +0 -1
  142. package/packages/test/.turbo/turbo-build.log +0 -6
  143. package/packages/url/.turbo/turbo-build.log +0 -29
  144. package/packages/url/dist/index.d.mts +0 -9
  145. package/packages/url/dist/index.d.mts.map +0 -1
  146. package/packages/url/dist/index.d.ts +0 -9
  147. package/packages/url/dist/index.d.ts.map +0 -1
  148. package/packages/url/dist/index.js +0 -43
  149. package/packages/url/dist/index.js.map +0 -1
  150. package/packages/url/dist/index.mjs +0 -40
  151. package/packages/url/dist/index.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugins-CgMhaNZq.cjs","names":["MetadataStorage","ESLint","MetadataStorage","MetadataStorage","exec","MetadataStorage","MetadataStorage","R","R","R","R","fs","CommentRenderer","R","DeclarationRenderer","R","CommentRenderer","R","CommentRenderer","CommentRenderer","DeclarationRenderer","R","R","R","changeCase","R","R","R","R","R","R","changeCase","CustomError","R","R","R","changeCase","R","changeCase","MetadataStorage","MetadataStorage","R","changeCase","MetadataStorage","R","changeCase","MetadataStorage","changeCase","MetadataStorage","AsyncSeriesWaterfallHook","changeCase","MetadataStorage","R","changeCase","MetadataStorage","AsyncSeriesWaterfallHook","MetadataStorage","R","MetadataStorage","MetadataStorage","MetadataStorage","MetadataStorage","MetadataStorage","changeCase","MetadataStorage","AsyncSeriesWaterfallHook","MetadataStorage","MetadataStorage","MetadataStorage","MetadataStorage","MetadataStorage","url","fs","yaml","MetadataStorage","MetadataStorage","MetadataStorage","ListrInquirerPromptAdapter","select","MetadataStorage","MetadataStorage","fs","R","Ajv2020"],"sources":["../src/constants/qs-array-format.ts","../src/constants/supported-methods.ts","../src/models/plugin-metadata-storage.ts","../src/plugins/eslint/constants/metadata-storage.ts","../src/plugins/eslint/eslint.plugin.ts","../src/plugins/prettier/constants/metadata-storage.ts","../src/plugins/prettier/prettier.plugin.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/plugins/generate-micro-function/constants/metadata-storage.ts","../src/models/anchor.ts","../src/models/artifact.ts","../src/models/module-definition.ts","../src/utils/is-keywords.ts","../src/utils/is-reserved-word.ts","../src/models/schema-definition.ts","../src/models/response-definition.ts","../src/models/operation-definition.ts","../src/models/api-document_v3_1.ts","../src/models/asset.ts","../src/models/file-tracker.ts","../src/transformers/json-schema/comment.renderer.ts","../src/utils/indent.ts","../src/transformers/json-schema/reference.transformer.ts","../src/transformers/json-schema/declaration.renderer.ts","../src/transformers/json-schema/valibot.renderer.ts","../src/transformers/json-schema/json-schema.transformer.ts","../src/transformers/schema-definition/schema-definition.transformer.ts","../src/utils/import-alias-manager.ts","../src/transformers/response-definition/response-definition.transformer.ts","../src/transformers/operation-definition/comment.renderer.ts","../src/transformers/operation-definition/utils/type-name-factory.ts","../src/transformers/operation-definition/utils/rewrite-additional-properties-for-parameter.ts","../src/utils/openapi-utils/dereference.ts","../src/utils/openapi-utils/is-ref-defined.ts","../src/utils/openapi-utils/remove-undefined-ref.ts","../src/utils/openapi-utils/dereference-operation.ts","../src/utils/openapi-utils/dereference-deep.ts","../src/utils/openapi-utils/to-3_1.ts","../src/utils/openapi-utils/map-operation.ts","../src/utils/openapi-utils/map-parameter.ts","../src/utils/openapi-utils/map-schema.ts","../src/utils/openapi-utils/index.ts","../src/transformers/operation-definition/declaration.renderer.ts","../src/utils/to-safe-identifier.ts","../src/exception.ts","../src/transformers/operation-definition/typescript-snippet.ts","../src/transformers/operation-definition/micro-function.renderer.ts","../src/transformers/operation-definition/nestjs-method.renderer.ts","../src/transformers/operation-definition/operation-definition.transformer.ts","../src/transformers/entrypoint/entrypoint.transformer.ts","../src/transformers/api-document/nestjs-client.renderer.ts","../src/transformers/api-document/nestjs-module.renderer.ts","../src/transformers/api-document/api-document.transformer.ts","../src/plugins/generate-declaration/constants/metadata-storage.ts","../src/plugins/generate-declaration/generators/schema-declaration/schema.generator.ts","../src/plugins/generate-declaration/generators/response-declaration/response.generator.ts","../src/plugins/generate-declaration/generators/operation-declaration/operation.generator.ts","../src/plugins/generate-declaration/generate-declaration.plugin.ts","../src/plugins/generate-micro-function/generators/request/request.generator.ts","../src/plugins/generate-micro-function/generators/micro_function/micro-function.generator.ts","../src/plugins/generate-micro-function/generate-micro-function.plugin.ts","../src/plugins/body-fallback/constants/metadata-storage.ts","../src/plugins/body-fallback/index.ts","../src/plugins/use-valibot/constants/metadata-storage.ts","../src/plugins/use-valibot/use-valibot.plugin.ts","../src/plugins/generate-nestjs-module/constants/metadata-storage.ts","../src/plugins/generate-nestjs-module/generators/nestjs-module.generator.ts","../src/plugins/generate-nestjs-module/generate-nestjs-module.ts","../src/plugins/chinese-to-pinyin/constants/metadata-storage.ts","../src/plugins/chinese-to-pinyin/chinese-to-pinyin.plugin.ts","../src/plugins/download-http-file/constants/metadata-storage.ts","../src/plugins/download-http-file/download-http-file.plugin.ts","../src/plugins/download-local-file/constants/metadata-storage.ts","../src/plugins/download-local-file/download-local-file.plugin.ts","../src/plugins/shaking/constants/metadata-storage.ts","../src/plugins/shaking/shaking.plugin.ts","../src/plugins/terminal-select/utils/select-operation-definitions.ts","../src/plugins/terminal-select/constants/metadata-storage.ts","../src/plugins/terminal-select/terminal-select.plugin.ts","../src/plugins/clean/clean.plugin.ts","../src/plugins/initialize/initialize.plugin.ts","../src/plugins/overwrite-operation-id/overwrite-operation-id.plugin.ts","../src/plugins/overwrite-schema-name/overwrite-schema-name.plugin.ts","../src/plugins/overwrite-query-options/overwrite-query-options.plugin.ts","../src/plugins/overwrite-additional-properties/constants/metadata-storage.ts","../src/plugins/overwrite-additional-properties/overwrite-additional-properties.plugin.ts","../src/plugins/lint-schema/lint-schema.plugin.ts","../src/plugins/springdoc-compat/springdoc-compat.plugin.ts","../src/plugins/mock/mock.plugin.ts"],"sourcesContent":["export enum QsArrayFormat {\n brackets = 'brackets',\n indices = 'indices',\n repeat = 'repeat',\n comma = 'comma',\n space = 'space',\n pipe = 'pipe',\n}\n","export const SupportedMethods = [\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n]\n","import { Compiler } from '~/compiler/index.js'\n\n\n/**\n * A WeakMap-backed metadata storage for plugins.\n *\n * When a `key` is provided, the underlying WeakMap is stored in `globalThis` via\n * `Symbol.for(key)`, ensuring the same instance is shared across CJS and ESM module\n * boundaries. This is required for plugins that are imported by user config files\n * (e.g. via `@keq-request/cli/plugins`) and need to interoperate with the CLI's\n * internal plugins.\n *\n * When no `key` is provided, a plain `new WeakMap()` is used, which is sufficient\n * for plugins that always run within the same module system.\n */\nexport class PluginMetadataStorage<V> {\n private readonly storage: WeakMap<Compiler, V>\n\n constructor(key?: string) {\n if (key !== undefined) {\n const storageKey = Symbol.for(key)\n const g = globalThis as Record<symbol, unknown>\n if (!g[storageKey]) {\n g[storageKey] = new WeakMap<Compiler, V>()\n }\n this.storage = g[storageKey] as WeakMap<Compiler, V>\n } else {\n this.storage = new WeakMap<Compiler, V>()\n }\n }\n\n has(key: Compiler): boolean {\n return this.storage.has(key)\n }\n\n get(key: Compiler): V | undefined {\n return this.storage.get(key)\n }\n\n set(key: Compiler, value: V): this {\n this.storage.set(key, value)\n return this\n }\n\n delete(key: Compiler): boolean {\n return this.storage.delete(key)\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface EslintPluginMetadata {\n applied: boolean\n hooks: object\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<EslintPluginMetadata>(\n '@keq-request/cli:EslintPlugin:MetadataStorage',\n)\n","import { Compiler } from '~/compiler/compiler.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { ESLint } from 'eslint'\nimport { EslintPluginMetadata, MetadataStorage } from './constants/index.js'\n\n\ninterface EslintPluginOptions {\n /**\n * List of ESLint rules to disable\n */\n disable?: string[]\n}\n\nexport class EslintPlugin implements Plugin {\n constructor(private options: EslintPluginOptions = {}) {}\n\n\n apply(compiler: Compiler): void {\n if (!compiler.options.build) return\n\n // Prevent duplicate registration by checking applied flag\n const metadata = EslintPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n if (this.options.disable && this.options.disable.length > 0) {\n const $rules = [\n ...this.options.disable.map((rule) => `/* eslint-disable ${rule} */`),\n ].join('\\n')\n\n compiler.hooks.afterCompile.tap(EslintPlugin.name, () => {\n const artifacts = compiler.context.artifacts || []\n\n for (const artifact of artifacts) {\n artifact.anchor.append('file:start', $rules)\n }\n })\n }\n\n compiler.hooks.afterPersist.tapPromise(EslintPlugin.name, async (task) => {\n const files = compiler.context.assets || []\n if (files.length === 0) return\n\n const eslint = new ESLint({ fix: true })\n const results = await eslint.lintFiles(files.map((file) => file.path))\n await ESLint.outputFixes(results)\n })\n }\n\n static register(compiler: Compiler): EslintPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: { },\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): EslintPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface PrettierPluginMetadata {\n applied: boolean\n hooks: object\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<PrettierPluginMetadata>(\n '@keq-request/cli:PrettierPlugin:MetadataStorage',\n)\n","import { Compiler } from '~/compiler/compiler.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { exec } from 'child_process'\nimport { promisify } from 'util'\nimport { PrettierPluginMetadata, MetadataStorage } from './constants/index.js'\n\nconst execAsync = promisify(exec)\n\n\nexport class PrettierPlugin implements Plugin {\n apply(compiler: Compiler): void {\n if (!compiler.options.build) return\n\n // Prevent duplicate registration by checking applied flag\n const metadata = PrettierPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.afterPersist.tapPromise(PrettierPlugin.name, async () => {\n const files = compiler.context.assets || []\n if (files.length === 0) return\n\n const filePaths = files.map((file) => file.path).join(' ')\n await execAsync(`prettier --write ${filePaths}`)\n })\n }\n\n static register(compiler: Compiler): PrettierPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: {\n },\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): PrettierPluginMetadata | undefined {\n return this.register(compiler)\n }\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 { AsyncSeriesWaterfallHook } from 'tapable'\nimport { TaskWrapper } from '~/compiler/index.js'\nimport { Artifact, OperationDefinition } from '~/models/index.js'\nimport { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\nexport interface GenerateMicroFunctionPluginMetadata {\n applied: boolean\n hooks: {\n afterEntrypointArtifactGenerated: AsyncSeriesWaterfallHook<[Artifact, TaskWrapper]>\n afterMicroFunctionArtifactGenerated: AsyncSeriesWaterfallHook<[Artifact, OperationDefinition, TaskWrapper]>\n }\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<GenerateMicroFunctionPluginMetadata>(\n '@keq-request/cli:GenerateMicroFunctionPlugin:MetadataStorage',\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 { Anchor } from './anchor.js'\n\n\nconst HeaderComment = [\n '// Code generated by @keq-request/cli. DO NOT EDIT.',\n '// Code generated by @keq-request/cli. DO NOT EDIT.',\n '// Code generated by @keq-request/cli. DO NOT EDIT.',\n '',\n '',\n].join('\\n')\n\nexport class Artifact {\n id: string\n filepath: string\n content: string\n extensionName\n anchor = new Anchor(this)\n\n constructor(options: {\n id: string\n filepath: string\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\n get dirname(): string {\n return path.dirname(this.filepath)\n }\n\n renderer(): string {\n return `${HeaderComment}${this.content}`\n }\n}\n","import { Address } from '~/types/address.js'\n\n\nexport class ModuleDefinition {\n name: string\n address: Address\n\n constructor(name: string, address: string | Address) {\n this.name = name\n\n if (typeof address === 'string') {\n this.address = { url: address, headers: {}, encoding: 'utf8' }\n } else {\n this.address = address\n }\n }\n\n static unknown(): ModuleDefinition {\n return new ModuleDefinition('', { url: '', headers: {}, encoding: 'utf8' })\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 name: string\n readonly schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject\n readonly module: ModuleDefinition\n readonly document: ApiDocumentV3_1\n\n get id(): string {\n return `${this.module.address.url}#/components/schemas/${this.name}`\n }\n\n constructor(args: {\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.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 instanceof SchemaDefinition) return definition\n\n return SchemaDefinition.unknown()\n })\n .filter((dep) => dep.id !== this.id)\n }\n\n static unknown(): SchemaDefinition {\n return new SchemaDefinition({\n name: '',\n schema: {},\n module: ModuleDefinition.unknown(),\n document: ApiDocumentV3_1.unknown(),\n })\n }\n\n static isUnknown(definition: SchemaDefinition): boolean {\n return definition.name === ''\n }\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'\nimport { SchemaDefinition } from './schema-definition.js'\n\n\nexport class ResponseDefinition {\n readonly name: string\n readonly response: OpenAPIV3_1.ResponseObject\n readonly module: ModuleDefinition\n readonly document: ApiDocumentV3_1\n\n get id(): string {\n return `${this.module.address.url}#/components/responses/${this.name}`\n }\n\n constructor(args: {\n name: string\n response: OpenAPIV3_1.ResponseObject\n module: ModuleDefinition\n document: ApiDocumentV3_1\n }) {\n this.module = args.module\n this.name = args.name\n this.response = args.response\n this.document = args.document\n }\n\n getDependencies(): SchemaDefinition[] {\n const refs: string[] = R.uniq(JSONPath({\n path: \"$.content..schema..$['$ref']\",\n json: this.response,\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 instanceof SchemaDefinition) return definition\n\n return SchemaDefinition.unknown()\n })\n .filter((dep) => dep.id !== this.id)\n }\n\n static unknown(): ResponseDefinition {\n return new ResponseDefinition({\n name: '',\n response: { description: '' },\n module: ModuleDefinition.unknown(),\n document: ApiDocumentV3_1.unknown(),\n })\n }\n\n static isUnknown(definition: ResponseDefinition): boolean {\n return definition.name === ''\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'\nimport { ResponseDefinition } from './response-definition.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.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 get id(): string {\n return `${this.module.address.url}#/paths/${this.pathname}/${this.method}`\n }\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 definition = this.document.dereference(ref)\n if (definition instanceof SchemaDefinition) return definition\n\n return SchemaDefinition.unknown()\n })\n\n return dependencies\n }\n\n getResponseDependencies(): ResponseDefinition[] {\n const responses = this.operation.responses || {}\n\n return R.uniqBy(\n (dep) => dep.id,\n Object.values(responses)\n .filter((response): response is OpenAPIV3_1.ReferenceObject => JsonSchemaUtils.isRef(response))\n .map((response) => {\n const definition = this.document.dereference(response.$ref)\n if (definition instanceof ResponseDefinition) return definition\n\n return ResponseDefinition.unknown()\n })\n .filter((dep) => !ResponseDefinition.isUnknown(dep)),\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 { ResponseDefinition } from './response-definition.js'\nimport { logger } from '~/utils/logger.js'\n\n\nexport class ApiDocumentV3_1 {\n readonly module: ModuleDefinition\n readonly specification: OpenAPIV3_1.Document\n\n constructor(specification: OpenAPIV3_1.Document, module: ModuleDefinition) {\n this.module = module\n this.specification = specification\n }\n\n get schemas(): SchemaDefinition[] {\n const module = this.module\n\n return Object.entries(this.specification.components?.schemas || {})\n .map(([name, schema]) => new SchemaDefinition({\n name,\n schema,\n module,\n document: this,\n }))\n }\n\n get responses(): ResponseDefinition[] {\n const module = this.module\n\n return Object.entries(this.specification.components?.responses || {})\n .filter((entry): entry is [string, OpenAPIV3_1.ResponseObject] => {\n const [, response] = entry\n return typeof response === 'object' && !('$ref' in response)\n })\n .map(([name, response]) => new ResponseDefinition({\n name,\n response,\n module,\n document: this,\n }))\n }\n\n get operations(): OperationDefinition[] {\n const module = this.module\n\n return Object.entries(this.specification.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.specification.paths)\n }\n\n dereference($ref: string): SchemaDefinition | ResponseDefinition | undefined {\n if ($ref.startsWith('#/')) {\n if ($ref.startsWith('#/components/responses/')) {\n return this.responses.find((response) => response.id.endsWith($ref))\n }\n\n return this.schemas.find((schema) => schema.id.endsWith($ref))\n }\n\n logger.warn(`The $ref(${$ref}) is not defined in ${this.module.name} openapi/swagger.`)\n }\n\n isRefDefined($ref: string): boolean {\n if ($ref.startsWith('#/')) {\n const path = $ref.replace('#/', '').split('/')\n return R.path(path, this.specification) !== undefined\n }\n\n return false\n }\n\n static unknown(): ApiDocumentV3_1 {\n return new ApiDocumentV3_1({}, ModuleDefinition.unknown())\n }\n}\n","export class Asset {\n path: string\n\n constructor(path: string) {\n this.path = path\n }\n}\n","import fs from 'fs-extra'\n\ninterface TrackedFile {\n filepath: string\n mtimeMs: number\n}\n\n/**\n * Passive file change tracker based on mtime comparison.\n * Instead of actively watching filesystem events, it checks for changes on demand,\n * suitable for lazy reload of config files in long-lived processes.\n */\nexport class FileTracker {\n private files: TrackedFile[] = []\n private reloadPromise: Promise<void> | null = null\n\n async track(filepath: string): Promise<void> {\n let mtimeMs = 0\n try {\n const stat = await fs.stat(filepath)\n mtimeMs = stat.mtimeMs\n } catch {\n // file does not exist yet\n }\n this.files.push({ filepath, mtimeMs })\n }\n\n async ensureFresh(reload: () => Promise<void>): Promise<void> {\n if (!await this.isChanged()) return\n if (this.reloadPromise) {\n await this.reloadPromise\n return\n }\n if (!await this.isChanged()) return\n this.reloadPromise = reload().finally(() => {\n this.reloadPromise = null\n })\n await this.reloadPromise\n }\n\n async forceReload(reload: () => Promise<void>): Promise<void> {\n if (this.reloadPromise) {\n await this.reloadPromise\n }\n this.reloadPromise = reload().finally(() => {\n this.reloadPromise = null\n })\n await this.reloadPromise\n }\n\n async snapshot(): Promise<void> {\n for (const file of this.files) {\n try {\n const stat = await fs.stat(file.filepath)\n file.mtimeMs = stat.mtimeMs\n } catch {\n file.mtimeMs = 0\n }\n }\n }\n\n private async isChanged(): Promise<boolean> {\n for (const file of this.files) {\n try {\n const stat = await fs.stat(file.filepath)\n if (stat.mtimeMs !== file.mtimeMs) return true\n } catch {\n if (file.mtimeMs !== 0) return true\n }\n }\n return false\n }\n}\n","import { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { Renderer } from '../types/renderer.js'\n\n\nexport class CommentRenderer implements Renderer {\n constructor(\n private readonly schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject,\n ) {}\n\n render(): string {\n const schema = this.schema\n\n const lines = ['/**']\n\n if (schema.description) {\n const description = schema.description\n .replace('*/', '*\\\\/')\n .replace(/\\t/g, ' ')\n .replace(/\\r\\n?/g, '\\n')\n\n lines.push(...description.split('\\n').map((line) => ` * ${line.trimEnd()}`))\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","export 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) => (line ? `${indentation}${line}` : line))\n .join('\\n')\n}\n","import * as R from 'ramda'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\nexport class ReferenceTransformer {\n static toDeclaration(schema: OpenAPIV3_1.ReferenceObject, alias: (name: string) => string = R.identity): string {\n if (!schema.$ref || !schema.$ref.startsWith('#')) return `unknown /* ${schema.$ref.replace('*/', '*\\\\/')} */`\n\n const parts: string[] = schema.$ref.split('/')\n // return parts[parts.length - 1] || 'unknown'\n\n return alias(parts[parts.length - 1]) || 'unknown'\n }\n\n /**\n * Render the case where the $ref target does not exist\n */\n static toNotFoundDeclaration(schema: OpenAPIV3_1.ReferenceObject, hint?: string): string {\n const safeRef = schema.$ref.replace('*/', '*\\\\/')\n const message = hint\n ? `Cannot find $ref \"${safeRef}\". ${hint}`\n : `Cannot find $ref \"${safeRef}\"`\n return `unknown /* ${message} */`\n }\n\n /**\n * Render the case where the $ref format is invalid\n */\n static toInvalidDeclaration(schema: OpenAPIV3_1.ReferenceObject, hint?: string): string {\n const safeRef = schema.$ref.replace('*/', '*\\\\/')\n const message = hint\n ? `Invalid $ref \"${safeRef}\". ${hint}`\n : `Invalid $ref \"${safeRef}\"`\n return `unknown /* ${message} */`\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'\nimport { indent } from '~/utils/indent.js'\nimport { CommentRenderer } from './comment.renderer.js'\nimport { ReferenceTransformer } from './reference.transformer.js'\nimport { Renderer } from '../types/renderer.js'\n\n\nexport interface JsonSchemaDeclarationRendererOptions {\n /**\n * Custom renderer for `$ref` reference objects in TypeScript type declarations.\n *\n * When not provided, defaults to `ReferenceTransformer.toDeclaration`,\n * which converts the `$ref` path to a type name.\n *\n * @example\n * // Default behavior (without referenceTransformer):\n * // { $ref: '#/components/schemas/User' } → 'User'\n *\n * @example\n * // Custom transformer with alias mapping to avoid type name conflicts:\n * // Given aliases = { '#/components/schemas/User': 'UserV2' }\n * // { $ref: '#/components/schemas/User' } → 'UserV2'\n * const renderer = new DeclarationRenderer(schema, {\n * referenceTransformer: (ref) => aliases.get(ref.$ref) ?? ReferenceTransformer.toDeclaration(ref),\n * })\n */\n referenceTransformer?: (schema: OpenAPIV3_1.ReferenceObject) => string\n\n /**\n * Controls how `additionalProperties: true` (or undefined) is rendered.\n * @default 'unknown'\n */\n additionalPropertiesType?: 'unknown' | 'any'\n}\n\nexport class DeclarationRenderer implements Renderer {\n constructor(\n private readonly schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject,\n private readonly options: JsonSchemaDeclarationRendererOptions = {},\n ) {\n }\n\n render(): string {\n return this.renderSchema(this.schema)\n }\n\n private renderSchema(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): string {\n if (typeof schema === 'boolean') return 'unknown'\n\n if (JsonSchemaUtils.isRef(schema)) return this.renderReference(schema)\n if (JsonSchemaUtils.isMixed(schema)) return this.renderMixed(schema)\n if (JsonSchemaUtils.isArray(schema)) return this.renderArray(schema)\n\n if (schema.type === 'object') return this.renderObject(schema)\n if (schema.enum) return this.renderEnum(schema)\n if (schema.oneOf) return this.renderOneOf(schema)\n if (schema.anyOf) return this.renderAnyOf(schema)\n if (schema.allOf) return this.renderAllOf(schema)\n if (schema.type === 'string') return this.renderString(schema)\n if (schema.type === 'number') return this.renderNumber(schema)\n if (schema.type === 'boolean') return this.renderBoolean(schema)\n if (schema.type === 'null') return this.renderNull(schema)\n if (schema.type === 'integer') return this.renderInteger(schema)\n\n return 'unknown'\n }\n\n\n private renderMixed(schema: MixedSchemaObject): string {\n if (Array.isArray(schema.type)) {\n return schema.type\n .map((type): (OpenAPIV3_1.ArraySchemaObject | OpenAPIV3_1.NonArraySchemaObject) => ({ ...schema, type }))\n .map((schema) => this.renderSchema(schema))\n .join(' | ')\n }\n\n return 'unknown'\n }\n\n private renderReference(schema: OpenAPIV3_1.ReferenceObject): string {\n if (!this.options.referenceTransformer) {\n return ReferenceTransformer.toDeclaration(schema)\n }\n\n return this.options.referenceTransformer(schema)\n }\n\n private renderArray(schema: OpenAPIV3_1.ArraySchemaObject): string {\n if (schema.items && Array.isArray(schema.items)) {\n const items = schema.items.map((s) => this.renderSchema(s)).join(', ')\n return `[${items}]`\n }\n\n if (schema.items && typeof schema.items === 'object') {\n return `${this.renderSchema(schema.items)}[]`\n }\n\n return 'any[]'\n }\n\n\n private renderObject(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n const hasProperties = schema.properties && !R.isEmpty(schema.properties)\n\n const apType = this.options.additionalPropertiesType ?? 'unknown'\n\n // No named properties: produce Record<K, V> forms\n if (!hasProperties) {\n if (schema.additionalProperties === false) {\n return 'Record<string, never>'\n }\n\n if (typeof schema.additionalProperties === 'object') {\n return `Record<string, ${this.renderSchema(schema.additionalProperties)}>`\n }\n\n // additionalProperties true or undefined (implicit open object per OpenAPI 3.1 spec)\n return `Record<string, ${apType}>`\n }\n\n // Has named properties: render as object literal\n const $properties = Object.entries(schema.properties || {})\n .map(([propertyName, propertySchema]) => {\n let $comment = new CommentRenderer(propertySchema).render()\n if ($comment) $comment += '\\n'\n\n const $key = `\"${propertyName}\"${schema.required?.includes(propertyName) ? '' : '?'}`\n const $value = this.renderSchema(propertySchema)\n\n return indent(2, `${$comment}${$key}: ${$value}`)\n })\n\n // Add index signature when additionalProperties is not false\n if (schema.additionalProperties !== false) {\n if (typeof schema.additionalProperties === 'object') {\n $properties.push(indent(2, `[key: string]: ${this.renderSchema(schema.additionalProperties)}`))\n } else {\n // additionalProperties true or undefined (implicit open object per OpenAPI 3.1 spec)\n $properties.push(indent(2, `[key: string]: ${apType}`))\n }\n }\n\n return [\n '{',\n ...$properties,\n '}',\n ].join('\\n')\n }\n\n private renderOneOf(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (!schema.oneOf) return 'unknown'\n\n return schema.oneOf.map((s) => this.renderSchema(s)).join(' | ')\n }\n\n private renderAnyOf(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (!schema.anyOf) return 'unknown'\n\n return schema.anyOf.map((s) => this.renderSchema(s)).join(' | ')\n }\n\n private renderAllOf(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (!schema.allOf) return 'unknown'\n\n return schema.allOf.map((s) => this.renderSchema(s)).join(' & ')\n }\n\n private renderEnum(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (!schema.enum) return 'unknown'\n return `(${schema.enum.map((v) => JSON.stringify(v)).join(' | ')})`\n }\n\n private renderString(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (schema.contentMediaType === 'application/octet-stream') return 'Blob | Buffer'\n if (schema.format === 'binary') return 'Blob | Buffer'\n return 'string'\n }\n\n private renderNumber(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n return 'number'\n }\n\n private renderBoolean(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n return 'boolean'\n }\n\n private renderNull(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n return 'null'\n }\n\n private renderInteger(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n return 'number'\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'\nimport { indent } from '~/utils/indent.js'\nimport { CommentRenderer } from './comment.renderer.js'\nimport { ReferenceTransformer } from './reference.transformer.js'\nimport { Renderer } from '../types/renderer.js'\n\n\nexport interface JsonSchemaValibotRendererOptions {\n /**\n * Custom renderer for `$ref` reference objects in Valibot schema generation.\n *\n * When not provided, defaults to `ReferenceTransformer.toDeclaration` with a `Schema` suffix appended.\n *\n * @example\n * // Default behavior (without referenceTransformer):\n * // { $ref: '#/components/schemas/User' } → 'UserSchema'\n *\n * @example\n * // Custom transformer with alias mapping:\n * // Given aliases = { '#/components/schemas/User': 'UserV2Schema' }\n * // { $ref: '#/components/schemas/User' } → 'UserV2Schema'\n * const renderer = new ValibotRenderer(schema, {\n * referenceTransformer: (ref) => aliases.get(ref.$ref) ?? `${ReferenceTransformer.toDeclaration(ref)}Schema`,\n * })\n */\n referenceTransformer?: (schema: OpenAPIV3_1.ReferenceObject) => string\n\n /**\n * Controls how `additionalProperties: true` (or undefined) is rendered.\n * @default 'unknown'\n */\n additionalPropertiesType?: 'unknown' | 'any'\n}\n\nexport class ValibotRenderer implements Renderer {\n constructor(\n private readonly schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject,\n private readonly options: JsonSchemaValibotRendererOptions = {},\n ) {\n }\n\n render(): string {\n return this.renderSchema(this.schema)\n }\n\n private renderSchema(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): string {\n if (typeof schema === 'boolean') return 'v.unknown()'\n\n if (JsonSchemaUtils.isRef(schema)) return this.renderReference(schema)\n if (JsonSchemaUtils.isMixed(schema)) return this.renderMixed(schema)\n if (JsonSchemaUtils.isArray(schema)) return this.renderArray(schema)\n\n if (schema.type === 'object') return this.renderObject(schema)\n if (schema.enum) return this.renderEnum(schema)\n if (schema.oneOf) return this.renderOneOf(schema)\n if (schema.anyOf) return this.renderAnyOf(schema)\n if (schema.allOf) return this.renderAllOf(schema)\n if (schema.type === 'string') return this.renderString(schema)\n if (schema.type === 'number') return this.renderNumber(schema)\n if (schema.type === 'boolean') return this.renderBoolean(schema)\n if (schema.type === 'null') return this.renderNull(schema)\n if (schema.type === 'integer') return this.renderInteger(schema)\n\n return 'v.unknown()'\n }\n\n\n private renderMixed(schema: MixedSchemaObject): string {\n if (Array.isArray(schema.type)) {\n const schemas = schema.type\n .map((type): (OpenAPIV3_1.ArraySchemaObject | OpenAPIV3_1.NonArraySchemaObject) => ({ ...schema, type }))\n .map((schema) => this.renderSchema(schema))\n\n return `v.union([${schemas.join(', ')}])`\n }\n\n return 'v.unknown()'\n }\n\n private renderReference(schema: OpenAPIV3_1.ReferenceObject): string {\n if (!this.options.referenceTransformer) {\n return ReferenceTransformer.toDeclaration(schema, (name) => `${name}Schema`)\n }\n\n return this.options.referenceTransformer(schema)\n }\n\n private renderArray(schema: OpenAPIV3_1.ArraySchemaObject): string {\n let result: string\n\n if (schema.items && Array.isArray(schema.items)) {\n const items = schema.items.map((s) => this.renderSchema(s)).join(', ')\n result = `v.tuple([${items}])`\n } else if (schema.items && typeof schema.items === 'object') {\n result = `v.array(${this.renderSchema(schema.items)})`\n } else {\n result = 'v.array(v.any())'\n }\n\n // Add array length constraints using pipe\n const constraints: string[] = []\n if (schema.minItems !== undefined) {\n constraints.push(`v.minLength(${schema.minItems})`)\n }\n if (schema.maxItems !== undefined) {\n constraints.push(`v.maxLength(${schema.maxItems})`)\n }\n\n if (constraints.length > 0) {\n result = `v.pipe(${result}, ${constraints.join(', ')})`\n }\n\n return result\n }\n\n\n private renderObject(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n const hasProperties = schema.properties && !R.isEmpty(schema.properties)\n\n const apType = this.options.additionalPropertiesType ?? 'unknown'\n\n // No named properties: produce v.record or v.object({}) forms\n if (!hasProperties) {\n if (schema.additionalProperties === false) {\n return 'v.object({})'\n }\n\n if (typeof schema.additionalProperties === 'object') {\n return `v.record(v.string(), ${this.renderSchema(schema.additionalProperties)})`\n }\n\n // additionalProperties true or undefined (implicit open object per OpenAPI 3.1 spec)\n return `v.record(v.string(), v.${apType}())`\n }\n\n // Has named properties\n const $properties = Object.entries(schema.properties || {})\n .map(([propertyName, propertySchema]) => {\n let $comment = new CommentRenderer(propertySchema).render()\n if ($comment) $comment += '\\n'\n\n const $key = `\"${propertyName}\"`\n let $value = this.renderSchema(propertySchema)\n\n if (!schema.required?.includes(propertyName)) {\n $value = `v.optional(${$value})`\n }\n\n return indent(2, `${$comment}${$key}: ${$value},`)\n })\n\n let result = [\n 'v.object({',\n ...$properties,\n '})',\n ].join('\\n')\n\n // Handle additionalProperties when properties exist\n if (schema.additionalProperties !== false) {\n if (typeof schema.additionalProperties === 'object') {\n const $value = this.renderSchema(schema.additionalProperties)\n result = `v.intersect([${result}, v.record(v.string(), ${$value})])`\n } else {\n // undefined or true: use looseObject\n result = result.replace('v.object({', 'v.looseObject({')\n }\n }\n\n return result\n }\n\n private renderOneOf(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (!schema.oneOf) return 'v.unknown()'\n\n const schemas = schema.oneOf.map((s) => this.renderSchema(s))\n return `v.union([${schemas.join(', ')}])`\n }\n\n private renderAnyOf(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (!schema.anyOf) return 'v.unknown()'\n\n const schemas = schema.anyOf.map((s) => this.renderSchema(s))\n return `v.union([${schemas.join(', ')}])`\n }\n\n private renderAllOf(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (!schema.allOf || schema.allOf.length === 0) return 'v.unknown()'\n\n const schemas = schema.allOf.map((s) => this.renderSchema(s))\n\n // Valibot uses v.intersect with an array of schemas\n return `v.intersect([${schemas.join(', ')}])`\n }\n\n private renderEnum(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (!schema.enum || schema.enum.length === 0) return 'v.unknown()'\n\n // For single value, use literal\n if (schema.enum.length === 1) {\n return `v.literal(${JSON.stringify(schema.enum[0])})`\n }\n\n // For multiple values of the same type, use v.picklist for strings or v.union of literals for mixed types\n const allStrings = schema.enum.every((v) => typeof v === 'string')\n\n if (allStrings) {\n const values = schema.enum.map((v) => JSON.stringify(v)).join(', ')\n return `v.picklist([${values}])`\n }\n\n // Mixed types: use union of literals\n const literals = schema.enum.map((v) => `v.literal(${JSON.stringify(v)})`)\n return `v.union([${literals.join(', ')}])`\n }\n\n private renderString(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n if (schema.contentMediaType === 'application/octet-stream') {\n return 'v.union([v.instance(Blob), v.instance(Buffer)])'\n }\n\n if (schema.format === 'binary') {\n return 'v.union([v.instance(Blob), v.instance(Buffer)])'\n }\n\n let result = 'v.string()'\n const constraints: string[] = []\n\n // Add format validations\n if (schema.format === 'email') {\n constraints.push('v.email()')\n } else if (schema.format === 'uri' || schema.format === 'url') {\n constraints.push('v.url()')\n } else if (schema.format === 'uuid') {\n constraints.push('v.uuid()')\n } else if (schema.format === 'date-time') {\n constraints.push('v.isoDateTime()')\n } else if (schema.format === 'date') {\n constraints.push('v.isoDate()')\n } else if (schema.format === 'time') {\n constraints.push('v.isoTime()')\n }\n\n // Add length constraints\n if (schema.minLength !== undefined) {\n constraints.push(`v.minLength(${schema.minLength})`)\n }\n if (schema.maxLength !== undefined) {\n constraints.push(`v.maxLength(${schema.maxLength})`)\n }\n\n // Add pattern validation\n if (schema.pattern) {\n const escapedPattern = schema.pattern.replace(/\\\\/g, '\\\\\\\\')\n constraints.push(`v.regex(/${escapedPattern}/)`)\n }\n\n if (constraints.length > 0) {\n result = `v.pipe(${result}, ${constraints.join(', ')})`\n }\n\n return result\n }\n\n private renderNumber(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n let result = 'v.number()'\n const constraints: string[] = []\n\n // Add numeric constraints\n if (schema.minimum !== undefined) {\n if (schema.exclusiveMinimum) {\n constraints.push(`v.minValue(${schema.minimum + Number.EPSILON})`)\n } else {\n constraints.push(`v.minValue(${schema.minimum})`)\n }\n }\n if (schema.maximum !== undefined) {\n if (schema.exclusiveMaximum) {\n constraints.push(`v.maxValue(${schema.maximum - Number.EPSILON})`)\n } else {\n constraints.push(`v.maxValue(${schema.maximum})`)\n }\n }\n\n // Add multipleOf constraint\n if (schema.multipleOf !== undefined) {\n constraints.push(`v.multipleOf(${schema.multipleOf})`)\n }\n\n if (constraints.length > 0) {\n result = `v.pipe(${result}, ${constraints.join(', ')})`\n }\n\n return result\n }\n\n private renderBoolean(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n return 'v.boolean()'\n }\n\n private renderNull(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n return 'v.null()'\n }\n\n private renderInteger(schema: OpenAPIV3_1.NonArraySchemaObject): string {\n let result = 'v.number()'\n const constraints: string[] = ['v.integer()']\n\n // Add numeric constraints\n if (schema.minimum !== undefined) {\n if (schema.exclusiveMinimum) {\n constraints.push(`v.minValue(${schema.minimum + 1})`)\n } else {\n constraints.push(`v.minValue(${schema.minimum})`)\n }\n }\n if (schema.maximum !== undefined) {\n if (schema.exclusiveMaximum) {\n constraints.push(`v.maxValue(${schema.maximum - 1})`)\n } else {\n constraints.push(`v.maxValue(${schema.maximum})`)\n }\n }\n\n // Add multipleOf constraint\n if (schema.multipleOf !== undefined) {\n constraints.push(`v.multipleOf(${schema.multipleOf})`)\n }\n\n result = `v.pipe(${result}, ${constraints.join(', ')})`\n\n return result\n }\n}\n","import { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { CommentRenderer } from './comment.renderer.js'\nimport { DeclarationRenderer, JsonSchemaDeclarationRendererOptions } from './declaration.renderer.js'\nimport { ValibotRenderer, JsonSchemaValibotRendererOptions } from './valibot.renderer.js'\n\n\nexport class JsonSchemaTransformer {\n static toComment(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject): string {\n return new CommentRenderer(schema).render()\n }\n\n static toDeclaration(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject, options?: JsonSchemaDeclarationRendererOptions): string {\n return new DeclarationRenderer(schema, options).render()\n }\n\n static toValibot(schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject, options?: JsonSchemaValibotRendererOptions): string {\n return new ValibotRenderer(schema, options).render()\n }\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { SchemaDefinition } from '~/models/index.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { JsonSchemaTransformer, ReferenceTransformer } from '../json-schema/index.js'\n\n\ninterface SchemaDefinitionDeclarationRendererOptions {\n esm?: boolean\n additionalPropertiesType?: 'unknown' | 'any'\n\n getDependentSchemaDefinitionFilepath: (schemaDefinition: SchemaDefinition) => string\n}\n\ninterface SchemaDefinitionValibotRendererOptions {\n esm?: boolean\n additionalPropertiesType?: 'unknown' | 'any'\n\n getDependentSchemaDefinitionFilepath: (schemaDefinition: SchemaDefinition) => string\n}\n\nexport class SchemaDefinitionTransformer {\n static toDeclaration(schemaDefinition: SchemaDefinition, options: SchemaDefinitionDeclarationRendererOptions): string {\n const hint = `Referenced from schema definition \"${schemaDefinition.name}\".`\n const referenceTransformer = (schema: OpenAPIV3_1.ReferenceObject): string => {\n if (!schema.$ref || !schema.$ref.startsWith('#')) {\n return ReferenceTransformer.toInvalidDeclaration(schema, hint)\n }\n\n if (!schemaDefinition.document.isRefDefined(schema.$ref)) {\n return ReferenceTransformer.toNotFoundDeclaration(schema, hint)\n }\n\n return ReferenceTransformer.toDeclaration(schema)\n }\n\n const dependencies = schemaDefinition.getDependencies()\n let $dependencies = dependencies\n .filter((dep) => !SchemaDefinition.isUnknown(dep))\n .map((dep) => {\n const filepath = options.getDependentSchemaDefinitionFilepath(dep)\n return `import type { ${dep.name} } from \"${filepath}\"`\n })\n .map((str) => str.replace(/ from \"(\\.\\.?\\/.+?)(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?\"/, options.esm ? ' from \"$1.js\"' : ' from \"$1\"'))\n .join('\\n')\n\n if ($dependencies) $dependencies += '\\n'\n\n let $comment = JsonSchemaTransformer.toComment(schemaDefinition.schema)\n if ($comment) $comment += '\\n'\n\n if (typeof schemaDefinition.schema === 'boolean') {\n return [\n '/* @anchor:file:start */',\n '',\n $dependencies,\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 const $schema = JsonSchemaTransformer.toDeclaration(schemaDefinition.schema, { referenceTransformer, additionalPropertiesType: options.additionalPropertiesType })\n\n const $declaration = $schema.startsWith('{')\n ? `export interface ${schemaDefinition.name} ${$schema}`\n : `export type ${schemaDefinition.name} = ${$schema}`\n\n return [\n '/* @anchor:file:start */',\n '',\n $dependencies,\n $comment || undefined,\n $declaration,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n\n return [\n '/* @anchor:file:start */',\n '',\n $dependencies,\n $comment || undefined,\n `export type ${schemaDefinition.name} = ${JsonSchemaTransformer.toDeclaration(schemaDefinition.schema, { referenceTransformer, additionalPropertiesType: options.additionalPropertiesType })}`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n\n static toValibot(schemaDefinition: SchemaDefinition, options: SchemaDefinitionValibotRendererOptions): string {\n const hint = `Referenced from schema definition \"${schemaDefinition.name}\".`\n const referenceTransformer = (schema: OpenAPIV3_1.ReferenceObject): string => {\n if (!schema.$ref || !schema.$ref.startsWith('#')) {\n const base = ReferenceTransformer.toInvalidDeclaration(schema, hint)\n return base.replace(/^unknown/, 'v.unknown()')\n }\n\n if (!schemaDefinition.document.isRefDefined(schema.$ref)) {\n const base = ReferenceTransformer.toNotFoundDeclaration(schema, hint)\n return base.replace(/^unknown/, 'v.unknown()')\n }\n\n const schemaVarName = ReferenceTransformer.toDeclaration(schema, (name) => `${name}Schema`)\n return `v.lazy(() => ${schemaVarName})`\n }\n\n const declarationReferenceTransformer = (schema: OpenAPIV3_1.ReferenceObject): string => {\n if (!schema.$ref || !schema.$ref.startsWith('#')) {\n return ReferenceTransformer.toInvalidDeclaration(schema, hint)\n }\n\n if (!schemaDefinition.document.isRefDefined(schema.$ref)) {\n return ReferenceTransformer.toNotFoundDeclaration(schema, hint)\n }\n\n return ReferenceTransformer.toDeclaration(schema)\n }\n\n const dependencies = schemaDefinition.getDependencies()\n let $dependencies = dependencies\n .filter((dep) => !SchemaDefinition.isUnknown(dep))\n .map((dep) => {\n const filepath = options.getDependentSchemaDefinitionFilepath(dep)\n return `import { type ${dep.name}, ${dep.name}Schema } from \"${filepath}\"`\n })\n .map((str) => str.replace(/ from \"(\\.\\.?\\/.+?)(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?\"/, options.esm ? ' from \"$1.js\"' : ' from \"$1\"'))\n .join('\\n')\n\n if ($dependencies) $dependencies += '\\n'\n\n let $comment = JsonSchemaTransformer.toComment(schemaDefinition.schema)\n if ($comment) $comment += '\\n'\n\n // Add valibot import\n const $valibotImport = 'import * as v from \\'valibot\\'\\n'\n\n if (typeof schemaDefinition.schema === 'boolean') {\n return [\n '/* @anchor:file:start */',\n '',\n $valibotImport,\n $dependencies,\n $comment || undefined,\n `export const ${schemaDefinition.name}Schema = v.unknown()`,\n `export type ${schemaDefinition.name} = v.InferOutput<typeof ${schemaDefinition.name}Schema>`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n\n const $schema = JsonSchemaTransformer.toValibot(schemaDefinition.schema, { referenceTransformer, additionalPropertiesType: options.additionalPropertiesType })\n\n const $typeSchema = JsonSchemaTransformer.toDeclaration(schemaDefinition.schema, { referenceTransformer: declarationReferenceTransformer, additionalPropertiesType: options.additionalPropertiesType })\n const $typeDeclaration = $typeSchema.startsWith('{')\n ? `export interface ${schemaDefinition.name} ${$typeSchema}`\n : `export type ${schemaDefinition.name} = ${$typeSchema}`\n\n return [\n '/* @anchor:file:start */',\n '',\n $valibotImport,\n $dependencies,\n $comment || undefined,\n $typeDeclaration,\n `export const ${schemaDefinition.name}Schema: v.GenericSchema<${schemaDefinition.name}> = ${$schema}`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n}\n","export type AliasCategory = 'schema' | 'response'\n\n/**\n * Manages import alias naming with collision detection for generated TypeScript files.\n *\n * When generating `import type { X as XSchema }` statements, the alias (e.g., `XSchema`)\n * may collide with fixed names already present in the generated file (e.g., the file's own\n * `export type` name). This class tracks all used names and automatically falls back to\n * numbered suffixes (e.g., `XSchema$1`) when a collision is detected.\n *\n * Usage: call `register()` during import generation, then `resolve()` in referenceTransformer.\n * `register()` must always be called before `resolve()` for the same dependency, because\n * the first `register()` call determines the alias name.\n */\nexport class ImportAliasManager {\n /** \"category:originalName\" → alias */\n private aliasMap = new Map<string, string>()\n /** All alias names + reserved names currently in use */\n private usedNames = new Set<string>()\n\n /**\n * @param reservedNames - Fixed names in the generated file that aliases must not collide with.\n * For example, the file's own export type name.\n */\n constructor(reservedNames: Iterable<string> = []) {\n for (const name of reservedNames) {\n this.usedNames.add(name)\n }\n }\n\n /**\n * Register a dependency and return its alias. Idempotent — calling with the same\n * category + originalName always returns the same alias.\n */\n register(category: AliasCategory, originalName: string): string {\n const key = `${category}:${originalName}`\n const existing = this.aliasMap.get(key)\n if (existing) return existing\n\n const suffix = category === 'schema' ? 'Schema' : 'Response'\n let candidate = `${originalName}${suffix}`\n\n if (this.usedNames.has(candidate)) {\n let i = 1\n while (this.usedNames.has(`${candidate}$${i}`)) {\n i++\n }\n candidate = `${candidate}$${i}`\n }\n\n this.aliasMap.set(key, candidate)\n this.usedNames.add(candidate)\n return candidate\n }\n\n /**\n * Look up alias for an already-registered dependency.\n * Returns undefined if not yet registered.\n */\n resolve(category: AliasCategory, originalName: string): string | undefined {\n return this.aliasMap.get(`${category}:${originalName}`)\n }\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { ResponseDefinition } from '~/models/index.js'\nimport { SchemaDefinition } from '~/models/index.js'\nimport { ImportAliasManager } from '~/utils/import-alias-manager.js'\nimport { JsonSchemaTransformer, ReferenceTransformer } from '../json-schema/index.js'\n\n\ninterface ResponseDefinitionDeclarationRendererOptions {\n esm?: boolean\n additionalPropertiesType?: 'unknown' | 'any'\n\n getDependentSchemaDefinitionFilepath: (schemaDefinition: SchemaDefinition) => string\n}\n\nexport class ResponseDefinitionTransformer {\n static toDeclaration(responseDefinition: ResponseDefinition, options: ResponseDefinitionDeclarationRendererOptions): string {\n const hint = `Referenced from response definition \"${responseDefinition.name}\".`\n const aliasManager = new ImportAliasManager([responseDefinition.name])\n\n // NOTE: Import generation (register) must run BEFORE referenceTransformer (resolve),\n // because the first register() call determines each alias name.\n const dependencies = responseDefinition.getDependencies()\n .filter((dep) => !SchemaDefinition.isUnknown(dep))\n\n let $dependencies = dependencies\n .map((dep) => {\n const filepath = options.getDependentSchemaDefinitionFilepath(dep)\n return `import type { ${dep.name} as ${aliasManager.register('schema', dep.name)} } from \"${filepath}\"`\n })\n .map((str) => str.replace(/ from \"(\\.\\.?\\/.+?)(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?\"/, options.esm ? ' from \"$1.js\"' : ' from \"$1\"'))\n .join('\\n')\n\n if ($dependencies) $dependencies += '\\n'\n\n const referenceTransformer = (schema: OpenAPIV3_1.ReferenceObject): string => {\n if (!schema.$ref || !schema.$ref.startsWith('#')) {\n return ReferenceTransformer.toInvalidDeclaration(schema, hint)\n }\n\n if (!responseDefinition.document.isRefDefined(schema.$ref)) {\n return ReferenceTransformer.toNotFoundDeclaration(schema, hint)\n }\n\n return ReferenceTransformer.toDeclaration(schema, (name) => aliasManager.resolve('schema', name) ?? `${name}Schema`)\n }\n\n const $type = ResponseDefinitionTransformer.renderContentType(\n responseDefinition.response,\n { referenceTransformer, additionalPropertiesType: options.additionalPropertiesType },\n )\n\n return [\n '/* @anchor:file:start */',\n '',\n $dependencies,\n `export type ${responseDefinition.name} = ${$type}`,\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n\n private static renderContentType(\n response: OpenAPIV3_1.ResponseObject,\n options: { referenceTransformer: (schema: OpenAPIV3_1.ReferenceObject) => string; additionalPropertiesType?: 'unknown' | 'any' },\n ): string {\n const content = response.content\n if (!content || R.isEmpty(content)) return 'void'\n\n const $types = Object.entries(content)\n .map(([mediaType, mediaTypeObject]) => {\n if (mediaType.includes('text/event-stream')) return 'ReadableStream<ServerSentEvent>'\n if (mediaType.includes('multipart/form-data')) return 'FormData'\n if (!mediaTypeObject.schema) return 'unknown'\n\n return JsonSchemaTransformer.toDeclaration(mediaTypeObject.schema, options)\n })\n\n return $types.join(' | ') || 'void'\n }\n}\n","import * as R from 'ramda'\nimport { OperationDefinition } from '~/models/index.js'\nimport { Renderer } from '../types/renderer.js'\n\n\nexport class CommentRenderer implements Renderer {\n constructor(\n private readonly operationDefinition: OperationDefinition,\n ) {}\n\n render(): string {\n const operation = this.operationDefinition.operation\n if (!operation.summary && !operation.description) return ''\n\n const lines = ['/**']\n\n if (operation.summary && typeof operation.summary === 'string') {\n const summary = R.trim(operation.summary)\n .replace(/\\t/g, ' ')\n .replace(/\\r\\n?/g, '\\n')\n\n lines.push(...summary.split('\\n').map((line) => ` * ${line.trimEnd()}`))\n lines.push(' *')\n }\n\n if (operation.description && typeof operation.description === 'string') {\n const description = R.trim(operation.description)\n .replace(/\\t/g, ' ')\n .replace(/\\r\\n?/g, '\\n')\n\n const descriptionLines = description.split('\\n').map((line) => line.trimEnd())\n lines.push(` * @description ${descriptionLines[0]}`)\n lines.push(...descriptionLines.slice(1).map((line) => ` * ${line}`))\n }\n\n lines.push(' */')\n\n return lines.join('\\n')\n }\n}\n","import * as changeCase from 'change-case'\nimport { OperationDefinition } from '~/models/index.js'\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","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\n\n\nconst PARAMETER_AP_SCHEMAS: Record<string, OpenAPIV3_1.SchemaObject | undefined> = {\n query: {\n oneOf: [\n { type: 'string' },\n { type: 'number' },\n { type: 'integer' },\n { type: 'null' },\n ],\n },\n path: {\n oneOf: [\n { type: 'string' },\n { type: 'number' },\n { type: 'integer' },\n { type: 'boolean' },\n { type: 'null' },\n ],\n },\n header: {\n oneOf: [\n { type: 'string' },\n { type: 'number' },\n { type: 'integer' },\n ],\n },\n}\n\n/**\n * Recursively rewrite `additionalProperties` in object schemas for parameter types.\n * When additionalProperties is `true` or `undefined`, replace it with a keq-compatible schema\n * based on the parameter location (query/path/header).\n */\nexport function rewriteAdditionalPropertiesForParameter(\n schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject,\n parameterIn: string,\n): OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject {\n if (JsonSchemaUtils.isRef(schema)) return schema\n if (typeof schema === 'boolean') return schema\n\n const replacement = PARAMETER_AP_SCHEMAS[parameterIn]\n if (!replacement) return schema\n\n const cloned = { ...schema }\n\n // Rewrite additionalProperties on object schemas\n if (cloned.type === 'object' || cloned.properties) {\n if (cloned.additionalProperties === true || cloned.additionalProperties === undefined) {\n cloned.additionalProperties = replacement\n } else if (typeof cloned.additionalProperties === 'object' && !JsonSchemaUtils.isRef(cloned.additionalProperties)) {\n cloned.additionalProperties = rewriteAdditionalPropertiesForParameter(cloned.additionalProperties, parameterIn) as OpenAPIV3_1.SchemaObject\n }\n }\n\n // Recursively handle nested properties\n if (cloned.properties) {\n cloned.properties = Object.fromEntries(\n Object.entries(cloned.properties).map(([key, value]) => [key, rewriteAdditionalPropertiesForParameter(value, parameterIn)]),\n )\n }\n\n // Recursively handle items\n if (cloned.items && typeof cloned.items === 'object' && !Array.isArray(cloned.items)) {\n cloned.items = rewriteAdditionalPropertiesForParameter(cloned.items, parameterIn) as OpenAPIV3_1.SchemaObject\n }\n\n // Recursively handle composition keywords\n for (const keyword of ['allOf', 'oneOf', 'anyOf'] as const) {\n if (cloned[keyword]) {\n cloned[keyword] = cloned[keyword].map((s) => rewriteAdditionalPropertiesForParameter(s, parameterIn))\n }\n }\n\n return cloned\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 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 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 jsonpointer from 'jsonpointer'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { JSONPath } from 'jsonpath-plus'\nimport { removeUndefinedRef } from './remove-undefined-ref.js'\nimport { dereference } from './dereference.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 = 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 = 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 responseMatches = JSONPath({\n path: '$.paths.*.*.responses.*.$ref^',\n json: swagger,\n resultType: 'all',\n })\n\n // Only dereference response refs that do NOT point to #/components/responses/\n // Preserve response-level refs so they can be reused as shared types\n for (const match of responseMatches) {\n if (match.value.$ref && !match.value.$ref.startsWith('#/components/responses/')) {\n const value = dereference(match.value.$ref, swagger)\n jsonpointer.set(swagger, match.pointer, value)\n }\n }\n\n const headerMatches = JSONPath({\n path: '$.paths.*.*.responses.*.headers.*.$ref^',\n json: swagger,\n resultType: 'all',\n })\n\n for (const match of headerMatches) {\n const value = 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 = 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 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 { upgrade } from '@scalar/openapi-parser'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\n\nexport function To3_1(openapi: object): OpenAPIV3_1.Document {\n const { specification } = upgrade(openapi)\n return specification\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { SupportedMethods } from '~/constants/supported-methods.js'\n\n\nexport type OpenapiOperationMapper = (method: string, pathname: string, operation: OpenAPIV3_1.OperationObject) => OpenAPIV3_1.OperationObject\n\n\nexport function mapOperation(specification: OpenAPIV3_1.Document, mapper: OpenapiOperationMapper): OpenAPIV3_1.Document {\n const shadow = R.clone(specification)\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 pathItem[m] = mapper(method, pathname, operation)\n }\n }\n\n return shadow\n}\n","import * as R from 'ramda'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { mapOperation } from './map-operation.js'\n\n\nexport type OpenapiParameterMapper = (method: string, pathname: string, operation: OpenAPIV3_1.OperationObject, parameter: OpenAPIV3_1.ParameterObject) => OpenAPIV3_1.ParameterObject\n\nexport function mapParameter(\n specification: OpenAPIV3_1.Document,\n mapper: OpenapiParameterMapper,\n): OpenAPIV3_1.Document {\n return mapOperation(specification, (method, pathname, operation) => {\n if (!operation.parameters) return operation\n\n operation.parameters = operation.parameters\n .map((parameter) => mapper(method, pathname, operation, parameter as OpenAPIV3_1.ParameterObject))\n\n return operation\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\n/**\n * A function that transforms a single schema object.\n * Receives a non-`$ref` schema and returns the transformed schema.\n * The mapper does NOT need to handle recursion — `mapSchema` walks the tree automatically.\n */\nexport type SchemaMapper = (schema: OpenAPIV3_1.SchemaObject) => OpenAPIV3_1.SchemaObject\n\nfunction walkSchema(\n schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject | undefined,\n mapper: SchemaMapper,\n): OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject | undefined {\n if (!schema) return schema\n if (typeof schema === 'boolean') return schema\n if ('$ref' in schema) return schema\n\n let result: OpenAPIV3_1.NonArraySchemaObject | OpenAPIV3_1.ArraySchemaObject = mapper(schema) as OpenAPIV3_1.NonArraySchemaObject | OpenAPIV3_1.ArraySchemaObject\n\n // Recursively walk nested schemas\n if (result.properties) {\n const newProperties: Record<string, OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject> = {}\n for (const [key, value] of Object.entries(result.properties)) {\n newProperties[key] = walkSchema(value, mapper) as OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject\n }\n result = Object.assign({}, result, { properties: newProperties })\n }\n\n if (typeof result.additionalProperties === 'object' && result.additionalProperties !== null && !('$ref' in result.additionalProperties)) {\n result = Object.assign({}, result, { additionalProperties: walkSchema(result.additionalProperties, mapper) as OpenAPIV3_1.SchemaObject })\n }\n\n if ('items' in result && result.items && typeof result.items === 'object' && !Array.isArray(result.items)) {\n result = Object.assign({}, result, { items: walkSchema(result.items, mapper) })\n }\n\n for (const keyword of ['allOf', 'oneOf', 'anyOf'] as const) {\n if (result[keyword]) {\n result = Object.assign({}, result, { [keyword]: result[keyword].map((s) => walkSchema(s, mapper)) })\n }\n }\n\n return result\n}\n\nfunction walkMediaTypeSchemas(\n content: Record<string, OpenAPIV3_1.MediaTypeObject> | undefined,\n mapper: SchemaMapper,\n): void {\n if (!content) return\n for (const mediaType of Object.values(content)) {\n if (mediaType.schema) {\n mediaType.schema = walkSchema(mediaType.schema, mapper) as OpenAPIV3_1.SchemaObject\n }\n }\n}\n\n/**\n * Recursively walk and transform every non-`$ref` schema in an OpenAPI 3.1 document.\n *\n * Returns a **deep clone** of the document — the original is never mutated.\n * The `mapper` is called on each `SchemaObject` (skipping `$ref` and `boolean` schemas),\n * and then `mapSchema` continues into the mapper's return value to process nested schemas\n * (`properties`, `additionalProperties`, `items`, `allOf`/`oneOf`/`anyOf`).\n *\n * Traversal covers:\n * - `components.schemas`\n * - Inline schemas in operation parameters, request bodies, and responses\n *\n * @example\n * // Set `additionalProperties: false` on every object schema that doesn't define it\n * const patched = mapSchema(doc, (schema) => {\n * if ((schema.type === 'object' || schema.properties) && schema.additionalProperties === undefined) {\n * return Object.assign({}, schema, { additionalProperties: false })\n * }\n * return schema\n * })\n *\n * @example\n * // Add a `description` fallback to all string schemas\n * const annotated = mapSchema(doc, (schema) => {\n * if (schema.type === 'string' && !schema.description) {\n * return Object.assign({}, schema, { description: 'No description provided' })\n * }\n * return schema\n * })\n */\nexport function mapSchema(specification: OpenAPIV3_1.Document, mapper: SchemaMapper): OpenAPIV3_1.Document {\n const shadow = R.clone(specification)\n\n // Walk components.schemas\n if (shadow.components?.schemas) {\n for (const [name, schema] of Object.entries(shadow.components.schemas)) {\n shadow.components.schemas[name] = walkSchema(schema, mapper) as OpenAPIV3_1.SchemaObject\n }\n }\n\n // Walk operations: parameters, requestBody, responses\n for (const [, 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\n // Walk parameter schemas\n if (operation.parameters) {\n for (const param of operation.parameters) {\n if ('$ref' in param) continue\n if (param.schema) {\n param.schema = walkSchema(param.schema, mapper) as OpenAPIV3_1.SchemaObject\n }\n }\n }\n\n // Walk request body schemas\n if (operation.requestBody && !('$ref' in operation.requestBody)) {\n walkMediaTypeSchemas(operation.requestBody.content, mapper)\n }\n\n // Walk response schemas\n if (operation.responses) {\n for (const response of Object.values(operation.responses)) {\n if ('$ref' in response) continue\n walkMediaTypeSchemas(response.content, mapper)\n }\n }\n }\n }\n\n return shadow\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 { dereferenceDeep } from './dereference-deep.js'\nimport { To3_1 } from './to-3_1.js'\nimport { mapOperation } from './map-operation.js'\nimport { mapParameter } from './map-parameter.js'\nimport { mapSchema } from './map-schema.js'\n\n\nexport class OpenapiUtils {\n static isRefDefined = isRefDefined\n static dereference = dereference\n static dereferenceDeep = dereferenceDeep\n static removeUndefinedRef = removeUndefinedRef\n static dereferenceOperation = dereferenceOperation\n static mapOperation = mapOperation\n static mapParameter = mapParameter\n static mapSchema = mapSchema\n static to3_1 = To3_1\n}\n","import * as R from 'ramda'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { OperationDefinition, ResponseDefinition, SchemaDefinition } from '~/models/index.js'\nimport { typeNameFactory, TypeNameFn } from './utils/index.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { indent } from '~/utils/indent.js'\nimport { OpenapiUtils } from '~/utils/openapi-utils/index.js'\nimport { JsonSchemaTransformer, JsonSchemaDeclarationRendererOptions, ReferenceTransformer } from '../json-schema/index.js'\nimport { Renderer } from '../types/renderer.js'\nimport { rewriteAdditionalPropertiesForParameter } from './utils/rewrite-additional-properties-for-parameter.js'\n\n\nexport interface OperationDefinitionDeclarationRendererOptions {\n esm?: boolean\n additionalPropertiesType?: 'unknown' | 'any'\n\n getDependentSchemaDefinitionFilepath(dependentSchemaDefinition: SchemaDefinition): string\n getDependentResponseDefinitionFilepath(dependentResponseDefinition: ResponseDefinition): string\n}\n\nconst alias = (name: string): string => `${name}Schema`\nconst responseAlias = (name: string): string => `${name}Response`\n\nexport class DeclarationRenderer implements Renderer {\n private typeName: TypeNameFn\n\n constructor(\n private readonly operationDefinition: OperationDefinition,\n private readonly options: OperationDefinitionDeclarationRendererOptions,\n ) {\n this.typeName = typeNameFactory(operationDefinition)\n }\n\n private renderResponseBodies(operation: OpenAPIV3_1.OperationObject, options: JsonSchemaDeclarationRendererOptions): string {\n if (!operation.responses || R.isEmpty(operation.responses)) {\n return `export interface ${this.typeName('ResponseBodies')} {}`\n }\n\n const $responses = Object.entries(operation.responses)\n .map(([statusCode, response]) => {\n if (JsonSchemaUtils.isRef(response)) {\n const refName = response.$ref.split('/').pop() || ''\n return indent(2, `${statusCode}: ${responseAlias(refName)}`)\n }\n\n const $value = Object.entries(response.content || {})\n .map(([mediaType, mediaTypeObject]) => <const>[mediaType, mediaTypeObject.schema])\n .map(([mediaType, schema]) => {\n if (mediaType.includes('text/event-stream')) return 'ReadableStream<ServerSentEvent>'\n if (mediaType.includes('multipart/form-data')) return 'FormData'\n if (!schema) return 'unknown'\n\n return JsonSchemaTransformer.toDeclaration(schema, options)\n })\n .join(' | ')\n\n return indent(2, `${statusCode}: ${$value || 'void'}`)\n })\n .join('\\n')\n\n return [\n `export interface ${this.typeName('ResponseBodies')} {`,\n $responses,\n '}',\n ].join('\\n')\n }\n\n private renderRequestBodies(operation: OpenAPIV3_1.OperationObject, options: JsonSchemaDeclarationRendererOptions): string {\n let $requestBodies = `export interface ${this.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)}: ${JsonSchemaTransformer.toDeclaration(schema, options)}`\n })\n .map((pair) => indent(2, pair))\n\n $requestBodies = [\n `export interface ${this.typeName('RequestBodies')} {`,\n ...$mediaTypes,\n '}',\n ].join('\\n')\n }\n\n return $requestBodies\n }\n\n private renderParameterBodies(operationDefinition: OperationDefinition, options: JsonSchemaDeclarationRendererOptions): 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 ? OpenapiUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(schemaOrRef.$ref, operationDefinition.document.specification)\n : schemaOrRef\n\n if (schema.type === 'object' || schema.properties) {\n return `${JSON.stringify(mediaType)}: ${JsonSchemaTransformer.toDeclaration(schemaOrRef, options)} & { [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 ${this.typeName('ParameterBodies')} {`,\n ...$mediaTypes,\n '}',\n '',\n ].join('\\n')\n }\n\n return parameterBodies\n }\n\n private renderRequestParameters(operation: OpenAPIV3_1.OperationObject, options: JsonSchemaDeclarationRendererOptions): string {\n const mediaTypes = operation.requestBody && !JsonSchemaUtils.isRef(operation.requestBody)\n ? Object.keys(operation.requestBody.content || {})\n : []\n\n const base = `${this.typeName('RequestQuery')} & ${this.typeName('RouteParameters')} & ${this.typeName('RequestHeaders')}`\n\n if (mediaTypes.length === 1) {\n return `export type ${this.typeName('RequestParameters')} = ${base} & ${this.typeName('RequestBodies')}[${JSON.stringify(mediaTypes[0])}]`\n }\n\n if (mediaTypes.length > 1) {\n const unions = mediaTypes\n .map((mediaType) => `(${base} & ${this.typeName('RequestBodies')}[${JSON.stringify(mediaType)}] & { \"content-type\": ${JSON.stringify(mediaType)} })`)\n .join('\\n| ')\n\n return `export type ${this.typeName('RequestParameters')} = ${unions}`\n }\n\n return `export type ${this.typeName('RequestParameters')} = ${base}`\n }\n\n private rendererParameters(name: string, parameters: OpenAPIV3_1.ParameterObject[], options: JsonSchemaDeclarationRendererOptions): 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 schema = parameter.schema\n ? rewriteAdditionalPropertiesForParameter(parameter.schema, parameter.in!)\n : { type: 'any' as const }\n const $value = JsonSchemaTransformer.toDeclaration(schema, options)\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\n private renderDependencies(): string {\n const schemaDefinitions = this.operationDefinition.getDependencies()\n .filter((schemaDefinition) => !SchemaDefinition.isUnknown(schemaDefinition))\n\n const $schemaDefinitions = schemaDefinitions\n .map((schemaDefinition) => {\n const filepath = this.options.getDependentSchemaDefinitionFilepath(schemaDefinition)\n const schemaName = schemaDefinition.name\n\n return `import type { ${schemaName} as ${alias(schemaName)} } from \"${filepath}\"`\n })\n .map((str) => (str.replace(/ from \"(\\.\\.?\\/.+?)(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?\"/, this.options.esm ? ' from \"$1.js\"' : ' from \"$1\"')))\n\n const responseDefinitions = this.operationDefinition.getResponseDependencies()\n .filter((responseDefinition) => !ResponseDefinition.isUnknown(responseDefinition))\n\n const $responseDefinitions = responseDefinitions\n .map((responseDefinition) => {\n const filepath = this.options.getDependentResponseDefinitionFilepath(responseDefinition)\n const responseName = responseDefinition.name\n\n return `import type { ${responseName} as ${responseAlias(responseName)} } from \"${filepath}\"`\n })\n .map((str) => (str.replace(/ from \"(\\.\\.?\\/.+?)(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?\"/, this.options.esm ? ' from \"$1.js\"' : ' from \"$1\"')))\n\n return [\n 'import type { KeqOperation, KeqPathParameterInit, KeqQueryInit, ServerSentEvent } from \"keq\"',\n ...$schemaDefinitions,\n ...$responseDefinitions,\n ].join('\\n')\n }\n\n render(): string {\n const { operation } = this.operationDefinition\n\n if (!operation.responses) return ''\n\n const hint = `Referenced from operation \"${this.operationDefinition.method.toUpperCase()} ${this.operationDefinition.pathname}\".`\n const jsonSchemaDeclarationRendererOptions: JsonSchemaDeclarationRendererOptions = {\n referenceTransformer: (schema: OpenAPIV3_1.ReferenceObject) => {\n if (schema.$ref && schema.$ref.startsWith('#') && !this.operationDefinition.document.isRefDefined(schema.$ref)) {\n return ReferenceTransformer.toNotFoundDeclaration(schema, hint)\n }\n\n return ReferenceTransformer.toDeclaration(schema, alias)\n },\n additionalPropertiesType: this.options.additionalPropertiesType,\n }\n\n const $dependencies = this.renderDependencies()\n\n const $responseBodies = this.renderResponseBodies(operation, jsonSchemaDeclarationRendererOptions)\n const $requestBodies = this.renderRequestBodies(operation, jsonSchemaDeclarationRendererOptions)\n const $parameterBodies = this.renderParameterBodies(this.operationDefinition, jsonSchemaDeclarationRendererOptions)\n const $requestParameters = this.renderRequestParameters(operation, jsonSchemaDeclarationRendererOptions)\n const $requestQuery = this.rendererParameters(\n `${this.typeName('RequestQuery')}`,\n operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'query') || [],\n jsonSchemaDeclarationRendererOptions,\n )\n const $routeParameters = this.rendererParameters(\n `${this.typeName('RouteParameters')}`,\n operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'path') || [],\n jsonSchemaDeclarationRendererOptions,\n )\n const $requestHeaders = this.rendererParameters(\n `${this.typeName('RequestHeaders')}`,\n operation.parameters?.filter((p) => !JsonSchemaUtils.isRef(p) && p.in === 'header') || [],\n jsonSchemaDeclarationRendererOptions,\n )\n\n return [\n '/* @anchor:file:start */',\n '',\n $dependencies,\n '',\n $responseBodies,\n '',\n $requestBodies,\n '',\n $requestQuery,\n '',\n $routeParameters,\n '',\n $requestHeaders,\n '',\n $parameterBodies || undefined,\n $requestParameters,\n '',\n `export interface ${this.typeName('Operation')}<STATUS extends keyof ${this.typeName('ResponseBodies')}, CONTENT_TYPE extends ${$parameterBodies ? `keyof ${this.typeName('ParameterBodies')}` : 'string'} > extends KeqOperation {`,\n ` requestParams: ${this.typeName('RouteParameters')} & { [key: string]: KeqPathParameterInit }`,\n ` requestQuery: ${this.typeName('RequestQuery')} & { [key: string]: KeqQueryInit }`,\n ` requestHeaders: ${this.typeName('RequestHeaders')} & { [key: string]: string | number }`,\n ` requestBody: ${$parameterBodies ? `${this.typeName('ParameterBodies')}[CONTENT_TYPE] | ` : 'object | '}BodyInit`,\n ` responseBody: ${this.typeName('ResponseBodies')}[STATUS]`,\n '}',\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n}\n","import * as changeCase from 'change-case'\n\n/**\n * Check if a string is a valid JavaScript/TypeScript identifier.\n */\nexport function isValidIdentifier(str: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(str)\n}\n\n/**\n * Convert a string to a valid JavaScript/TypeScript identifier.\n * If the string is already a valid identifier, return it as-is.\n * Otherwise, convert it to camelCase and ensure it starts with a valid character.\n */\nexport function toSafeIdentifier(str: string): string {\n if (isValidIdentifier(str)) return str\n\n const camelCased = changeCase.camelCase(str)\n\n if (!camelCased) {\n return `_${str.replace(/[^a-zA-Z0-9_$]/g, '_')}`\n }\n\n // camelCase may produce a string starting with a digit (e.g. \"123-get\" -> \"123Get\")\n if (/^[0-9]/.test(camelCased)) {\n return `_${camelCased}`\n }\n\n if (!isValidIdentifier(camelCased)) {\n return `_${camelCased.replace(/[^a-zA-Z0-9_$]/g, '_')}`\n }\n\n return camelCased\n}\n","import { CustomError } from 'ts-custom-error'\nimport wrap from 'word-wrap'\nimport { ModuleDefinition } from '~/models/index.js'\n\n\nexport class Exception extends CustomError {\n constructor(module: ModuleDefinition | string, message: string) {\n const moduleName = typeof module === 'string' ? module : module.name\n\n const msg = wrap(message, { width: 60, indent: ' ' })\n super(`${moduleName} module failed to compile:\\n${msg}`)\n\n Object.defineProperty(this, 'name', { value: 'KeqCLI_Exception' })\n }\n}\n","import * as R from 'ramda'\nimport { KeqQueryOptions } from 'keq'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { OperationDefinition } from '~/models/index.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { OpenapiUtils } from '~/utils/openapi-utils/index.js'\nimport { QsArrayFormat } from '~/constants/index.js'\nimport { typeNameFactory, TypeNameFn } from './utils/index.js'\n\n\nexport interface OperationDefinitionSnippetOptions {\n esm?: boolean\n}\n\nexport class OperationDefinitionSnippet {\n typeName: TypeNameFn\n\n constructor(\n private readonly operationDefinition: OperationDefinition,\n private readonly options: OperationDefinitionSnippetOptions,\n ) {\n this.typeName = typeNameFactory(operationDefinition)\n }\n\n\n private getQsParameters(parameter: OpenAPIV3_1.ParameterObject): KeqQueryOptions | undefined {\n let arrayFormat: QsArrayFormat | undefined\n let allowDots: boolean | undefined\n let indices: boolean | undefined\n\n const style = parameter.style || 'form'\n const explode = parameter.explode ?? true\n\n if ('x-qs-array-format' in parameter) {\n arrayFormat = parameter['x-qs-array-format'] as QsArrayFormat\n } else {\n if (style === 'deepObject') {\n arrayFormat = QsArrayFormat.brackets\n } else if (explode) {\n arrayFormat = QsArrayFormat.repeat\n } else {\n if (style === 'form') {\n arrayFormat = QsArrayFormat.comma\n } else if (style === 'spaceDelimited') {\n arrayFormat = QsArrayFormat.space\n } else if (style === 'pipeDelimited') {\n arrayFormat = QsArrayFormat.pipe\n }\n }\n }\n\n if ('x-qs-allow-dots' in parameter) {\n allowDots = Boolean(parameter['x-qs-allow-dots'])\n }\n\n if ('x-qs-indices' in parameter) {\n indices = Boolean(parameter['x-qs-indices'])\n }\n\n\n if (arrayFormat || allowDots !== undefined || indices !== undefined) {\n return {\n ...(arrayFormat ? { arrayFormat } : {}),\n ...(allowDots !== undefined ? { allowDots } : {}),\n ...(indices !== undefined ? { indices } : {}),\n }\n }\n\n return undefined\n }\n\n\n // render: \"if (args && 'Authorization' in args) req.header('Authorization', args['Authorization'])\"\n renderRequestHeaders(): string {\n const { operation } = this.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 .join('\\n')\n\n return $headers\n }\n\n // render: \"if (args && 'id' in args) req.query('id', args['id'], options)\"\n renderRequestQuery(): string {\n const { operation } = this.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 = this.getQsParameters(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 .join('\\n')\n\n return $query\n }\n\n // render: \"if (args && 'id' in args) req.params('id', args['id'])\"\n renderRequestPathParameters(): string {\n const { operation } = this.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 .join('\\n')\n\n return $pathParameters\n }\n\n getRequestMediaTypes(): string[] {\n const { operation } = this.operationDefinition\n const requestBodyContent = (operation.requestBody?.content || {}) as Record<string, OpenAPIV3_1.MediaTypeObject>\n return Object.keys(requestBodyContent)\n }\n\n // render \"req.type(\"application/json\")\"\n renderMediaType(): string {\n const mediaTypes = this.getRequestMediaTypes()\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\n\n // render body\n\n private requestBodyFormDataPropertyRenderer(\n propertyName: string,\n propertySchema: OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject,\n mediaType: string,\n ): string {\n try {\n const $propertyName = JSON.stringify(propertyName)\n\n const schema = JsonSchemaUtils.isRef(propertySchema)\n ? OpenapiUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(propertySchema.$ref, this.operationDefinition.document.specification)\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 this.renderErrorComment(err, mediaType)\n }\n }\n\n private requestBodyPropertyRenderer(\n propertyName: string,\n propertySchema: OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.SchemaObject,\n mediaType: string,\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 this.requestBodyFormDataPropertyRenderer(propertyName, propertySchema, mediaType)\n } else {\n throw new Error(`Unsupported media type: ${mediaType}`)\n }\n }\n\n renderRequestBody(): string {\n const { operation } = this.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 ? OpenapiUtils.dereferenceDeep<OpenAPIV3_1.SchemaObject>(mediaTypeObject.schema.$ref, this.operationDefinition.document.specification)\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]) => this.requestBodyPropertyRenderer(propertyName, propertySchema, mediaType))\n .join('\\n')\n } catch (err) {\n return this.renderErrorComment(err, mediaType)\n }\n })\n .filter(R.isNotNil)\n .join('\\n')\n\n return $requestBody\n }\n\n private renderErrorComment(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}\n","import * as R from 'ramda'\nimport { OperationDefinition } from '~/models/index.js'\nimport { Renderer } from '../types/renderer.js'\nimport { typeNameFactory, TypeNameFn } from './utils/index.js'\nimport { indent } from '~/utils/indent.js'\nimport { toSafeIdentifier } from '~/utils/to-safe-identifier.js'\nimport { Exception } from '~/exception.js'\nimport { CommentRenderer } from './comment.renderer.js'\nimport { OperationDefinitionSnippet, OperationDefinitionSnippetOptions } from './typescript-snippet.js'\n\n\nexport interface OperationDefinitionMicroFunctionRendererOptions extends OperationDefinitionSnippetOptions {\n getOperationDefinitionDeclarationFilepath(operationDefinition: OperationDefinition): string\n getRequestFilepath(): string\n}\n\nexport class OperationDefinitionMicroFunctionRenderer implements Renderer {\n helper: OperationDefinitionSnippet\n typeName: TypeNameFn\n\n constructor(\n private readonly operationDefinition: OperationDefinition,\n private readonly options: OperationDefinitionMicroFunctionRendererOptions,\n ) {\n this.typeName = typeNameFactory(operationDefinition)\n this.helper = new OperationDefinitionSnippet(operationDefinition, options)\n }\n\n private get operationId(): string {\n return toSafeIdentifier(this.operationDefinition.operationId)\n }\n\n render(): string {\n const { operation, method, pathname } = this.operationDefinition\n if (!operation.responses) return ''\n\n const operationId = this.operationId\n\n const $dependencies = this.renderDependencies()\n const $comment = new CommentRenderer(this.operationDefinition).render()\n\n const $method = method.toLowerCase()\n const $queryParameters = this.helper.renderRequestQuery()\n const $headerParameters = this.helper.renderRequestHeaders()\n const $pathParameters = this.helper.renderRequestPathParameters()\n\n const $mediaType = this.helper.renderMediaType()\n\n const $requestBody = this.helper.renderRequestBody()\n\n const $operationDeclaration = this.renderOperationDeclaration()\n\n return [\n '/* @anchor:file:start */',\n '',\n $dependencies,\n '',\n `const method = \"${method}\"`,\n `const pathname = \"${pathname}\"`,\n '',\n $comment || undefined,\n `export ${$operationDeclaration} {`,\n ` const req = request.${$method}<${this.typeName('ResponseBodies')}[STATUS]>(\"${pathname}\")`,\n '',\n $mediaType ? indent(2, $mediaType) : undefined,\n ' /* @anchor:query:start */',\n $queryParameters ? indent(2, $queryParameters) : undefined,\n ' /* @anchor:query:end */',\n '',\n ' /* @anchor:headers:start */',\n $headerParameters ? indent(2, $headerParameters) : undefined,\n ' /* @anchor:headers:end */',\n '',\n ' /* @anchor:path-parameters:start */',\n $pathParameters ? indent(2, $pathParameters) : undefined,\n ' /* @anchor:path-parameters:end */',\n '',\n ' /* @anchor:body:start */',\n $requestBody ? indent(2, $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\n private renderDependencies(): string {\n const declarationFilepath = this.options.getOperationDefinitionDeclarationFilepath(this.operationDefinition)\n const requestFilepath = this.options.getRequestFilepath()\n\n return [\n 'import { Keq } from \"keq\"',\n `import { request } from \"${requestFilepath}\"`,\n `import type { ${this.typeName('Operation')}, ${this.typeName('ResponseBodies')}, ${this.typeName('RequestParameters')} } from \"${declarationFilepath}\"`,\n `export type { ${this.typeName('RequestQuery')}, ${this.typeName('RequestHeaders')}, ${this.typeName('RequestBodies')} } from \"${declarationFilepath}\"`,\n ]\n .map((str) => (str.replace(/ from \"(\\.\\.?\\/.+?)(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?\"/, this.options.esm ? ' from \"$1.js\"' : ' from \"$1\"')))\n .join('\\n')\n }\n\n private renderOperationDeclaration(): string {\n const operationId = this.operationId\n\n const mediaTypes = this.helper.getRequestMediaTypes()\n\n if (mediaTypes.length === 0) {\n return `function ${operationId}<STATUS extends keyof ${this.typeName('ResponseBodies')}, CONTENT_TYPE extends never = never>(args?: ${this.typeName('RequestParameters')}): Keq<${this.typeName('Operation')}<STATUS, CONTENT_TYPE>>`\n } else if (mediaTypes.length === 1) {\n return `function ${operationId}<STATUS extends keyof ${this.typeName('ResponseBodies')}, CONTENT_TYPE extends ${JSON.stringify(mediaTypes[0])} = ${JSON.stringify(mediaTypes[0])}>(args?: ${this.typeName('RequestParameters')}): Keq<${this.typeName('Operation')}<STATUS, CONTENT_TYPE>>`\n } else if (mediaTypes.length > 1) {\n return `function ${operationId}<STATUS extends keyof ${this.typeName('ResponseBodies')}, CONTENT_TYPE extends ${this.typeName('RequestParameters')}[\"content-type\"]>(args?: Extract<${this.typeName('RequestParameters')}, { \"content-type\": CONTENT_TYPE }>): Keq<${this.typeName('Operation')}<STATUS, CONTENT_TYPE>>`\n }\n\n throw new Exception(this.operationDefinition.module, '[operationDeclarationRenderer] Unreachable')\n }\n}\n","import * as R from 'ramda'\nimport { TypeNameFn, typeNameFactory } from './utils/index.js'\nimport { OperationDefinition } from '~/models/index.js'\nimport { OperationDefinitionSnippet, OperationDefinitionSnippetOptions } from './typescript-snippet.js'\nimport { CommentRenderer } from './comment.renderer.js'\nimport { indent } from '~/utils/indent.js'\nimport { toSafeIdentifier } from '~/utils/to-safe-identifier.js'\nimport { Renderer } from '../types/renderer.js'\nimport { Exception } from '~/exception.js'\n\n\nexport type OperationDefinitionNestjsMethodRendererOptions = OperationDefinitionSnippetOptions\n\nexport class OperationDefinitionNestjsMethodRenderer implements Renderer {\n helper: OperationDefinitionSnippet\n typeName: TypeNameFn\n\n constructor(\n private readonly operationDefinition: OperationDefinition,\n private readonly options: OperationDefinitionNestjsMethodRendererOptions,\n ) {\n this.typeName = typeNameFactory(operationDefinition)\n this.helper = new OperationDefinitionSnippet(operationDefinition, options)\n }\n\n private get operationId(): string {\n return toSafeIdentifier(this.operationDefinition.operationId)\n }\n\n render(): string {\n const pathname = this.operationDefinition.pathname\n\n const $comment = new CommentRenderer(this.operationDefinition).render()\n const $method = this.operationDefinition.method.toLowerCase()\n const $mediaType = this.helper.renderMediaType()\n const $operationDeclaration = this.renderOperationDeclaration(this.operationDefinition)\n const $queryParameters = this.helper.renderRequestQuery()\n const $headerParameters = this.helper.renderRequestHeaders()\n const $pathParameters = this.helper.renderRequestPathParameters()\n const $requestBody = this.helper.renderRequestBody()\n\n return [\n $comment,\n `${$operationDeclaration} {`,\n ` const req = this.request.${$method}<${this.typeName('ResponseBodies')}[STATUS]>(${JSON.stringify(pathname)})`,\n '',\n $mediaType ? indent(2, $mediaType) : undefined,\n '',\n ' /* @anchor:query:start */',\n $queryParameters ? indent(2, $queryParameters) : undefined,\n ' /* @anchor:query:end */',\n '',\n ' /* @anchor:headers:start */',\n $headerParameters ? indent(2, $headerParameters) : undefined,\n ' /* @anchor:headers:end */',\n '',\n ' /* @anchor:path-parameters:start */',\n $pathParameters ? indent(2, $pathParameters) : undefined,\n ' /* @anchor:path-parameters:end */',\n '',\n ' /* @anchor:body:start */',\n $requestBody ? indent(2, $requestBody) : undefined,\n ' /* @anchor:body:end */',\n '',\n ' return req',\n '}',\n ].filter(R.isNotNil).join('\\n')\n }\n\n private renderOperationDeclaration(operationDefinition: OperationDefinition): string {\n const operationId = this.operationId\n const typeName = typeNameFactory(operationDefinition)\n\n const mediaTypes = this.helper.getRequestMediaTypes()\n\n if (mediaTypes.length === 0) {\n return `${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends never = never>(args?: ${typeName('RequestParameters')}): Keq<${typeName('Operation')}<STATUS, CONTENT_TYPE>>`\n } else if (mediaTypes.length === 1) {\n return `${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends ${JSON.stringify(mediaTypes[0])} = ${JSON.stringify(mediaTypes[0])}>(args?: ${typeName('RequestParameters')}): Keq<${typeName('Operation')}<STATUS, CONTENT_TYPE>>`\n } else if (mediaTypes.length > 1) {\n return `${operationId}<STATUS extends keyof ${typeName('ResponseBodies')}, CONTENT_TYPE extends ${typeName('RequestParameters')}[\"content-type\"]>(args?: Extract<${typeName('RequestParameters')}, { \"content-type\": CONTENT_TYPE }>): Keq<${typeName('Operation')}<STATUS, CONTENT_TYPE>>`\n }\n\n throw new Exception(operationDefinition.module, '[operationDeclarationRenderer] Unreachable')\n }\n}\n","import * as R from 'ramda'\nimport { OperationDefinition } from '~/models/index.js'\nimport { CommentRenderer } from './comment.renderer.js'\nimport { DeclarationRenderer, OperationDefinitionDeclarationRendererOptions } from './declaration.renderer.js'\nimport { OperationDefinitionMicroFunctionRendererOptions, OperationDefinitionMicroFunctionRenderer } from './micro-function.renderer.js'\nimport { OperationDefinitionNestjsMethodRenderer, OperationDefinitionNestjsMethodRendererOptions } from './nestjs-method.renderer.js'\n\n\nexport class OperationDefinitionTransformer {\n static toDeclaration(operationDefinition: OperationDefinition, options: OperationDefinitionDeclarationRendererOptions): string {\n return new DeclarationRenderer(operationDefinition, options).render()\n }\n\n static toMicroFunction(operationDefinition: OperationDefinition, options: OperationDefinitionMicroFunctionRendererOptions): string {\n return new OperationDefinitionMicroFunctionRenderer(operationDefinition, options).render()\n }\n\n static toNestjsMethod(operationDefinition: OperationDefinition, options: OperationDefinitionNestjsMethodRendererOptions): string {\n return new OperationDefinitionNestjsMethodRenderer(operationDefinition, options).render()\n }\n\n static toComment(operationDefinition: OperationDefinition): string {\n return new CommentRenderer(operationDefinition).render()\n }\n}\n","import * as path from 'path'\nimport { Artifact } from '~/models/index.js'\n\n\ninterface EntrypointTypescriptRendererOptions {\n esm?: boolean\n\n // The directory path of the entrypoint file being generated\n dirpath: string\n}\n\nexport class EntrypointTransformer {\n static toTypescript(exports: Artifact[], options: EntrypointTypescriptRendererOptions): string {\n const $exports = exports.map((exportArtifact) => {\n const relativePath = path.relative(\n options.dirpath,\n exportArtifact.filepath,\n )\n .replace(/(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?$/, options.esm ? '.js' : '')\n\n return relativePath.startsWith('.')\n ? `export * from '${relativePath}'`\n : `export * from './${relativePath}'`\n })\n\n return [\n '/* @anchor:file:start */',\n '',\n ...$exports,\n '',\n '/* @anchor:file:end */',\n ].join('\\n')\n }\n}\n","import * as R from 'ramda'\nimport * as changeCase from 'change-case'\nimport { ApiDocumentV3_1, OperationDefinition } from '~/models/index.js'\nimport { Renderer } from '../types/renderer.js'\nimport { OperationDefinitionTransformer, typeNameFactory } from '../operation-definition/index.js'\nimport { indent } from '~/utils/indent.js'\n\n\nexport interface ApiDocumentNestjsClientRendererOptions {\n esm?: boolean\n\n getOperationDefinitionDeclarationFilepath(this: void, operationDefinition: OperationDefinition): string\n}\n\n\nexport class NestjsClientRenderer implements Renderer {\n constructor(\n private readonly document: ApiDocumentV3_1,\n private readonly options: ApiDocumentNestjsClientRendererOptions,\n ) {\n\n }\n\n private renderDependencies(): string {\n const $operations = this.document.operations\n .map((operationDefinition) => {\n const filepath = this.options.getOperationDefinitionDeclarationFilepath(operationDefinition)\n const typeName = typeNameFactory(operationDefinition)\n\n return `import type { ${typeName('Operation')}, ${typeName('ResponseBodies')}, ${typeName('RequestParameters')} } from \"${filepath}\"`\n })\n .map((str) => (str.replace(/ from \"(\\.\\.?\\/.+?)(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?\"/, this.options.esm ? ' from \"$1.js\"' : ' from \"$1\"')))\n\n return [\n 'import { Injectable, Logger } from \"@nestjs/common\"',\n 'import { Keq, KeqRequest } from \"keq\"',\n ...$operations,\n ]\n .join('\\n')\n }\n\n render(): string {\n const moduleName = changeCase.pascalCase(this.document.module.name)\n\n const $dependencies = this.renderDependencies()\n const $operations = this.document.operations\n .map((operation) => OperationDefinitionTransformer.toNestjsMethod(operation, {\n esm: this.options.esm,\n }))\n .join('\\n\\n')\n\n return [\n '/* @anchor:file:start */',\n '',\n $dependencies,\n '',\n '@Injectable()',\n `export class ${moduleName}Client {`,\n ` private readonly logger = new Logger(${moduleName}Client.name)`,\n '',\n ' constructor(',\n ' // @anchor:client-constructor-parameters:start',\n ' private readonly request: KeqRequest,',\n ' // @anchor:client-constructor-parameters:end',\n ' ) {}',\n '',\n indent(2, $operations),\n '}',\n '',\n '/* @anchor:file:end */',\n ].filter(R.isNotNil).join('\\n')\n }\n}\n","import * as changeCase from 'change-case'\nimport { ApiDocumentV3_1 } from '~/models/api-document_v3_1.js'\n\nexport interface ApiDocumentNestjsModuleRendererOptions {\n esm?: boolean\n\n getNestjsClientFilepath(document: ApiDocumentV3_1): string\n}\n\nexport class NestjsModuleRenderer {\n constructor(\n private readonly document: ApiDocumentV3_1,\n private readonly options: ApiDocumentNestjsModuleRendererOptions,\n ) {\n }\n\n render(): string {\n const moduleName = changeCase.pascalCase(this.document.module.name)\n const clientFilepath = this.options.getNestjsClientFilepath(this.document)\n .replace(/(\\.ts|\\.mts|\\.cts|\\.js|\\.cjs|\\.mjs)?$/, this.options.esm ? '.js' : '')\n\n return [\n '/* @anchor:file:start */',\n 'import { Module, ConfigurableModuleBuilder, Provider } from \"@nestjs/common\"',\n 'import { KeqRequest } from \"keq\"',\n 'import { KeqModule, type KeqModuleOptions } from \"@keq-request/nestjs\"',\n `import { ${moduleName}Client } from \"${clientFilepath}\"`,\n '',\n '',\n `export interface ${moduleName}ModuleOptions extends KeqModuleOptions {`,\n ' /**',\n ' * Whether to register the module globally.',\n ' * @default false',\n ' */',\n ' isGlobal?: boolean',\n '}',\n '',\n `const KEQ_REQUEST_TOKEN = Symbol(\"${moduleName}KeqRequest\")`,\n '',\n `const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<${moduleName}ModuleOptions>()`,\n ' .setExtras({ isGlobal: false }, (definition, extras) => ({',\n ' ...definition,',\n ' global: extras.isGlobal,',\n ' }))',\n ' .build()',\n '',\n 'const REQUEST_PROVIDER: Provider = {',\n ' provide: KEQ_REQUEST_TOKEN,',\n ` useFactory: (options: ${moduleName}ModuleOptions, globalRequest?: KeqRequest) => {`,\n '',\n ' if (!options.isolate && !globalRequest) {',\n ` console.warn(\"${moduleName}Module: No global KeqRequest found, creating an isolated instance. Import KeqModule globally or set { isolate: true } to suppress this warning.\")`,\n ' }',\n '',\n ' const request = (!options.isolate && globalRequest)',\n ' ? globalRequest.fork()',\n ' : new KeqRequest()',\n '',\n ' if (options.middlewares) {',\n ' for (const middleware of options.middlewares) {',\n ' request.use(middleware)',\n ' }',\n ' }',\n '',\n ' return request',\n ' },',\n ' inject: [',\n ' MODULE_OPTIONS_TOKEN,',\n ' { token: KeqRequest, optional: true },',\n ' ],',\n '}',\n '',\n 'const CLIENT_PROVIDER: Provider = {',\n ` provide: ${moduleName}Client,`,\n ` useFactory: (request: KeqRequest) => new ${moduleName}Client(request),`,\n ' inject: [KEQ_REQUEST_TOKEN],',\n '}',\n '',\n '/**',\n ` * NestJS module that provides the {@link ${moduleName}Client} for dependency injection.`,\n ' *',\n ' * This module requires a `KeqRequest` instance, which can be provided in two ways:',\n ' *',\n ' * **Option 1: Use the global `KeqModule` (recommended)**',\n ' *',\n ' * Import `KeqModule` globally, then register this module.',\n ' * The module will fork from the global KeqRequest and inherit its middlewares.',\n ' *',\n ' * ```typescript',\n ' * // app.module.ts',\n \" * import { KeqModule } from '@keq-request/nestjs'\",\n ' * ',\n ' * @Module({',\n ' * imports: [',\n ' * KeqModule,',\n ` * ${moduleName}Module.register({`,\n ' * isGlobal: true, // optional, default false',\n ' * middlewares: [], // module-level middlewares',\n ' * }),',\n ' * ],',\n ' * })',\n ' * export class AppModule {}',\n ' * ```',\n ' *',\n ' * **Option 2: Provide an isolated `KeqRequest` instance**',\n ' *',\n ' * ```typescript',\n ' * @Module({',\n ' * imports: [',\n ` * ${moduleName}Module.register({`,\n ' * isolate: true, // no inherited middlewares',\n ' * }),',\n ' * ],',\n ' * })',\n ' * export class SomeFeatureModule {}',\n ' * ```',\n ' *',\n ' * Then inject `' + moduleName + 'Client` in your services:',\n ' *',\n ' * ```typescript',\n ' * @Injectable()',\n ' * export class SomeService {',\n ` * constructor(private readonly client: ${moduleName}Client) {}`,\n ' * }',\n ' * ```',\n ' */',\n '@Module({',\n ' imports: [KeqModule],',\n ' providers: [REQUEST_PROVIDER, CLIENT_PROVIDER],',\n ` exports: [${moduleName}Client],`,\n '})',\n `export class ${moduleName}Module extends ConfigurableModuleClass {`,\n ` static readonly KEQ_REQUEST = KEQ_REQUEST_TOKEN`,\n '}',\n '',\n '/* @anchor:file:end */',\n ].join('\\n')\n }\n}\n","import { ApiDocumentV3_1 } from '~/models/index.js'\nimport { ApiDocumentNestjsClientRendererOptions, NestjsClientRenderer } from './nestjs-client.renderer.js'\nimport { ApiDocumentNestjsModuleRendererOptions, NestjsModuleRenderer } from './nestjs-module.renderer.js'\n\n\nexport class ApiDocumentTransformer {\n static toNestjsModule(document: ApiDocumentV3_1, options: ApiDocumentNestjsModuleRendererOptions): string {\n return new NestjsModuleRenderer(document, options).render()\n }\n\n static toNestjsClient(document: ApiDocumentV3_1, options: ApiDocumentNestjsClientRendererOptions): string {\n return new NestjsClientRenderer(document, options).render()\n }\n}\n","import { AsyncSeriesWaterfallHook } from 'tapable'\nimport { TaskWrapper } from '~/compiler/index.js'\nimport { Artifact, OperationDefinition, ResponseDefinition, SchemaDefinition } from '~/models/index.js'\nimport { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface GenerateDeclarationPluginMetadata {\n applied: boolean\n hooks: {\n afterEntrypointArtifactGenerated: AsyncSeriesWaterfallHook<[Artifact, TaskWrapper]>\n afterSchemaDeclarationArtifactGenerated: AsyncSeriesWaterfallHook<[Artifact, SchemaDefinition, TaskWrapper]>\n afterResponseDeclarationArtifactGenerated: AsyncSeriesWaterfallHook<[Artifact, ResponseDefinition, TaskWrapper]>\n afterOperationDeclarationArtifactGenerated: AsyncSeriesWaterfallHook<[Artifact, OperationDefinition, TaskWrapper]>\n }\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<GenerateDeclarationPluginMetadata>(\n '@keq-request/cli:GenerateDeclarationPlugin:MetadataStorage',\n)\n","import * as R from 'ramda'\nimport * as path from 'path'\nimport { Artifact, ModuleDefinition, SchemaDefinition } from '~/models/index.js'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { SchemaDefinitionTransformer } from '~/transformers/index.js'\nimport { EntrypointTransformer } from '~/transformers/entrypoint/entrypoint.transformer.js'\nimport { FileNamingStyle } from '~/constants/file-naming-style.js'\nimport * as changeCase from 'change-case'\nimport type { Generator, RuntimeConfig } from '~/types/index.js'\nimport { MetadataStorage } from '../../constants/metadata-storage.js'\n\n\nexport const SCHEMA_GENERATOR = 'schemaGenerator'\n\nexport class SchemaDeclarationGenerator implements Generator {\n async compile(compiler: Compiler, task: TaskWrapper): Promise<Artifact[]> {\n const context = compiler.context\n const metadata = MetadataStorage.get(compiler)!\n\n const rc = context.rc!\n const documents = context.documents!\n\n const schemaDefinitions = documents.flatMap((document) => document.schemas)\n\n const artifactMap = new Map<SchemaDefinition, Artifact>(\n await Promise.all(\n schemaDefinitions.map(async (schemaDefinition) => (<const>[\n schemaDefinition,\n await metadata.hooks.afterSchemaDeclarationArtifactGenerated.promise(\n this.generateSchemaDefinitionsArtifact(schemaDefinition, rc),\n schemaDefinition,\n task,\n ),\n ])),\n ),\n )\n\n if (!rc.rendering.entrypoint) {\n return [...artifactMap.values()]\n }\n\n const entrypoints = R.collectBy(\n (schemaDefinition) => schemaDefinition.module.name,\n schemaDefinitions,\n )\n .map((schemaDefinitions) => <const>[\n schemaDefinitions[0].module,\n schemaDefinitions\n .map((schemaDefinition) => artifactMap.get(schemaDefinition))\n .filter((artifact): artifact is Artifact => Boolean(artifact)),\n ])\n\n .map(([moduleDefinition, artifacts]) => this.generateEntrypointArtifact(\n moduleDefinition,\n artifacts,\n rc,\n ))\n\n return [...artifactMap.values(), ...entrypoints]\n }\n\n private generateSchemaDefinitionsArtifact(schemaDefinition: SchemaDefinition, rc: RuntimeConfig): Artifact {\n const filepath = SchemaDeclarationGenerator.getSchemaDefinitionArtifactFilepath(schemaDefinition, rc.rendering.fileNamingStyle)\n const dirpath = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: SchemaDeclarationGenerator.getSchemaDefinitionArtifactId(schemaDefinition),\n filepath,\n content: SchemaDefinitionTransformer.toDeclaration(\n schemaDefinition,\n {\n esm: rc.rendering.esm,\n additionalPropertiesType: rc.rendering.additionalPropertiesType,\n getDependentSchemaDefinitionFilepath(dependentSchemaDefinition: SchemaDefinition): string {\n const relativePath = path.relative(\n dirpath,\n SchemaDeclarationGenerator.getSchemaDefinitionArtifactFilepath(dependentSchemaDefinition, rc.rendering.fileNamingStyle),\n )\n\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n },\n ),\n extensionName: '.schema.ts',\n })\n\n return artifact\n }\n\n private generateEntrypointArtifact(moduleDefinition: ModuleDefinition, exports: Artifact[], rc: RuntimeConfig): Artifact {\n const filepath = SchemaDeclarationGenerator.getEntrypointArtifactFilepath(moduleDefinition, rc.rendering.fileNamingStyle)\n const dirpath = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: SchemaDeclarationGenerator.getEntrypointArtifactId(moduleDefinition),\n filepath,\n content: EntrypointTransformer.toTypescript(exports, { dirpath }),\n })\n\n return artifact\n }\n\n static getEntrypointArtifactFilepath(moduleDefinition: ModuleDefinition, fileNamingStyle: FileNamingStyle): string {\n return [\n '.',\n changeCase[fileNamingStyle](moduleDefinition.name),\n 'types',\n 'components',\n 'schemas',\n 'index.ts',\n ].join('/')\n }\n\n static getEntrypointArtifactId(moduleDefinition: ModuleDefinition): string {\n return `${moduleDefinition.address.url}/components/schemas/entrypoint?generator=${SCHEMA_GENERATOR}`\n }\n\n static getSchemaDefinitionArtifactFilepath(schemaDefinition: SchemaDefinition, fileNamingStyle: FileNamingStyle): string {\n const filename = `${changeCase[fileNamingStyle](schemaDefinition.name)}.schema.ts`\n return [\n '.',\n changeCase[fileNamingStyle](schemaDefinition.module.name),\n 'types',\n 'components',\n 'schemas',\n filename,\n ].join('/')\n }\n\n static getSchemaDefinitionArtifactId(schemaDefinition: SchemaDefinition): string {\n return `${schemaDefinition.id}?generator=${SCHEMA_GENERATOR}`\n }\n}\n","import * as R from 'ramda'\nimport * as path from 'path'\nimport { Artifact, ModuleDefinition, ResponseDefinition, SchemaDefinition } from '~/models/index.js'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { ResponseDefinitionTransformer } from '~/transformers/index.js'\nimport { EntrypointTransformer } from '~/transformers/entrypoint/entrypoint.transformer.js'\nimport { FileNamingStyle } from '~/constants/file-naming-style.js'\nimport * as changeCase from 'change-case'\nimport type { Generator, RuntimeConfig } from '~/types/index.js'\nimport { MetadataStorage } from '../../constants/metadata-storage.js'\nimport { SchemaDeclarationGenerator } from '../schema-declaration/index.js'\n\n\nexport const RESPONSE_GENERATOR = 'responseGenerator'\n\nexport class ResponseDeclarationGenerator implements Generator {\n async compile(compiler: Compiler, task: TaskWrapper): Promise<Artifact[]> {\n const context = compiler.context\n const metadata = MetadataStorage.get(compiler)!\n\n const rc = context.rc!\n const documents = context.documents!\n\n const responseDefinitions = documents.flatMap((document) => document.responses)\n\n if (responseDefinitions.length === 0) return []\n\n const artifactMap = new Map<ResponseDefinition, Artifact>(\n await Promise.all(\n responseDefinitions.map(async (responseDefinition) => (<const>[\n responseDefinition,\n await metadata.hooks.afterResponseDeclarationArtifactGenerated.promise(\n this.generateResponseDefinitionArtifact(responseDefinition, rc),\n responseDefinition,\n task,\n ),\n ])),\n ),\n )\n\n if (!rc.rendering.entrypoint) {\n return [...artifactMap.values()]\n }\n\n const entrypoints = R.collectBy(\n (responseDefinition) => responseDefinition.module.name,\n responseDefinitions,\n )\n .map((responseDefinitions) => <const>[\n responseDefinitions[0].module,\n responseDefinitions\n .map((responseDefinition) => artifactMap.get(responseDefinition))\n .filter((artifact): artifact is Artifact => Boolean(artifact)),\n ])\n .map(([moduleDefinition, artifacts]) => this.generateEntrypointArtifact(\n moduleDefinition,\n artifacts,\n rc,\n ))\n\n return [...artifactMap.values(), ...entrypoints]\n }\n\n private generateResponseDefinitionArtifact(responseDefinition: ResponseDefinition, rc: RuntimeConfig): Artifact {\n const filepath = ResponseDeclarationGenerator.getResponseDefinitionArtifactFilepath(responseDefinition, rc.rendering.fileNamingStyle)\n const dirpath = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: ResponseDeclarationGenerator.getResponseDefinitionArtifactId(responseDefinition),\n filepath,\n content: ResponseDefinitionTransformer.toDeclaration(\n responseDefinition,\n {\n esm: rc.rendering.esm,\n additionalPropertiesType: rc.rendering.additionalPropertiesType,\n getDependentSchemaDefinitionFilepath(dependentSchemaDefinition: SchemaDefinition): string {\n const relativePath = path.relative(\n dirpath,\n SchemaDeclarationGenerator.getSchemaDefinitionArtifactFilepath(dependentSchemaDefinition, rc.rendering.fileNamingStyle),\n )\n\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n },\n ),\n extensionName: '.response.ts',\n })\n\n return artifact\n }\n\n private generateEntrypointArtifact(moduleDefinition: ModuleDefinition, exports: Artifact[], rc: RuntimeConfig): Artifact {\n const filepath = ResponseDeclarationGenerator.getEntrypointArtifactFilepath(moduleDefinition, rc.rendering.fileNamingStyle)\n const dirpath = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: ResponseDeclarationGenerator.getEntrypointArtifactId(moduleDefinition),\n filepath,\n content: EntrypointTransformer.toTypescript(exports, { dirpath }),\n })\n\n return artifact\n }\n\n static getEntrypointArtifactFilepath(moduleDefinition: ModuleDefinition, fileNamingStyle: FileNamingStyle): string {\n return [\n '.',\n changeCase[fileNamingStyle](moduleDefinition.name),\n 'types',\n 'components',\n 'responses',\n 'index.ts',\n ].join('/')\n }\n\n static getEntrypointArtifactId(moduleDefinition: ModuleDefinition): string {\n return `${moduleDefinition.address.url}/components/responses/entrypoint?generator=${RESPONSE_GENERATOR}`\n }\n\n static getResponseDefinitionArtifactFilepath(responseDefinition: ResponseDefinition, fileNamingStyle: FileNamingStyle): string {\n const filename = `${changeCase[fileNamingStyle](responseDefinition.name)}.response.ts`\n return [\n '.',\n changeCase[fileNamingStyle](responseDefinition.module.name),\n 'types',\n 'components',\n 'responses',\n filename,\n ].join('/')\n }\n\n static getResponseDefinitionArtifactId(responseDefinition: ResponseDefinition): string {\n return `${responseDefinition.id}?generator=${RESPONSE_GENERATOR}`\n }\n}\n","import * as path from 'path'\nimport * as changeCase from 'change-case'\nimport { Artifact, ModuleDefinition, OperationDefinition } from '~/models/index.js'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { OperationDefinitionTransformer, EntrypointTransformer } from '~/transformers/index.js'\nimport { FileNamingStyle } from '~/constants/index.js'\nimport type { Generator, RuntimeConfig } from '~/types/index.js'\nimport { SchemaDeclarationGenerator } from '../schema-declaration/index.js'\nimport { ResponseDeclarationGenerator } from '../response-declaration/index.js'\nimport { MetadataStorage } from '../../constants/metadata-storage.js'\n\n\nexport const OPERATION_GENERATOR = 'operationDeclarationGenerator'\n\nexport class OperationDeclarationGenerator implements Generator {\n async compile(compiler: Compiler, task: TaskWrapper): Promise<Artifact[]> {\n const context = compiler.context\n const metadata = MetadataStorage.get(compiler)!\n\n const rc = context.rc!\n // const matcher = context.matcher!\n const documents = context.documents!\n // .filter((document) => !matcher.isModuleDenied(document.module))\n\n const operationDefinitions = documents.flatMap((document) => document.operations)\n\n const artifactMap = new Map<OperationDefinition, Artifact>(\n await Promise.all(\n operationDefinitions.map(async (operationDefinition) => (<const>[\n operationDefinition,\n await metadata.hooks.afterOperationDeclarationArtifactGenerated.promise(\n this.generateOperationDefinitionArtifact(operationDefinition, rc),\n operationDefinition,\n task,\n ),\n ])),\n ),\n )\n\n return Array.from(artifactMap.values())\n }\n\n\n private generateOperationDefinitionArtifact(operationDefinition: OperationDefinition, rc: RuntimeConfig): Artifact {\n const filepath = OperationDeclarationGenerator.getOperationDefinitionArtifactFilepath(operationDefinition, rc.rendering.fileNamingStyle)\n const dirpath = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: OperationDeclarationGenerator.getOperationDefinitionArtifactId(operationDefinition),\n filepath,\n content: OperationDefinitionTransformer.toDeclaration(\n operationDefinition,\n {\n esm: rc.rendering.esm,\n additionalPropertiesType: rc.rendering.additionalPropertiesType,\n getDependentSchemaDefinitionFilepath(dependentSchemaDefinition) {\n const relativePath = path.relative(\n dirpath,\n SchemaDeclarationGenerator.getSchemaDefinitionArtifactFilepath(dependentSchemaDefinition, rc.rendering.fileNamingStyle),\n )\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n getDependentResponseDefinitionFilepath(dependentResponseDefinition) {\n const relativePath = path.relative(\n dirpath,\n ResponseDeclarationGenerator.getResponseDefinitionArtifactFilepath(dependentResponseDefinition, rc.rendering.fileNamingStyle),\n )\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n },\n ),\n extensionName: '.type.ts',\n })\n\n return artifact\n }\n\n private generateEntrypointArtifact(moduleDefinition: ModuleDefinition, exports: Artifact[], rc: RuntimeConfig): Artifact {\n const filepath = OperationDeclarationGenerator.getEntrypointArtifactFilepath(moduleDefinition, rc.rendering.fileNamingStyle)\n const dirpath = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: OperationDeclarationGenerator.getEntrypointArtifactId(moduleDefinition),\n filepath,\n content: EntrypointTransformer.toTypescript(exports, { dirpath }),\n })\n\n return artifact\n }\n\n\n static getOperationDefinitionArtifactFilepath(operationDefinition: OperationDefinition, fileNamingStyle: FileNamingStyle): string {\n const filename = `${changeCase[fileNamingStyle](operationDefinition.operationId)}.type.ts`\n const filepath = [\n '.',\n changeCase[fileNamingStyle](operationDefinition.module.name),\n 'types',\n 'operations',\n filename,\n ].join('/')\n\n return filepath\n }\n\n static getOperationDefinitionArtifactId(operationDefinition: OperationDefinition): string {\n return `${operationDefinition.id}?generator=${OPERATION_GENERATOR}`\n }\n\n static getEntrypointArtifactFilepath(moduleDefinition: ModuleDefinition, fileNamingStyle: FileNamingStyle): string {\n return [\n '.',\n changeCase[fileNamingStyle](moduleDefinition.name),\n 'types',\n 'operations',\n 'index.ts',\n ].join('/')\n }\n\n static getEntrypointArtifactId(moduleDefinition: ModuleDefinition): string {\n return `${moduleDefinition.address.url}/paths/entrypoint?generator=${OPERATION_GENERATOR}`\n }\n}\n","import { AsyncSeriesWaterfallHook } from 'tapable'\nimport { Plugin } from '~/types/plugin.js'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { Artifact, OperationDefinition, ResponseDefinition, SchemaDefinition } from '~/models/index.js'\nimport { OperationDeclarationGenerator, SchemaDeclarationGenerator, ResponseDeclarationGenerator } from './generators/index.js'\nimport { GenerateDeclarationPluginMetadata, MetadataStorage } from './constants/index.js'\n\n\nexport const DECLARATION_GENERATOR = 'declarationGenerator'\n\nexport class GenerateDeclarationPlugin implements Plugin {\n name = DECLARATION_GENERATOR\n\n operationGenerator = new OperationDeclarationGenerator()\n schemaGenerator = new SchemaDeclarationGenerator()\n responseGenerator = new ResponseDeclarationGenerator()\n\n constructor() {}\n\n apply(compiler: Compiler): void {\n // Prevent duplicate registration by checking applied flag\n const metadata = GenerateDeclarationPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.compile.tapPromise(GenerateDeclarationPlugin.name, async (task: TaskWrapper) => {\n compiler.context.artifacts?.push(\n ...await this.schemaGenerator.compile(compiler, task),\n ...await this.responseGenerator.compile(compiler, task),\n ...await this.operationGenerator.compile(compiler, task),\n )\n })\n }\n\n static register(compiler: Compiler): GenerateDeclarationPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: {\n afterEntrypointArtifactGenerated: new AsyncSeriesWaterfallHook<[Artifact, TaskWrapper], Artifact>(['artifact', 'task']),\n afterSchemaDeclarationArtifactGenerated: new AsyncSeriesWaterfallHook<[Artifact, SchemaDefinition, TaskWrapper], Artifact>(['artifact', 'schemaDefinition', 'task']),\n afterResponseDeclarationArtifactGenerated: new AsyncSeriesWaterfallHook<[Artifact, ResponseDefinition, TaskWrapper], Artifact>(['artifact', 'responseDefinition', 'task']),\n afterOperationDeclarationArtifactGenerated: new AsyncSeriesWaterfallHook<[Artifact, OperationDefinition, TaskWrapper], Artifact>(['artifact', 'operationDefinition', 'task']),\n },\n })\n }\n\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): GenerateDeclarationPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import * as changeCase from 'change-case'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { Artifact } from '~/models/index.js'\nimport { Generator } from '~/types/index.js'\nimport { FileNamingStyle } from '~/constants/index.js'\n\n\nexport const MICRO_FUNCTION_REQUEST_GENERATOR = 'microFunctionRequestGenerator'\n\nexport class RequestGenerator implements Generator {\n private generateRequestArtifact(moduleName: string, fileNamingStyle: FileNamingStyle): Artifact {\n const content = [\n '/* @anchor:file:start */',\n '',\n 'import { KeqRequest } from \"keq\"',\n '',\n '/* @anchor:request-declaration */',\n 'export const request = new KeqRequest()',\n '',\n '/* @anchor:file:end */',\n ].join('\\n')\n\n return new Artifact({\n id: RequestGenerator.getRequestArtifactId(moduleName),\n filepath: RequestGenerator.getRequestArtifactFilepath(moduleName, fileNamingStyle),\n content,\n })\n }\n\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async compile(compiler: Compiler, task: TaskWrapper): Promise<Artifact[]> {\n const context = compiler.context\n const rc = context.rc!\n const documents = context.documents!\n\n const moduleNames = [...new Set(\n documents.flatMap((doc) => doc.operations.map((op) => op.module.name)),\n )]\n\n return moduleNames.map((moduleName) =>\n this.generateRequestArtifact(moduleName, rc.rendering.fileNamingStyle),\n )\n }\n\n static getRequestArtifactFilepath(moduleName: string, fileNamingStyle: FileNamingStyle): string {\n return `./${changeCase[fileNamingStyle](moduleName)}/request.ts`\n }\n\n static getRequestArtifactId(moduleName: string): string {\n return `request?module=${moduleName}&generator=${MICRO_FUNCTION_REQUEST_GENERATOR}`\n }\n}\n","import * as R from 'ramda'\nimport * as path from 'path'\nimport * as changeCase from 'change-case'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { Generator, RuntimeConfig } from '~/types/index.js'\nimport { Artifact, ModuleDefinition, OperationDefinition } from '~/models/index.js'\nimport { OperationDeclarationGenerator } from '~/plugins/generate-declaration/index.js'\nimport { OperationDefinitionTransformer } from '~/transformers/index.js'\nimport { EntrypointTransformer } from '~/transformers/index.js'\nimport { FileNamingStyle } from '~/constants/index.js'\nimport { MetadataStorage } from '../../constants/metadata-storage.js'\nimport { RequestGenerator } from '../request/index.js'\n\n\nexport const MICRO_FUNCTION_GENERATOR = 'microFunctionGenerator'\n\nexport class MicroFunctionGenerator implements Generator {\n async compile(compiler: Compiler, task: TaskWrapper): Promise<Artifact[]> {\n const metadata = MetadataStorage.get(compiler)!\n const context = compiler.context\n const rc = context.rc!\n const documents = context.documents!\n\n const operationDefinitions = documents.flatMap((document) => document.operations)\n\n const artifactMap = new Map<OperationDefinition, Artifact>(\n await Promise.all(\n operationDefinitions.map(async (operationDefinition) => (<const>[\n operationDefinition,\n await metadata.hooks.afterMicroFunctionArtifactGenerated.promise(\n this.generateOperationDefinitionArtifact(operationDefinition, rc),\n operationDefinition,\n task,\n ),\n ])),\n ),\n )\n\n if (!rc.rendering.entrypoint) {\n return [...artifactMap.values()]\n }\n\n const entrypoints = await Promise.all(\n R.collectBy(\n (operationDefinition: OperationDefinition) => operationDefinition.module.name,\n operationDefinitions,\n )\n .map((operationDefinitions) => (<const>[\n operationDefinitions[0].module,\n operationDefinitions\n .map((operationDefinition) => artifactMap.get(operationDefinition))\n .filter((artifact): artifact is Artifact => Boolean(artifact)),\n ]))\n .map(async ([moduleDefinition, artifacts]) => await metadata.hooks.afterEntrypointArtifactGenerated.promise(\n this.generateEntrypointArtifact(\n moduleDefinition,\n artifacts,\n rc,\n ),\n task,\n )),\n )\n\n return [...entrypoints, ...artifactMap.values()]\n }\n\n\n private generateOperationDefinitionArtifact(operationDefinition: OperationDefinition, rc: RuntimeConfig): Artifact {\n const filepath = MicroFunctionGenerator.getOperationDefinitionArtifactFilepath(operationDefinition, rc.rendering.fileNamingStyle)\n const dirpath = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: MicroFunctionGenerator.getOperationDefinitionArtifactId(operationDefinition),\n filepath,\n content: OperationDefinitionTransformer.toMicroFunction(operationDefinition, {\n esm: rc.rendering.esm,\n getOperationDefinitionDeclarationFilepath(operationDefinition: OperationDefinition): string {\n const relativePath = path.relative(\n dirpath,\n OperationDeclarationGenerator.getOperationDefinitionArtifactFilepath(operationDefinition, rc.rendering.fileNamingStyle),\n )\n\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n getRequestFilepath(): string {\n const relativePath = path.relative(\n dirpath,\n RequestGenerator.getRequestArtifactFilepath(operationDefinition.module.name, rc.rendering.fileNamingStyle),\n )\n\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n }),\n extensionName: '.type.ts',\n })\n\n return artifact\n }\n\n private generateEntrypointArtifact(moduleDefinition: ModuleDefinition, exports: Artifact[], rc: RuntimeConfig): Artifact {\n const filepath = MicroFunctionGenerator.getEntrypointArtifactFilepath(moduleDefinition, rc.rendering.fileNamingStyle)\n const dirpath = filepath.substring(0, filepath.lastIndexOf('/'))\n\n const artifact = new Artifact({\n id: MicroFunctionGenerator.getEntrypointArtifactId(moduleDefinition),\n filepath,\n content: EntrypointTransformer.toTypescript(exports, { dirpath }),\n })\n\n return artifact\n }\n\n\n static getOperationDefinitionArtifactFilepath(operationDefinition: OperationDefinition, fileNamingStyle: FileNamingStyle): string {\n const filename = `${changeCase[fileNamingStyle](operationDefinition.operationId)}.fn.ts`\n const filepath = [\n '.',\n changeCase[fileNamingStyle](operationDefinition.module.name),\n 'operations',\n filename,\n ].join('/')\n\n return filepath\n }\n\n static getOperationDefinitionArtifactId(operationDefinition: OperationDefinition): string {\n return `${operationDefinition.id}?generator=${MICRO_FUNCTION_GENERATOR}`\n }\n\n static getEntrypointArtifactFilepath(moduleDefinition: ModuleDefinition, fileNamingStyle: FileNamingStyle): string {\n return [\n '.',\n changeCase[fileNamingStyle](moduleDefinition.name),\n 'operations',\n 'index.ts',\n ].join('/')\n }\n\n static getEntrypointArtifactId(moduleDefinition: ModuleDefinition): string {\n return `${moduleDefinition.address}/paths/entrypoint?generator=${MICRO_FUNCTION_GENERATOR}`\n }\n}\n","import { AsyncSeriesWaterfallHook } from 'tapable'\nimport { Plugin } from '~/types/index.js'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { Artifact, OperationDefinition } from '~/models/index.js'\nimport { GenerateMicroFunctionPluginMetadata, MetadataStorage } from './constants/index.js'\nimport { MicroFunctionGenerator, RequestGenerator } from './generators/index.js'\n\n\nexport class GenerateMicroFunctionPlugin implements Plugin {\n private readonly microFunctionGenerator = new MicroFunctionGenerator()\n private readonly requestGenerator = new RequestGenerator()\n\n apply(compiler: Compiler): void {\n // Prevent duplicate registration by checking applied flag\n const metadata = GenerateMicroFunctionPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.compile.tapPromise(GenerateMicroFunctionPlugin.name, async (task: TaskWrapper) => {\n const artifacts = [\n ...(await this.requestGenerator.compile(compiler, task)),\n ...(await this.microFunctionGenerator.compile(compiler, task)),\n ]\n\n compiler.context.artifacts!.push(...artifacts)\n })\n }\n\n static register(compiler: Compiler): GenerateMicroFunctionPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: {\n afterEntrypointArtifactGenerated: new AsyncSeriesWaterfallHook<[Artifact, TaskWrapper]>(['artifact', 'task']),\n afterMicroFunctionArtifactGenerated: new AsyncSeriesWaterfallHook<[Artifact, OperationDefinition, TaskWrapper]>(['artifact', 'operationDefinition', 'task']),\n },\n })\n }\n\n return MetadataStorage.get(compiler)!\n }\n\n\n static of(compiler: Compiler): GenerateMicroFunctionPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface BodyFallbackPluginMetadata {\n applied: boolean\n hooks: object\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<BodyFallbackPluginMetadata>(\n '@keq-request/cli:BodyFallbackPlugin:MetadataStorage',\n)\n","import * as R from 'ramda'\nimport { Compiler } from '~/compiler/compiler.js'\nimport { Artifact, OperationDefinition } from '~/models/index.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { JsonSchemaUtils } from '~/utils/json-schema-utils/index.js'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\n\nimport { GenerateMicroFunctionPlugin } from '../generate-micro-function/index.js'\nimport { BodyFallbackPluginMetadata, MetadataStorage } from './constants/index.js'\n\n\nexport class BodyFallbackPlugin implements Plugin {\n apply(compiler: Compiler): void {\n const metadata = BodyFallbackPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.setup.tap(BodyFallbackPlugin.name, () => {\n const generateMicroFunctionPluginMetadata = GenerateMicroFunctionPlugin.of(compiler)\n\n if (!generateMicroFunctionPluginMetadata) {\n throw new Error('BodyFallbackPlugin requires GenerateMicroFunctionPlugin to be applied first.')\n }\n\n generateMicroFunctionPluginMetadata.hooks.afterMicroFunctionArtifactGenerated\n .tap(BodyFallbackPlugin.name, (artifact: Artifact, operationDefinition: OperationDefinition) => {\n const operation = operationDefinition.operation\n\n const parameters = operation.parameters?.filter((p): p is OpenAPIV3_1.ParameterObject => !JsonSchemaUtils.isRef(p)) || []\n const keys = parameters.map((p) => p.name).filter(R.isNotNil)\n\n const $acc = !keys.length\n ? ' acc[key] = args[key]'\n : [\n ` if (![${keys.map((k) => JSON.stringify(k)).join(', ')}].includes(key)) {`,\n ' acc[key] = args[key]',\n ' }',\n ].join('\\n')\n\n artifact.anchor.block.replace('body', [\n // $mediaType ? `${$mediaType}\\n` : undefined,\n ' if (typeof args === \"object\" && args !== null && !Array.isArray(args)) {',\n ' const requestBody = Object.keys(args)',\n ' .reduce((acc, key) => {',\n $acc,\n ' return acc',\n ' }, {} as Record<string, unknown>)',\n '',\n ' if (Object.keys(requestBody).length > 0) {',\n ' req.send(requestBody)',\n ' }',\n ' }',\n ].filter(R.isNotNil).join('\\n'))\n\n return artifact\n })\n })\n }\n\n static register(compiler: Compiler): BodyFallbackPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: { },\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): BodyFallbackPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface UseValibotPluginMetadata {\n applied: boolean\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<UseValibotPluginMetadata>(\n '@keq-request/cli:UseValibotPlugin:MetadataStorage',\n)\n","import { Plugin } from '~/types/plugin.js'\nimport { Compiler } from '~/compiler/index.js'\nimport { Artifact, SchemaDefinition } from '~/models/index.js'\nimport { SchemaDefinitionTransformer } from '~/transformers/index.js'\nimport { GenerateDeclarationPlugin, SchemaDeclarationGenerator } from '../generate-declaration/index.js'\nimport { MetadataStorage, UseValibotPluginMetadata } from './constants/index.js'\nimport * as path from 'path'\n\n\nexport const USE_VALIBOT = 'useValibot'\n\nexport class UseValibotPlugin implements Plugin {\n name = USE_VALIBOT\n\n constructor() {}\n\n apply(compiler: Compiler): void {\n // Prevent duplicate registration by checking applied flag\n const metadata = UseValibotPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n\n // Get the metadata - this will register hooks but not apply the plugin\n const declarationMetadata = GenerateDeclarationPlugin.of(compiler)\n if (!declarationMetadata) {\n throw new Error('UseValibotPlugin requires GenerateDeclarationPlugin to be registered first')\n }\n\n // Hook into afterSchemaDeclarationArtifactGenerated to replace TypeScript declaration with Valibot schema\n declarationMetadata.hooks.afterSchemaDeclarationArtifactGenerated.tap(\n UseValibotPlugin.name,\n (artifact: Artifact, schemaDefinition: SchemaDefinition) => {\n const rc = compiler.context.rc!\n const filepath = artifact.filepath\n const dirpath = path.dirname(filepath)\n\n // Generate Valibot schema content\n const valibotContent = SchemaDefinitionTransformer.toValibot(\n schemaDefinition,\n {\n esm: rc.rendering.esm,\n additionalPropertiesType: rc.rendering.additionalPropertiesType,\n getDependentSchemaDefinitionFilepath(dependentSchemaDefinition: SchemaDefinition): string {\n const relativePath = path.relative(\n dirpath,\n SchemaDeclarationGenerator.getSchemaDefinitionArtifactFilepath(dependentSchemaDefinition, rc.rendering.fileNamingStyle),\n )\n\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n },\n )\n\n // Replace artifact content with Valibot schema\n return new Artifact({\n ...artifact,\n content: valibotContent,\n })\n },\n )\n }\n\n static register(compiler: Compiler): UseValibotPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n })\n }\n\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): UseValibotPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import { AsyncSeriesWaterfallHook } from 'tapable'\nimport { TaskWrapper } from '~/compiler/index.js'\nimport { ApiDocumentV3_1, Artifact } from '~/models/index.js'\nimport { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\nexport interface GenerateNestjsModulePluginMetadata {\n applied: boolean\n hooks: {\n afterNestjsModuleArtifactGenerated: AsyncSeriesWaterfallHook<[Artifact, ApiDocumentV3_1, TaskWrapper]>\n }\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<GenerateNestjsModulePluginMetadata>(\n '@keq-request/cli:GenerateNestjsModulePlugin:MetadataStorage',\n)\n","import * as path from 'path'\nimport * as changeCase from 'change-case'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { ApiDocumentV3_1, Artifact } from '~/models/index.js'\nimport { MetadataStorage } from '../constants/metadata-storage.js'\nimport { FileNamingStyle } from '~/constants/index.js'\nimport { Generator, RuntimeConfig } from '~/types/index.js'\nimport { ApiDocumentTransformer } from '~/transformers/index.js'\nimport { OperationDeclarationGenerator } from '~/plugins/generate-declaration/index.js'\n\n\nconst NESTJS_MODULE_GENERATOR = 'nestjs-module-generator'\n\nexport class NestjsModuleGenerator implements Generator {\n private generateNestjsModuleArtifact(document: ApiDocumentV3_1, rc: RuntimeConfig): Artifact {\n const filepath = NestjsModuleGenerator.getNestjsModuleArtifactFilepath(document, rc.rendering.fileNamingStyle)\n const dirname = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: NestjsModuleGenerator.getNestjsModuleArtifactId(document),\n filepath,\n content: ApiDocumentTransformer.toNestjsModule(document, {\n esm: rc.rendering.esm,\n getNestjsClientFilepath(document) {\n const relativePath = path.relative(\n dirname,\n NestjsModuleGenerator.getNestjsClientArtifactFilepath(document, rc.rendering.fileNamingStyle),\n )\n\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n }),\n })\n\n return artifact\n }\n\n private generateNestjsClientArtifact(document: ApiDocumentV3_1, rc: RuntimeConfig): Artifact {\n const filepath = NestjsModuleGenerator.getNestjsClientArtifactFilepath(document, rc.rendering.fileNamingStyle)\n const dirpath = path.dirname(filepath)\n\n const artifact = new Artifact({\n id: NestjsModuleGenerator.getNestjsClientArtifactId(document),\n filepath,\n content: ApiDocumentTransformer.toNestjsClient(document, {\n esm: rc.rendering.esm,\n getOperationDefinitionDeclarationFilepath(operationDefinition) {\n const relativePath = path.relative(\n dirpath,\n OperationDeclarationGenerator.getOperationDefinitionArtifactFilepath(operationDefinition, rc.rendering.fileNamingStyle),\n )\n\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n },\n }),\n })\n\n return artifact\n }\n\n async compile(compiler: Compiler, task: TaskWrapper): Promise<Artifact[]> {\n const metadata = MetadataStorage.get(compiler)!\n const rc = compiler.context.rc!\n const documents = compiler.context.documents!\n\n const nestjsModuleArtifacts = await Promise.all(\n documents.map((document) => metadata.hooks.afterNestjsModuleArtifactGenerated.promise(\n this.generateNestjsModuleArtifact(document, rc),\n document,\n task,\n )),\n )\n\n const nestjsClientArtifacts = await Promise.all(\n documents.map((document) => metadata.hooks.afterNestjsModuleArtifactGenerated.promise(\n this.generateNestjsClientArtifact(document, rc),\n document,\n task,\n )),\n )\n\n return [...nestjsModuleArtifacts, ...nestjsClientArtifacts]\n }\n\n static getNestjsModuleArtifactFilepath(document: ApiDocumentV3_1, fileNamingStyle: FileNamingStyle): string {\n const filename = `${changeCase[fileNamingStyle](document.module.name)}.module.ts`\n\n const filepath = [\n '.',\n changeCase[fileNamingStyle](document.module.name),\n filename,\n ]\n\n return filepath.join('/')\n }\n\n static getNestjsModuleArtifactId(document: ApiDocumentV3_1): string {\n return `${document.module.address}?generate=${NESTJS_MODULE_GENERATOR}`\n }\n\n static getNestjsClientArtifactFilepath(document: ApiDocumentV3_1, fileNamingStyle: FileNamingStyle): string {\n const filename = `${changeCase[fileNamingStyle](document.module.name)}.client.ts`\n\n const filepath = [\n '.',\n changeCase[fileNamingStyle](document.module.name),\n filename,\n ]\n\n return filepath.join('/')\n }\n\n static getNestjsClientArtifactId(document: ApiDocumentV3_1): string {\n return `${document.module.address}?generate=${NESTJS_MODULE_GENERATOR}-client`\n }\n}\n","import { AsyncSeriesWaterfallHook } from 'tapable'\nimport { Plugin } from '~/types/index.js'\nimport { Compiler, TaskWrapper } from '~/compiler/index.js'\nimport { ApiDocumentV3_1, Artifact } from '~/models/index.js'\nimport { GenerateNestjsModulePluginMetadata, MetadataStorage } from './constants/index.js'\nimport { NestjsModuleGenerator } from './generators/nestjs-module.generator.js'\n\n\nexport class GenerateNestjsModulePlugin implements Plugin {\n private readonly nestjsModuleGenerator = new NestjsModuleGenerator()\n\n apply(compiler: Compiler): void {\n // Prevent duplicate registration by checking applied flag\n const metadata = GenerateNestjsModulePlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.compile.tapPromise(GenerateNestjsModulePlugin.name, async (task) => {\n const artifacts = await this.nestjsModuleGenerator.compile(compiler, task)\n compiler.context.artifacts!.push(...artifacts)\n })\n }\n\n static register(compiler: Compiler): GenerateNestjsModulePluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: {\n afterNestjsModuleArtifactGenerated: new AsyncSeriesWaterfallHook<[Artifact, ApiDocumentV3_1, TaskWrapper]>(['artifact', 'document', 'task']),\n },\n })\n }\n\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): GenerateNestjsModulePluginMetadata | undefined {\n return MetadataStorage.get(compiler)\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface ChineseToPinyinPluginMetadata {\n applied: boolean\n hooks: object\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<ChineseToPinyinPluginMetadata>(\n '@keq-request/cli:ChineseToPinyinPlugin:MetadataStorage',\n)\n","\nimport { fixSwagger } from 'swagger-fix'\nimport { Compiler } from '~/compiler/index.js'\nimport { ApiDocumentV3_1 } from '~/models/index.js'\nimport { ChineseToPinyinPluginMetadata, MetadataStorage } from './constants/index.js'\n\n\nexport class ChineseToPinyinPlugin {\n apply(compiler: Compiler): void {\n const metadata = ChineseToPinyinPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.afterDownload.tap(ChineseToPinyinPlugin.name, (task) => {\n const documents = compiler.context.documents!\n\n compiler.context.documents = documents.map((doc) => {\n return new ApiDocumentV3_1(\n fixSwagger(doc.specification as any),\n doc.module,\n )\n })\n })\n }\n\n static register(compiler: Compiler): ChineseToPinyinPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: { },\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): ChineseToPinyinPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface DownloadHttpFilePluginMetadata {\n applied: boolean\n hooks: object\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<DownloadHttpFilePluginMetadata>(\n '@keq-request/cli:DownloadHttpFilePlugin:MetadataStorage',\n)\n","import { Compiler } from '~/compiler/index.js'\nimport { Plugin, Address } from '~/types/index.js'\nimport { OpenapiUtils } from '~/utils/openapi-utils/index.js'\nimport { DownloadHttpFilePluginMetadata, MetadataStorage } from './constants/index.js'\n\n\nexport class DownloadHttpFilePlugin implements Plugin {\n apply(compiler: Compiler): void {\n const metadata = DownloadHttpFilePlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.download.tapPromise(DownloadHttpFilePlugin.name, async (address, task) => {\n const { url } = address\n\n if (!url.startsWith('http://') && !url.startsWith('https://')) return undefined\n\n const content = await this.download(address)\n const spec = this.deserialize(content)\n return JSON.stringify(spec)\n })\n }\n\n async download(address: Address): Promise<string> {\n const { url, headers } = address\n\n try {\n const res = await fetch(url, { headers })\n if (res.status >= 400) {\n const body = await res.text().catch(() => '')\n const detail = body ? `\\n Response Body: ${body}` : ''\n throw new Error(`failed with status code ${res.status}${detail}`)\n }\n\n return await res.text()\n } catch (e) {\n if (e instanceof Error) {\n e.message = `Unable get the openapi/swagger file from ${url}: ${e.message}`\n }\n\n throw e\n }\n }\n\n deserialize(content: string): object {\n const json = JSON.parse(content)\n const spec = OpenapiUtils.to3_1(json)\n return spec\n }\n\n static register(compiler: Compiler): DownloadHttpFilePluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: {\n },\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): DownloadHttpFilePluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface DownloadLocalFilePluginMetadata {\n applied: boolean\n hooks: object\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<DownloadLocalFilePluginMetadata>(\n '@keq-request/cli:DownloadLocalFilePlugin:MetadataStorage',\n)\n","import * as path from 'path'\nimport * as fs from 'fs/promises'\nimport * as yaml from 'js-yaml'\nimport { Compiler } from '~/compiler/index.js'\nimport { Plugin } from '~/types/index.js'\nimport { OpenapiUtils } from '~/utils/openapi-utils/index.js'\nimport { fileURLToPath } from 'url'\nimport { DownloadLocalFilePluginMetadata, MetadataStorage } from './constants/index.js'\n\n\nexport class DownloadLocalFilePlugin implements Plugin {\n apply(compiler: Compiler): void {\n const metadata = DownloadLocalFilePlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.download.tapPromise(DownloadLocalFilePlugin.name, async (address, task) => {\n const { url, encoding } = address\n if (!url.startsWith('file://')) return undefined\n const filepath = fileURLToPath(url)\n\n const fileExt = path.extname(filepath)\n const content = await fs.readFile(filepath, encoding)\n const str = typeof content === 'string' ? content : content.toString(encoding)\n\n if (['.yml', '.yaml'].includes(fileExt)) {\n const value = yaml.load(str)\n return JSON.stringify(OpenapiUtils.to3_1(value))\n } else if (fileExt === '.json') {\n return JSON.stringify(OpenapiUtils.to3_1(JSON.parse(str)))\n }\n })\n }\n\n static register(compiler: Compiler): DownloadLocalFilePluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: {\n },\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): DownloadLocalFilePluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface ShakingPluginMetadata {\n applied: boolean\n hooks: object\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<ShakingPluginMetadata>(\n '@keq-request/cli:ShakingPlugin:MetadataStorage',\n)\n","import { Plugin } from '~/types/index.js'\nimport { Compiler } from '~/compiler/index.js'\nimport { ApiDocumentV3_1, ModuleDefinition, OperationDefinition } from '~/models/index.js'\nimport { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { SupportedMethods } from '~/constants/index.js'\nimport { openapiShakingSync } from '@opendoc/openapi-shaking'\nimport { ShakingPluginMetadata, MetadataStorage } from './constants/index.js'\n\nexport class ShakingPlugin implements Plugin {\n apply(compiler: Compiler): void {\n const metadata = ShakingPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.beforeCompile.tap(ShakingPlugin.name, (task) => {\n const matcher = compiler.context.matcher!\n const documents = compiler.context.documents!\n\n compiler.context.documents = documents\n .map((document) => this.shaking(compiler, document))\n .filter((document) => !document.isEmpty())\n .filter((document) => !matcher.isModuleDenied(document.module))\n })\n }\n\n shaking(compiler: Compiler, document: ApiDocumentV3_1): ApiDocumentV3_1 {\n const rc = compiler.context.rc!\n const matcher = compiler.context.matcher!\n\n const isAccepted = (pathname: string, method: string, operation: OpenAPIV3_1.Document): boolean => {\n if (!SupportedMethods.includes(method)) return false\n\n return !matcher.isOperationDenied(new OperationDefinition({\n method,\n pathname,\n operation,\n module: document.module,\n document: document,\n }))\n }\n\n\n const sharkedSwagger = openapiShakingSync(\n document.specification as any,\n isAccepted as any,\n { tolerant: rc.tolerant },\n ) as OpenAPIV3_1.Document\n\n return new ApiDocumentV3_1(\n sharkedSwagger,\n new ModuleDefinition(\n document.module.name,\n {\n url: `memory://${document.module.name}.v3_1.sharked.json`,\n headers: {},\n encoding: 'utf8',\n },\n ),\n )\n }\n\n\n static register(compiler: Compiler): ShakingPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: {\n },\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): ShakingPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import { ListrTaskWrapper } from 'listr2'\nimport { OperationDefinition } from '~/models/index.js'\nimport { select } from 'inquirer-select-pro'\nimport { ListrInquirerPromptAdapter } from '@listr2/prompt-adapter-inquirer'\nimport { CompilerContext } from '~/compiler/index.js'\n\nexport async function selectOperationDefinitions(\n task: ListrTaskWrapper<CompilerContext, 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 { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface TerminalSelectPluginMetadata {\n applied: boolean\n hooks: object\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<TerminalSelectPluginMetadata>(\n '@keq-request/cli:TerminalSelectPlugin:MetadataStorage',\n)\n","import { Compiler } from '~/compiler/index.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { selectOperationDefinitions } from './utils/select-operation-definitions.js'\nimport { FilterMode } from './types/index.js'\nimport { MetadataStorage, TerminalSelectPluginMetadata } from './constants/index.js'\n\nexport interface TerminalSelectPluginOptions {\n mode: FilterMode\n\n persist?: boolean\n}\n\n\nexport class TerminalSelectPlugin implements Plugin {\n constructor(private options: TerminalSelectPluginOptions) {}\n\n apply(compiler: Compiler): void {\n const metadata = TerminalSelectPlugin.register(compiler)\n if (metadata.applied) return\n\n // Mark as applied immediately to prevent re-entry\n metadata.applied = true\n\n compiler.hooks.afterDownload.tapPromise(TerminalSelectPlugin.name, async (task) => {\n const context = compiler.context\n\n const matcher = context.matcher!\n const documents = context.documents!\n const operationDefinitions = documents.flatMap((document) => document.operations)\n const selectedOperationDefinitions = await selectOperationDefinitions(task, operationDefinitions)\n\n for (const op of selectedOperationDefinitions) {\n matcher.append({\n persist: !!this.options.persist,\n deny: this.options.mode === 'deny',\n moduleName: op.module.name,\n operationMethod: op.method,\n operationPathname: op.pathname,\n })\n }\n })\n }\n\n static register(compiler: Compiler): TerminalSelectPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n hooks: {},\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): TerminalSelectPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import fs from 'fs-extra'\nimport { Plugin } from '~/types/index.js'\nimport { Compiler } from '~/compiler/index.js'\n\n\nexport class CleanPlugin implements Plugin {\n apply(compiler: Compiler): void {\n compiler.hooks.beforePersist.tapPromise(CleanPlugin.name, async () => {\n const rc = compiler.context.rc\n if (!rc) throw new Error('Please run setup task first.')\n\n const outdir = rc.outdir\n await fs.emptyDir(outdir)\n })\n }\n}\n","import * as R from 'ramda'\nimport { Compiler } from '~/compiler/index.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { DownloadHttpFilePlugin } from '../download-http-file/index.js'\nimport { DownloadLocalFilePlugin } from '../download-local-file/index.js'\nimport { ShakingPlugin } from '../shaking/index.js'\nimport { TerminalSelectPlugin, TerminalSelectPluginOptions } from '../terminal-select/index.js'\nimport { CleanPlugin } from '../clean/index.js'\n\n\ninterface InitializePluginOptions {\n build?: boolean\n fresh?: boolean\n interactive?: boolean | TerminalSelectPluginOptions\n\n}\n\nexport class InitializePlugin implements Plugin {\n constructor(private options: InitializePluginOptions) {\n }\n\n apply(compiler: Compiler): void {\n compiler.hooks.setup.tap(InitializePlugin.name, (task) => {\n const plugins: Plugin[] = [\n new DownloadHttpFilePlugin(),\n new DownloadLocalFilePlugin(),\n ]\n\n if (this.options.build) {\n plugins.push(new ShakingPlugin())\n }\n\n if (this.options.interactive) {\n plugins.push(\n new TerminalSelectPlugin(\n typeof this.options.interactive === 'object'\n ? this.options.interactive\n : { mode: 'allow' },\n ),\n )\n }\n\n const rc = compiler.context.rc!\n\n plugins.push(\n ...R.unnest(\n (rc.translators || []).map((translator) => {\n const plugins = translator.apply()\n return plugins\n }),\n ),\n )\n\n if (this.options.fresh) {\n plugins.push(new CleanPlugin())\n }\n\n if (rc.plugins && rc.plugins.length) {\n plugins.push(...rc.plugins)\n }\n\n for (const plugin of plugins) {\n plugin.apply(compiler)\n }\n })\n }\n}\n","import { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { Compiler } from '~/compiler/index.js'\nimport { Exception } from '~/exception.js'\nimport { ApiDocumentV3_1 } from '~/models/api-document_v3_1.js'\nimport { ModuleDefinition } from '~/models/module-definition.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { OpenapiUtils } from '~/utils/openapi-utils/index.js'\n\n\n/**\n * A factory function that generates an operationId for a given operation.\n * If undefined is returned, the operationId will not be modified.\n */\nexport type OperationIdFactory = (context: {\n module: ModuleDefinition\n method: string\n pathname: string\n operation: OpenAPIV3_1.OperationObject\n}) => string | undefined\n\n\nexport class OverwriteOperationIdPlugin implements Plugin {\n constructor(private readonly factory: OperationIdFactory) {}\n\n apply(compiler: Compiler): void {\n compiler.hooks.afterDownload.tap(OverwriteOperationIdPlugin.name, () => {\n const documents = compiler.context.documents!\n const factory = this.factory\n\n compiler.context.documents = documents.map((document) => {\n const spec = OpenapiUtils.mapOperation(\n document.specification,\n (method, pathname, operation) => {\n const operationId = factory({ method, pathname, operation, module: document.module })\n if (typeof operationId === 'string') {\n if (operationId.length === 0) {\n throw new Exception(document.module, `The generated operationId for [${method.toUpperCase()} ${pathname}] is an empty string.`)\n }\n operation.operationId = operationId\n return operation\n }\n\n return operation\n },\n )\n\n return new ApiDocumentV3_1(spec, document.module)\n })\n })\n }\n}\n","import { JSONPath } from 'jsonpath-plus'\nimport { Compiler } from '~/compiler/index.js'\nimport { ModuleDefinition } from '~/models/module-definition.js'\nimport { Plugin } from '~/types/plugin.js'\n\n\nexport type SchemaNameFactory = (context: {\n name: string\n module: ModuleDefinition\n}) => string | undefined\n\n\nexport class OverwriteSchemaNamePlugin implements Plugin {\n constructor(private readonly factory: SchemaNameFactory) {}\n\n apply(compiler: Compiler): void {\n compiler.hooks.beforeValidate.tap(OverwriteSchemaNamePlugin.name, (spec, moduleDefinition) => {\n const schemas = (spec as Record<string, unknown> & { components?: { schemas?: Record<string, unknown> } }).components?.schemas\n if (!schemas) return\n\n const renameMap = new Map<string, string>()\n for (const name of Object.keys(schemas)) {\n const newName = this.factory({ name, module: moduleDefinition })\n if (typeof newName === 'string' && newName !== name) {\n renameMap.set(name, newName)\n }\n }\n\n if (renameMap.size === 0) return\n\n for (const [oldName, newName] of renameMap) {\n schemas[newName] = schemas[oldName]\n delete schemas[oldName]\n }\n\n const refMap = new Map<string, string>()\n for (const [oldName, newName] of renameMap) {\n refMap.set(\n `#/components/schemas/${oldName}`,\n `#/components/schemas/${newName}`,\n )\n }\n\n const matches: Array<{ value: Record<string, unknown> }> = JSONPath({\n path: \"$..*['$ref']^\",\n json: spec,\n resultType: 'all',\n })\n\n for (const match of matches) {\n const ref = match.value.$ref\n if (typeof ref === 'string' && refMap.has(ref)) {\n match.value.$ref = refMap.get(ref)\n }\n }\n })\n }\n}\n","import { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { KeqQueryOptions } from 'keq'\nimport { Compiler } from '~/compiler/index.js'\nimport { QsArrayFormat } from '~/constants/qs-array-format.js'\nimport { Exception } from '~/exception.js'\nimport { ApiDocumentV3_1, ModuleDefinition } from '~/models/index.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { OpenapiUtils } from '~/utils/openapi-utils/index.js'\n\n\nexport type OverwriteQueryOptionsFactory = (\n (options: {\n module: ModuleDefinition\n method: string\n pathname: string\n operation: OpenAPIV3_1.OperationObject\n parameter: OpenAPIV3_1.ParameterObject\n }) => KeqQueryOptions | undefined\n) | KeqQueryOptions\n\nconst QsArrayFormatUnion: string[] = Object.values(QsArrayFormat)\n\nexport class OverwriteQueryOptionsPlugin implements Plugin {\n constructor(private readonly factory: OverwriteQueryOptionsFactory) {}\n\n apply(compiler: Compiler): void {\n compiler.hooks.afterDownload.tap(OverwriteQueryOptionsPlugin.name, (task) => {\n const documents = compiler.context.documents!\n const factory = this.factory\n\n compiler.context.documents = documents.map((document) => {\n const specification = OpenapiUtils.mapParameter(\n document.specification,\n (method, pathname, operation, parameter) => {\n const qsOptions = typeof factory === 'function' ? factory({ parameter, operation, pathname, method, module: document.module }) : factory\n if (!qsOptions) return parameter\n\n if (qsOptions.arrayFormat) {\n if (!QsArrayFormatUnion.includes(qsOptions.arrayFormat)) {\n throw new Exception(document.module, `The 'arrayFormat' value '${qsOptions.arrayFormat}' for the query parameter '${parameter.name}' in [${method.toUpperCase()} ${pathname}] is invalid.`)\n }\n\n parameter['x-qs-array-format'] = qsOptions.arrayFormat\n }\n\n if (qsOptions.allowDots !== undefined) {\n if (typeof qsOptions.allowDots !== 'boolean') {\n throw new Exception(document.module, `The 'allowDots' value for the query parameter '${parameter.name}' in [${method.toUpperCase()} ${pathname}] must be a boolean.`)\n }\n\n parameter['x-qs-allow-dots'] = Boolean(qsOptions.allowDots)\n }\n\n if (qsOptions.indices !== undefined) {\n if (typeof qsOptions.indices !== 'boolean') {\n throw new Exception(document.module, `The 'indices' value for the query parameter '${parameter.name}' in [${method.toUpperCase()} ${pathname}] must be a boolean.`)\n }\n\n parameter['x-qs-indices'] = Boolean(qsOptions.indices)\n }\n\n return parameter\n },\n )\n\n return new ApiDocumentV3_1(\n specification,\n document.module,\n )\n })\n })\n }\n}\n","import { PluginMetadataStorage } from '~/models/plugin-metadata-storage.js'\n\n\nexport interface OverwriteAdditionalPropertiesPluginMetadata {\n applied: boolean\n}\n\nexport const MetadataStorage = new PluginMetadataStorage<OverwriteAdditionalPropertiesPluginMetadata>(\n '@keq-request/cli:OverwriteAdditionalPropertiesPlugin:MetadataStorage',\n)\n","import { Compiler } from '~/compiler/index.js'\nimport { ApiDocumentV3_1 } from '~/models/index.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { OpenapiUtils } from '~/utils/openapi-utils/index.js'\nimport { OverwriteAdditionalPropertiesPluginMetadata, MetadataStorage } from './constants/index.js'\n\n\nexport interface OverwriteAdditionalPropertiesPluginOptions {\n /**\n * When `true`, schemas without explicit `additionalProperties`\n * will be set to `additionalProperties: false`.\n * When `false` (default), respect OpenAPI 3.1 spec behavior\n * (undefined additionalProperties = true).\n * @default false\n */\n disallowIfNotPresent?: boolean\n}\n\nexport class OverwriteAdditionalPropertiesPlugin implements Plugin {\n constructor(private readonly options: OverwriteAdditionalPropertiesPluginOptions = {}) {}\n\n apply(compiler: Compiler): void {\n const metadata = OverwriteAdditionalPropertiesPlugin.register(compiler)\n if (metadata.applied) return\n\n metadata.applied = true\n\n const { disallowIfNotPresent = false } = this.options\n\n if (!disallowIfNotPresent) return\n\n compiler.hooks.afterDownload.tap(OverwriteAdditionalPropertiesPlugin.name, () => {\n const documents = compiler.context.documents!\n\n compiler.context.documents = documents.map((document) => {\n const specification = OpenapiUtils.mapSchema(\n document.specification,\n (schema) => {\n if (schema.type !== 'object' && !schema.properties) return schema\n\n if (schema.additionalProperties === undefined) {\n return Object.assign({}, schema, { additionalProperties: false as const })\n }\n\n return schema\n },\n )\n\n return new ApiDocumentV3_1(\n specification,\n document.module,\n )\n })\n })\n }\n\n static register(compiler: Compiler): OverwriteAdditionalPropertiesPluginMetadata {\n if (!MetadataStorage.has(compiler)) {\n MetadataStorage.set(compiler, {\n applied: false,\n })\n }\n return MetadataStorage.get(compiler)!\n }\n\n static of(compiler: Compiler): OverwriteAdditionalPropertiesPluginMetadata | undefined {\n return this.register(compiler)\n }\n}\n","import Ajv2020 from 'ajv/dist/2020.js'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { Compiler } from '~/compiler/index.js'\nimport { Plugin } from '~/types/plugin.js'\nimport { logger } from '~/utils/logger.js'\nimport { SupportedMethods } from '~/constants/supported-methods.js'\nimport { ApiDocumentV3_1 } from '~/models/api-document_v3_1.js'\nimport { OpenapiUtils } from '~/utils/openapi-utils/index.js'\nimport { Exception } from '~/exception.js'\n\n\nexport interface LintSchemaPluginOptions {\n /**\n * When true, throw an error and stop the build if schema validation fails.\n * When false (default), log warnings and continue.\n * @default false\n */\n strict?: boolean\n}\n\nexport class LintSchemaPlugin implements Plugin {\n constructor(private readonly options: LintSchemaPluginOptions = {}) {}\n\n apply(compiler: Compiler): void {\n compiler.hooks.beforeCompile.tap(LintSchemaPlugin.name, () => {\n const documents = compiler.context.documents!\n\n const ajv = new Ajv2020({ allErrors: true, strict: false })\n const validate = ajv.getSchema('https://json-schema.org/draft/2020-12/schema')\n\n if (!validate) {\n logger.warn('Failed to load JSON Schema Draft 2020-12 meta-schema for validation')\n return\n }\n\n let hasErrors = false\n\n for (const document of documents) {\n const spec = document.specification\n const moduleName = document.module.name\n\n // Validate components.schemas\n if (spec.components?.schemas) {\n for (const [name, schema] of Object.entries(spec.components.schemas)) {\n if (typeof schema === 'boolean' || '$ref' in schema) continue\n\n if (!validate(schema) && validate.errors) {\n hasErrors = true\n for (const error of validate.errors) {\n logger.warn(`[${moduleName}] components.schemas.${name}${error.instancePath}: ${error.message}`)\n }\n }\n }\n }\n\n // Validate operation schemas\n for (const [path, pathItem] of Object.entries(spec.paths || {})) {\n if (!pathItem) continue\n\n for (const method of SupportedMethods) {\n const operation = (pathItem as Record<string, OpenAPIV3_1.OperationObject>)[method]\n if (!operation) continue\n\n const operationId = operation.operationId || `${method.toUpperCase()} ${path}`\n\n // Parameters\n if (operation.parameters) {\n for (const param of operation.parameters) {\n if ('$ref' in param || !param.schema) continue\n if (typeof param.schema === 'boolean' || '$ref' in param.schema) continue\n\n if (!validate(param.schema) && validate.errors) {\n hasErrors = true\n for (const error of validate.errors) {\n logger.warn(`[${moduleName}] ${operationId} parameter \"${param.name}\" schema${error.instancePath}: ${error.message}`)\n }\n }\n }\n }\n\n // RequestBody\n if (operation.requestBody && !('$ref' in operation.requestBody)) {\n const content = (operation.requestBody.content || {}) as Record<string, OpenAPIV3_1.MediaTypeObject>\n for (const [mediaType, mediaTypeObj] of Object.entries(content)) {\n if (!mediaTypeObj.schema || typeof mediaTypeObj.schema === 'boolean' || '$ref' in mediaTypeObj.schema) continue\n\n if (!validate(mediaTypeObj.schema) && validate.errors) {\n hasErrors = true\n for (const error of validate.errors) {\n logger.warn(`[${moduleName}] ${operationId} requestBody ${mediaType} schema${error.instancePath}: ${error.message}`)\n }\n }\n }\n }\n\n // Responses\n if (operation.responses) {\n for (const [statusCode, response] of Object.entries(operation.responses)) {\n if ('$ref' in response) continue\n\n const content = (response.content || {}) as Record<string, OpenAPIV3_1.MediaTypeObject>\n for (const [mediaType, mediaTypeObj] of Object.entries(content)) {\n if (!mediaTypeObj.schema || typeof mediaTypeObj.schema === 'boolean' || '$ref' in mediaTypeObj.schema) continue\n\n if (!validate(mediaTypeObj.schema) && validate.errors) {\n hasErrors = true\n for (const error of validate.errors) {\n logger.warn(`[${moduleName}] ${operationId} response ${statusCode} ${mediaType} schema${error.instancePath}: ${error.message}`)\n }\n }\n }\n }\n }\n }\n }\n }\n\n if (this.options.strict && hasErrors) {\n throw new Error('Schema validation failed. Fix the errors above or set LintSchemaPlugin strict option to false.')\n }\n\n this.lintDuplicateOperationId(compiler, documents)\n })\n }\n\n /**\n * Detect duplicate operationId across all operations within each API document.\n *\n * In tolerant mode, duplicates are auto-resolved by appending `__{method}_{pathname}` suffix\n * and the patched document replaces the original in the compiler context.\n * In strict mode (tolerant=false), an Exception is thrown immediately.\n */\n private lintDuplicateOperationId(compiler: Compiler, documents: ApiDocumentV3_1[]): void {\n for (let i = 0; i < documents.length; i++) {\n const document = documents[i]\n const spec = document.specification\n const moduleName = document.module.name\n\n const operationIdMap = new Map<string, Array<{ method: string; pathname: string }>>()\n for (const [pathname, pathItem] of Object.entries(spec.paths || {})) {\n if (!pathItem) continue\n for (const method of SupportedMethods) {\n const operation = (pathItem as Record<string, OpenAPIV3_1.OperationObject>)[method]\n if (!operation?.operationId) continue\n const list = operationIdMap.get(operation.operationId) || []\n list.push({ method, pathname })\n operationIdMap.set(operation.operationId, list)\n }\n }\n\n const duplicates = [...operationIdMap.entries()].filter(([, ops]) => ops.length > 1)\n if (duplicates.length === 0) continue\n\n if (!compiler.options.tolerant) {\n const messages = duplicates.map(([id, ops]) => ` - operationId \"${id}\" is used by: ${ops.map((o) => `[${o.method.toUpperCase()} ${o.pathname}]`).join(', ')}`,\n )\n throw new Exception(document.module, `Duplicate operationId found:\\n${messages.join('\\n')}`)\n }\n\n const duplicateIds = new Set(duplicates.map(([id]) => id))\n for (const [id, ops] of duplicates) {\n logger.warn(`[${moduleName}] Duplicate operationId \"${id}\" found in: ${ops.map((o) => `[${o.method.toUpperCase()} ${o.pathname}]`).join(', ')}`)\n }\n\n const newSpec = OpenapiUtils.mapOperation(spec, (method, pathname, operation) => {\n if (operation.operationId && duplicateIds.has(operation.operationId)) {\n const sanitized = pathname\n .replace(/\\//g, '_')\n .replace(/-/g, '_')\n .replace(/:/g, '$$')\n .replace(/{(.+)}/, '$$$1')\n const newId = `${operation.operationId}__${method}${sanitized}`\n logger.warn(`[${moduleName}] Renamed: \"${operation.operationId}\" -> \"${newId}\" for [${method.toUpperCase()} ${pathname}]`)\n operation.operationId = newId\n }\n return operation\n })\n\n compiler.context.documents![i] = new ApiDocumentV3_1(newSpec, document.module)\n }\n }\n}\n","import { Compiler } from '~/compiler/index.js'\nimport { Plugin } from '~/types/plugin.js'\n\n\nfunction flattenExtensions(obj: unknown): void {\n if (typeof obj !== 'object' || obj === null) return\n\n if (Array.isArray(obj)) {\n for (const item of obj) {\n flattenExtensions(item)\n }\n return\n }\n\n const record = obj as Record<string, unknown>\n\n if ('extensions' in record && typeof record.extensions === 'object' && record.extensions !== null) {\n const extensions = record.extensions as Record<string, unknown>\n for (const [key, value] of Object.entries(extensions)) {\n if (!(key in record)) {\n record[key] = value\n }\n }\n delete record.extensions\n }\n\n for (const value of Object.values(record)) {\n flattenExtensions(value)\n }\n}\n\n\n/**\n * Springdoc (Java/Spring Boot) 生成的 OpenAPI 文档兼容插件。\n *\n * Springdoc 输出的文档存在若干不符合 OpenAPI 规范的结构,此插件在验证前进行修正。\n * 当前处理:\n * - 将嵌套的 `extensions` 对象展平为同级 x-* 属性\n */\nexport class SpringdocCompatPlugin implements Plugin {\n apply(compiler: Compiler): void {\n compiler.hooks.beforeValidate.tap(SpringdocCompatPlugin.name, (spec) => {\n flattenExtensions(spec)\n })\n }\n}\n","import { JSONPath } from 'jsonpath-plus'\nimport { Compiler } from '~/compiler/index.js'\nimport { Plugin } from '~/types/plugin.js'\n\n\nexport interface MockRule {\n given: string\n when?: {\n type?: string | string[]\n format?: string\n }\n then:\n | { example: unknown }\n | { faker: string; args?: unknown }\n | { default: unknown }\n}\n\nexport interface MockPluginOptions {\n rules: MockRule[]\n}\n\ntype SchemaNode = Record<string, unknown>\n\nfunction resolveRef(root: object, ref: string): SchemaNode | undefined {\n if (!ref.startsWith('#/')) return undefined\n const parts = ref.slice(2).split('/')\n let current: unknown = root\n for (const part of parts) {\n if (typeof current !== 'object' || current === null) return undefined\n current = (current as Record<string, unknown>)[part]\n }\n return typeof current === 'object' && current !== null ? current as SchemaNode : undefined\n}\n\nfunction resolveSchemaNode(root: object, node: SchemaNode): SchemaNode | undefined {\n if ('$ref' in node && typeof node['$ref'] === 'string') {\n return resolveRef(root, node['$ref'])\n }\n return node\n}\n\nfunction hasExplicitValue(node: SchemaNode): boolean {\n return 'example' in node\n || 'examples' in node\n || 'enum' in node\n || 'const' in node\n || 'x-faker' in node\n}\n\nfunction matchesCondition(node: SchemaNode, when: NonNullable<MockRule['when']>): boolean {\n if (when.type) {\n const types = Array.isArray(when.type) ? when.type : [when.type]\n if (!types.includes(node.type as string)) return false\n }\n if (when.format && node.format !== when.format) return false\n return true\n}\n\nfunction applyAction(node: SchemaNode, then: MockRule['then']): void {\n if ('example' in then) {\n node.example = then.example\n } else if ('faker' in then) {\n node['x-faker'] = then.args\n ? { [then.faker]: then.args }\n : then.faker\n } else if ('default' in then) {\n node.default = then.default\n }\n}\n\nfunction extractPropertyTarget(given: string): string | undefined {\n const match = given.match(/\\.properties\\.([^.[]+)$/)\n return match ? match[1] : undefined\n}\n\nfunction extractSchemaEntryPath(given: string): string | undefined {\n const idx = given.lastIndexOf('.properties.')\n if (idx === -1) return undefined\n return given.slice(0, idx)\n}\n\nfunction walkSchemaProperties(\n schema: SchemaNode,\n root: object,\n visitor: (propName: string, propSchema: SchemaNode) => void,\n visited: Set<object> = new Set(),\n): void {\n const resolved = resolveSchemaNode(root, schema)\n if (!resolved) return\n if (visited.has(resolved)) return\n visited.add(resolved)\n\n if (resolved.properties && typeof resolved.properties === 'object') {\n for (const [name, propValue] of Object.entries(resolved.properties as Record<string, unknown>)) {\n if (typeof propValue !== 'object' || propValue === null) continue\n const propSchema = propValue as SchemaNode\n visitor(name, propSchema)\n walkSchemaProperties(propSchema, root, visitor, visited)\n }\n }\n\n if (resolved.items && typeof resolved.items === 'object') {\n walkSchemaProperties(resolved.items as SchemaNode, root, visitor, visited)\n }\n\n for (const key of ['allOf', 'oneOf', 'anyOf'] as const) {\n const arr = resolved[key]\n if (Array.isArray(arr)) {\n for (const sub of arr) {\n if (typeof sub === 'object' && sub !== null) {\n walkSchemaProperties(sub as SchemaNode, root, visitor, visited)\n }\n }\n }\n }\n}\n\nexport class MockPlugin implements Plugin {\n private rules: MockRule[]\n\n constructor(options: MockPluginOptions) {\n this.rules = options.rules\n }\n\n apply(compiler: Compiler): void {\n compiler.hooks.beforeValidate.tap(MockPlugin.name, (spec) => {\n for (const rule of this.rules) {\n this.applyRule(spec, rule)\n }\n })\n }\n\n private applyRule(spec: object, rule: MockRule): void {\n const propertyTarget = extractPropertyTarget(rule.given)\n\n if (!propertyTarget) {\n const matches: Array<{ value: unknown }> = JSONPath({\n path: rule.given,\n json: spec,\n resultType: 'all',\n })\n for (const match of matches) {\n const node = match.value\n if (typeof node !== 'object' || node === null) continue\n const schema = node as SchemaNode\n if (hasExplicitValue(schema)) continue\n if (rule.when && !matchesCondition(schema, rule.when)) continue\n applyAction(schema, rule.then)\n }\n return\n }\n\n const schemaEntryPath = extractSchemaEntryPath(rule.given)\n if (!schemaEntryPath) return\n\n const entries: Array<{ value: unknown }> = JSONPath({\n path: schemaEntryPath,\n json: spec,\n resultType: 'all',\n })\n\n for (const entry of entries) {\n if (typeof entry.value !== 'object' || entry.value === null) continue\n const schemaEntry = entry.value as SchemaNode\n\n walkSchemaProperties(schemaEntry, spec, (propName, propSchema) => {\n if (propName !== propertyTarget) return\n if (hasExplicitValue(propSchema)) return\n if (rule.when && !matchesCondition(propSchema, rule.when)) return\n applyAction(propSchema, rule.then)\n })\n }\n }\n}\n"],"mappings":"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AAInE,SAAO;GACL;GACA;GACA;GACA;GACA,YAAY,WAAW,iBARF,KAAK,QAAQ,wBAAwB,KAAK,SAAS,CACvE,QAAQ,yCAAyC,KAAK,QAAQ,MAAM,QAAQ,GAOvB,CAAC;GACvD;GACA;GACA,oBAAoB,WAAW;GAC/B;GACA;GACA;GACA;GACA;GACA;GACA;GACA,qCAAqC,WAAW;GAChD;GACA,2FAA2F,WAAW;GACtG;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,2BAA2B,WAAW;GACtC;GACA;GACA,uBAAuB,WAAW;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,cAAc,WAAW;GACzB,8CAA8C,WAAW;GACzD;GACA;GACA;GACA;GACA,6CAA6C,WAAW;GACxD;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,UAAU,WAAW;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,UAAU,WAAW;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA,qBAAqB,aAAa;GAClC;GACA;GACA;GACA;GACA,6CAA6C,WAAW;GACxD;GACA;GACA;GACA;GACA;GACA;GACA,eAAe,WAAW;GAC1B;GACA,gBAAgB,WAAW;GAC3B;GACA;GACA;GACA;GACD,CAAC,KAAK,KAAK;;;;;ACnIhB,IAAa,yBAAb,MAAoC;CAClC,OAAO,eAAe,UAA2B,SAAyD;AACxG,SAAO,IAAI,qBAAqB,UAAU,QAAQ,CAAC,QAAQ;;CAG7D,OAAO,eAAe,UAA2B,SAAyD;AACxG,SAAO,IAAI,qBAAqB,UAAU,QAAQ,CAAC,QAAQ;;;;;ACK/D,MAAaC,oBAAkB,IAAI,sBACjC,6DACD;;;ACND,MAAa,mBAAmB;AAEhC,IAAa,6BAAb,MAAa,2BAAgD;CAC3D,MAAM,QAAQ,UAAoB,MAAwC;EACxE,MAAM,UAAU,SAAS;EACzB,MAAM,WAAWC,kBAAgB,IAAI,SAAS;EAE9C,MAAM,KAAK,QAAQ;EAGnB,MAAM,oBAFY,QAAQ,UAEU,SAAS,aAAa,SAAS,QAAQ;EAE3E,MAAM,cAAc,IAAI,IACtB,MAAM,QAAQ,IACZ,kBAAkB,IAAI,OAAO,qBAA6B,CACxD,kBACA,MAAM,SAAS,MAAM,wCAAwC,QAC3D,KAAK,kCAAkC,kBAAkB,GAAG,EAC5D,kBACA,KACD,CACF,CAAE,CACJ,CACF;AAED,MAAI,CAAC,GAAG,UAAU,WAChB,QAAO,CAAC,GAAG,YAAY,QAAQ,CAAC;EAGlC,MAAM,cAAcC,MAAE,WACnB,qBAAqB,iBAAiB,OAAO,MAC9C,kBACD,CACE,KAAK,sBAA6B,CACjC,kBAAkB,GAAG,QACrB,kBACG,KAAK,qBAAqB,YAAY,IAAI,iBAAiB,CAAC,CAC5D,QAAQ,aAAmC,QAAQ,SAAS,CAAC,CACjE,CAAC,CAED,KAAK,CAAC,kBAAkB,eAAe,KAAK,2BAC3C,kBACA,WACA,GACD,CAAC;AAEJ,SAAO,CAAC,GAAG,YAAY,QAAQ,EAAE,GAAG,YAAY;;CAGlD,kCAA0C,kBAAoC,IAA6B;EACzG,MAAM,WAAW,2BAA2B,oCAAoC,kBAAkB,GAAG,UAAU,gBAAgB;EAC/H,MAAM,UAAU,KAAK,QAAQ,SAAS;AAuBtC,SAAO,IArBc,SAAS;GAC5B,IAAI,2BAA2B,8BAA8B,iBAAiB;GAC9E;GACA,SAAS,4BAA4B,cACnC,kBACA;IACE,KAAK,GAAG,UAAU;IAClB,0BAA0B,GAAG,UAAU;IACvC,qCAAqC,2BAAqD;KACxF,MAAM,eAAe,KAAK,SACxB,SACA,2BAA2B,oCAAoC,2BAA2B,GAAG,UAAU,gBAAgB,CACxH;AAED,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE7D,CACF;GACD,eAAe;GAChB,CAEc;;CAGjB,2BAAmC,kBAAoC,SAAqB,IAA6B;EACvH,MAAM,WAAW,2BAA2B,8BAA8B,kBAAkB,GAAG,UAAU,gBAAgB;EACzH,MAAM,UAAU,KAAK,QAAQ,SAAS;AAQtC,SAAO,IANc,SAAS;GAC5B,IAAI,2BAA2B,wBAAwB,iBAAiB;GACxE;GACA,SAAS,sBAAsB,aAAa,SAAS,EAAE,SAAS,CAAC;GAClE,CAEc;;CAGjB,OAAO,8BAA8B,kBAAoC,iBAA0C;AACjH,SAAO;GACL;GACAC,YAAW,iBAAiB,iBAAiB,KAAK;GAClD;GACA;GACA;GACA;GACD,CAAC,KAAK,IAAI;;CAGb,OAAO,wBAAwB,kBAA4C;AACzE,SAAO,GAAG,iBAAiB,QAAQ,IAAI,2CAA2C;;CAGpF,OAAO,oCAAoC,kBAAoC,iBAA0C;EACvH,MAAM,WAAW,GAAGA,YAAW,iBAAiB,iBAAiB,KAAK,CAAC;AACvE,SAAO;GACL;GACAA,YAAW,iBAAiB,iBAAiB,OAAO,KAAK;GACzD;GACA;GACA;GACA;GACD,CAAC,KAAK,IAAI;;CAGb,OAAO,8BAA8B,kBAA4C;AAC/E,SAAO,GAAG,iBAAiB,GAAG,aAAa;;;;;ACrH/C,MAAa,qBAAqB;AAElC,IAAa,+BAAb,MAAa,6BAAkD;CAC7D,MAAM,QAAQ,UAAoB,MAAwC;EACxE,MAAM,UAAU,SAAS;EACzB,MAAM,WAAWC,kBAAgB,IAAI,SAAS;EAE9C,MAAM,KAAK,QAAQ;EAGnB,MAAM,sBAFY,QAAQ,UAEY,SAAS,aAAa,SAAS,UAAU;AAE/E,MAAI,oBAAoB,WAAW,EAAG,QAAO,EAAE;EAE/C,MAAM,cAAc,IAAI,IACtB,MAAM,QAAQ,IACZ,oBAAoB,IAAI,OAAO,uBAA+B,CAC5D,oBACA,MAAM,SAAS,MAAM,0CAA0C,QAC7D,KAAK,mCAAmC,oBAAoB,GAAG,EAC/D,oBACA,KACD,CACF,CAAE,CACJ,CACF;AAED,MAAI,CAAC,GAAG,UAAU,WAChB,QAAO,CAAC,GAAG,YAAY,QAAQ,CAAC;EAGlC,MAAM,cAAcC,MAAE,WACnB,uBAAuB,mBAAmB,OAAO,MAClD,oBACD,CACE,KAAK,wBAA+B,CACnC,oBAAoB,GAAG,QACvB,oBACG,KAAK,uBAAuB,YAAY,IAAI,mBAAmB,CAAC,CAChE,QAAQ,aAAmC,QAAQ,SAAS,CAAC,CACjE,CAAC,CACD,KAAK,CAAC,kBAAkB,eAAe,KAAK,2BAC3C,kBACA,WACA,GACD,CAAC;AAEJ,SAAO,CAAC,GAAG,YAAY,QAAQ,EAAE,GAAG,YAAY;;CAGlD,mCAA2C,oBAAwC,IAA6B;EAC9G,MAAM,WAAW,6BAA6B,sCAAsC,oBAAoB,GAAG,UAAU,gBAAgB;EACrI,MAAM,UAAU,KAAK,QAAQ,SAAS;AAuBtC,SAAO,IArBc,SAAS;GAC5B,IAAI,6BAA6B,gCAAgC,mBAAmB;GACpF;GACA,SAAS,8BAA8B,cACrC,oBACA;IACE,KAAK,GAAG,UAAU;IAClB,0BAA0B,GAAG,UAAU;IACvC,qCAAqC,2BAAqD;KACxF,MAAM,eAAe,KAAK,SACxB,SACA,2BAA2B,oCAAoC,2BAA2B,GAAG,UAAU,gBAAgB,CACxH;AAED,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE7D,CACF;GACD,eAAe;GAChB,CAEc;;CAGjB,2BAAmC,kBAAoC,SAAqB,IAA6B;EACvH,MAAM,WAAW,6BAA6B,8BAA8B,kBAAkB,GAAG,UAAU,gBAAgB;EAC3H,MAAM,UAAU,KAAK,QAAQ,SAAS;AAQtC,SAAO,IANc,SAAS;GAC5B,IAAI,6BAA6B,wBAAwB,iBAAiB;GAC1E;GACA,SAAS,sBAAsB,aAAa,SAAS,EAAE,SAAS,CAAC;GAClE,CAEc;;CAGjB,OAAO,8BAA8B,kBAAoC,iBAA0C;AACjH,SAAO;GACL;GACAC,YAAW,iBAAiB,iBAAiB,KAAK;GAClD;GACA;GACA;GACA;GACD,CAAC,KAAK,IAAI;;CAGb,OAAO,wBAAwB,kBAA4C;AACzE,SAAO,GAAG,iBAAiB,QAAQ,IAAI,6CAA6C;;CAGtF,OAAO,sCAAsC,oBAAwC,iBAA0C;EAC7H,MAAM,WAAW,GAAGA,YAAW,iBAAiB,mBAAmB,KAAK,CAAC;AACzE,SAAO;GACL;GACAA,YAAW,iBAAiB,mBAAmB,OAAO,KAAK;GAC3D;GACA;GACA;GACA;GACD,CAAC,KAAK,IAAI;;CAGb,OAAO,gCAAgC,oBAAgD;AACrF,SAAO,GAAG,mBAAmB,GAAG,aAAa;;;;;ACxHjD,MAAa,sBAAsB;AAEnC,IAAa,gCAAb,MAAa,8BAAmD;CAC9D,MAAM,QAAQ,UAAoB,MAAwC;EACxE,MAAM,UAAU,SAAS;EACzB,MAAM,WAAWC,kBAAgB,IAAI,SAAS;EAE9C,MAAM,KAAK,QAAQ;EAKnB,MAAM,uBAHY,QAAQ,UAGa,SAAS,aAAa,SAAS,WAAW;EAEjF,MAAM,cAAc,IAAI,IACtB,MAAM,QAAQ,IACZ,qBAAqB,IAAI,OAAO,wBAAgC,CAC9D,qBACA,MAAM,SAAS,MAAM,2CAA2C,QAC9D,KAAK,oCAAoC,qBAAqB,GAAG,EACjE,qBACA,KACD,CACF,CAAE,CACJ,CACF;AAED,SAAO,MAAM,KAAK,YAAY,QAAQ,CAAC;;CAIzC,oCAA4C,qBAA0C,IAA6B;EACjH,MAAM,WAAW,8BAA8B,uCAAuC,qBAAqB,GAAG,UAAU,gBAAgB;EACxI,MAAM,UAAU,KAAK,QAAQ,SAAS;AA6BtC,SAAO,IA3Bc,SAAS;GAC5B,IAAI,8BAA8B,iCAAiC,oBAAoB;GACvF;GACA,SAAS,+BAA+B,cACtC,qBACA;IACE,KAAK,GAAG,UAAU;IAClB,0BAA0B,GAAG,UAAU;IACvC,qCAAqC,2BAA2B;KAC9D,MAAM,eAAe,KAAK,SACxB,SACA,2BAA2B,oCAAoC,2BAA2B,GAAG,UAAU,gBAAgB,CACxH;AACD,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE5D,uCAAuC,6BAA6B;KAClE,MAAM,eAAe,KAAK,SACxB,SACA,6BAA6B,sCAAsC,6BAA6B,GAAG,UAAU,gBAAgB,CAC9H;AACD,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE7D,CACF;GACD,eAAe;GAChB,CAEc;;CAGjB,2BAAmC,kBAAoC,SAAqB,IAA6B;EACvH,MAAM,WAAW,8BAA8B,8BAA8B,kBAAkB,GAAG,UAAU,gBAAgB;EAC5H,MAAM,UAAU,KAAK,QAAQ,SAAS;AAQtC,SAAO,IANc,SAAS;GAC5B,IAAI,8BAA8B,wBAAwB,iBAAiB;GAC3E;GACA,SAAS,sBAAsB,aAAa,SAAS,EAAE,SAAS,CAAC;GAClE,CAEc;;CAIjB,OAAO,uCAAuC,qBAA0C,iBAA0C;EAChI,MAAM,WAAW,GAAGC,YAAW,iBAAiB,oBAAoB,YAAY,CAAC;AASjF,SARiB;GACf;GACAA,YAAW,iBAAiB,oBAAoB,OAAO,KAAK;GAC5D;GACA;GACA;GACD,CAAC,KAAK,IAEQ;;CAGjB,OAAO,iCAAiC,qBAAkD;AACxF,SAAO,GAAG,oBAAoB,GAAG,aAAa;;CAGhD,OAAO,8BAA8B,kBAAoC,iBAA0C;AACjH,SAAO;GACL;GACAA,YAAW,iBAAiB,iBAAiB,KAAK;GAClD;GACA;GACA;GACD,CAAC,KAAK,IAAI;;CAGb,OAAO,wBAAwB,kBAA4C;AACzE,SAAO,GAAG,iBAAiB,QAAQ,IAAI,8BAA8B;;;;;AC/GzE,MAAa,wBAAwB;AAErC,IAAa,4BAAb,MAAa,0BAA4C;CACvD,OAAO;CAEP,qBAAqB,IAAI,+BAA+B;CACxD,kBAAkB,IAAI,4BAA4B;CAClD,oBAAoB,IAAI,8BAA8B;CAEtD,cAAc;CAEd,MAAM,UAA0B;EAE9B,MAAM,WAAW,0BAA0B,SAAS,SAAS;AAC7D,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,QAAQ,WAAW,0BAA0B,MAAM,OAAO,SAAsB;AAC7F,YAAS,QAAQ,WAAW,KAC1B,GAAG,MAAM,KAAK,gBAAgB,QAAQ,UAAU,KAAK,EACrD,GAAG,MAAM,KAAK,kBAAkB,QAAQ,UAAU,KAAK,EACvD,GAAG,MAAM,KAAK,mBAAmB,QAAQ,UAAU,KAAK,CACzD;IACD;;CAGJ,OAAO,SAAS,UAAuD;AACrE,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO;IACL,kCAAkC,IAAIC,QAAAA,yBAA4D,CAAC,YAAY,OAAO,CAAC;IACvH,yCAAyC,IAAIA,QAAAA,yBAA8E;KAAC;KAAY;KAAoB;KAAO,CAAC;IACpK,2CAA2C,IAAIA,QAAAA,yBAAgF;KAAC;KAAY;KAAsB;KAAO,CAAC;IAC1K,4CAA4C,IAAIA,QAAAA,yBAAiF;KAAC;KAAY;KAAuB;KAAO,CAAC;IAC9K;GACF,CAAC;AAGJ,SAAOD,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAAmE;AAC3E,SAAO,KAAK,SAAS,SAAS;;;;;AC9ClC,MAAa,mCAAmC;AAEhD,IAAa,mBAAb,MAAa,iBAAsC;CACjD,wBAAgC,YAAoB,iBAA4C;EAC9F,MAAM,UAAU;GACd;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,KAAK,KAAK;AAEZ,SAAO,IAAI,SAAS;GAClB,IAAI,iBAAiB,qBAAqB,WAAW;GACrD,UAAU,iBAAiB,2BAA2B,YAAY,gBAAgB;GAClF;GACD,CAAC;;CAKJ,MAAM,QAAQ,UAAoB,MAAwC;EACxE,MAAM,UAAU,SAAS;EACzB,MAAM,KAAK,QAAQ;EACnB,MAAM,YAAY,QAAQ;AAM1B,SAAO,CAJc,GAAG,IAAI,IAC1B,UAAU,SAAS,QAAQ,IAAI,WAAW,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC,CACvE,CAEiB,CAAC,KAAK,eACtB,KAAK,wBAAwB,YAAY,GAAG,UAAU,gBAAgB,CACvE;;CAGH,OAAO,2BAA2B,YAAoB,iBAA0C;AAC9F,SAAO,KAAKE,YAAW,iBAAiB,WAAW,CAAC;;CAGtD,OAAO,qBAAqB,YAA4B;AACtD,SAAO,kBAAkB,WAAW,aAAa;;;;;ACpCrD,MAAa,2BAA2B;AAExC,IAAa,yBAAb,MAAa,uBAA4C;CACvD,MAAM,QAAQ,UAAoB,MAAwC;EACxE,MAAM,WAAWC,mBAAgB,IAAI,SAAS;EAC9C,MAAM,UAAU,SAAS;EACzB,MAAM,KAAK,QAAQ;EAGnB,MAAM,uBAFY,QAAQ,UAEa,SAAS,aAAa,SAAS,WAAW;EAEjF,MAAM,cAAc,IAAI,IACtB,MAAM,QAAQ,IACZ,qBAAqB,IAAI,OAAO,wBAAgC,CAC9D,qBACA,MAAM,SAAS,MAAM,oCAAoC,QACvD,KAAK,oCAAoC,qBAAqB,GAAG,EACjE,qBACA,KACD,CACF,CAAE,CACJ,CACF;AAED,MAAI,CAAC,GAAG,UAAU,WAChB,QAAO,CAAC,GAAG,YAAY,QAAQ,CAAC;AAwBlC,SAAO,CAAC,GAAG,MArBe,QAAQ,IAChCC,MAAE,WACC,wBAA6C,oBAAoB,OAAO,MACzE,qBACD,CACE,KAAK,yBAAiC,CACrC,qBAAqB,GAAG,QACxB,qBACG,KAAK,wBAAwB,YAAY,IAAI,oBAAoB,CAAC,CAClE,QAAQ,aAAmC,QAAQ,SAAS,CAAC,CACjE,CAAE,CACF,IAAI,OAAO,CAAC,kBAAkB,eAAe,MAAM,SAAS,MAAM,iCAAiC,QAClG,KAAK,2BACH,kBACA,WACA,GACD,EACD,KACD,CAAC,CACL,EAEuB,GAAG,YAAY,QAAQ,CAAC;;CAIlD,oCAA4C,qBAA0C,IAA6B;EACjH,MAAM,WAAW,uBAAuB,uCAAuC,qBAAqB,GAAG,UAAU,gBAAgB;EACjI,MAAM,UAAU,KAAK,QAAQ,SAAS;AA2BtC,SAAO,IAzBc,SAAS;GAC5B,IAAI,uBAAuB,iCAAiC,oBAAoB;GAChF;GACA,SAAS,+BAA+B,gBAAgB,qBAAqB;IAC3E,KAAK,GAAG,UAAU;IAClB,0CAA0C,qBAAkD;KAC1F,MAAM,eAAe,KAAK,SACxB,SACA,8BAA8B,uCAAuC,qBAAqB,GAAG,UAAU,gBAAgB,CACxH;AAED,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE5D,qBAA6B;KAC3B,MAAM,eAAe,KAAK,SACxB,SACA,iBAAiB,2BAA2B,oBAAoB,OAAO,MAAM,GAAG,UAAU,gBAAgB,CAC3G;AAED,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE7D,CAAC;GACF,eAAe;GAChB,CAEc;;CAGjB,2BAAmC,kBAAoC,SAAqB,IAA6B;EACvH,MAAM,WAAW,uBAAuB,8BAA8B,kBAAkB,GAAG,UAAU,gBAAgB;EACrH,MAAM,UAAU,SAAS,UAAU,GAAG,SAAS,YAAY,IAAI,CAAC;AAQhE,SAAO,IANc,SAAS;GAC5B,IAAI,uBAAuB,wBAAwB,iBAAiB;GACpE;GACA,SAAS,sBAAsB,aAAa,SAAS,EAAE,SAAS,CAAC;GAClE,CAEc;;CAIjB,OAAO,uCAAuC,qBAA0C,iBAA0C;EAChI,MAAM,WAAW,GAAGC,YAAW,iBAAiB,oBAAoB,YAAY,CAAC;AAQjF,SAPiB;GACf;GACAA,YAAW,iBAAiB,oBAAoB,OAAO,KAAK;GAC5D;GACA;GACD,CAAC,KAAK,IAEQ;;CAGjB,OAAO,iCAAiC,qBAAkD;AACxF,SAAO,GAAG,oBAAoB,GAAG,aAAa;;CAGhD,OAAO,8BAA8B,kBAAoC,iBAA0C;AACjH,SAAO;GACL;GACAA,YAAW,iBAAiB,iBAAiB,KAAK;GAClD;GACA;GACD,CAAC,KAAK,IAAI;;CAGb,OAAO,wBAAwB,kBAA4C;AACzE,SAAO,GAAG,iBAAiB,QAAQ,8BAA8B;;;;;ACnIrE,IAAa,8BAAb,MAAa,4BAA8C;CACzD,yBAA0C,IAAI,wBAAwB;CACtE,mBAAoC,IAAI,kBAAkB;CAE1D,MAAM,UAA0B;EAE9B,MAAM,WAAW,4BAA4B,SAAS,SAAS;AAC/D,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,QAAQ,WAAW,4BAA4B,MAAM,OAAO,SAAsB;GAC/F,MAAM,YAAY,CAChB,GAAI,MAAM,KAAK,iBAAiB,QAAQ,UAAU,KAAK,EACvD,GAAI,MAAM,KAAK,uBAAuB,QAAQ,UAAU,KAAK,CAC9D;AAED,YAAS,QAAQ,UAAW,KAAK,GAAG,UAAU;IAC9C;;CAGJ,OAAO,SAAS,UAAyD;AACvE,MAAI,CAACC,mBAAgB,IAAI,SAAS,CAChC,oBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO;IACL,kCAAkC,IAAIC,QAAAA,yBAAkD,CAAC,YAAY,OAAO,CAAC;IAC7G,qCAAqC,IAAIA,QAAAA,yBAAuE;KAAC;KAAY;KAAuB;KAAO,CAAC;IAC7J;GACF,CAAC;AAGJ,SAAOD,mBAAgB,IAAI,SAAS;;CAItC,OAAO,GAAG,UAAqE;AAC7E,SAAO,KAAK,SAAS,SAAS;;;;;ACtClC,MAAaE,oBAAkB,IAAI,sBACjC,sDACD;;;ACCD,IAAa,qBAAb,MAAa,mBAAqC;CAChD,MAAM,UAA0B;EAC9B,MAAM,WAAW,mBAAmB,SAAS,SAAS;AACtD,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,MAAM,IAAI,mBAAmB,YAAY;GACtD,MAAM,sCAAsC,4BAA4B,GAAG,SAAS;AAEpF,OAAI,CAAC,oCACH,OAAM,IAAI,MAAM,+EAA+E;AAGjG,uCAAoC,MAAM,oCACvC,IAAI,mBAAmB,OAAO,UAAoB,wBAA6C;IAI9F,MAAM,QAHY,oBAAoB,UAET,YAAY,QAAQ,MAAwC,CAAC,gBAAgB,MAAM,EAAE,CAAC,IAAI,EAAE,EACjG,KAAK,MAAM,EAAE,KAAK,CAAC,OAAOC,MAAE,SAAS;IAE7D,MAAM,OAAO,CAAC,KAAK,SACf,iCACA;KACA,iBAAiB,KAAK,KAAK,MAAM,KAAK,UAAU,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;KAC/D;KACA;KACD,CAAC,KAAK,KAAK;AAEd,aAAS,OAAO,MAAM,QAAQ,QAAQ;KAEpC;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD,CAAC,OAAOA,MAAE,SAAS,CAAC,KAAK,KAAK,CAAC;AAEhC,WAAO;KACP;IACJ;;CAGJ,OAAO,SAAS,UAAgD;AAC9D,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO,EAAG;GACX,CAAC;AAEJ,SAAOA,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAA4D;AACpE,SAAO,KAAK,SAAS,SAAS;;;;;ACjElC,MAAaC,oBAAkB,IAAI,sBACjC,oDACD;;;ACAD,MAAa,cAAc;AAE3B,IAAa,mBAAb,MAAa,iBAAmC;CAC9C,OAAO;CAEP,cAAc;CAEd,MAAM,UAA0B;EAE9B,MAAM,WAAW,iBAAiB,SAAS,SAAS;AACpD,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;EAInB,MAAM,sBAAsB,0BAA0B,GAAG,SAAS;AAClE,MAAI,CAAC,oBACH,OAAM,IAAI,MAAM,6EAA6E;AAI/F,sBAAoB,MAAM,wCAAwC,IAChE,iBAAiB,OAChB,UAAoB,qBAAuC;GAC1D,MAAM,KAAK,SAAS,QAAQ;GAC5B,MAAM,WAAW,SAAS;GAC1B,MAAM,UAAU,KAAK,QAAQ,SAAS;GAGtC,MAAM,iBAAiB,4BAA4B,UACjD,kBACA;IACE,KAAK,GAAG,UAAU;IAClB,0BAA0B,GAAG,UAAU;IACvC,qCAAqC,2BAAqD;KACxF,MAAM,eAAe,KAAK,SACxB,SACA,2BAA2B,oCAAoC,2BAA2B,GAAG,UAAU,gBAAgB,CACxH;AAED,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE7D,CACF;AAGD,UAAO,IAAI,SAAS;IAClB,GAAG;IACH,SAAS;IACV,CAAC;IAEL;;CAGH,OAAO,SAAS,UAA8C;AAC5D,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU,EAC5B,SAAS,OACV,CAAC;AAGJ,SAAOA,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAA0D;AAClE,SAAO,KAAK,SAAS,SAAS;;;;;AChElC,MAAaC,oBAAkB,IAAI,sBACjC,8DACD;;;ACHD,MAAM,0BAA0B;AAEhC,IAAa,wBAAb,MAAa,sBAA2C;CACtD,6BAAqC,UAA2B,IAA6B;EAC3F,MAAM,WAAW,sBAAsB,gCAAgC,UAAU,GAAG,UAAU,gBAAgB;EAC9G,MAAM,UAAU,KAAK,QAAQ,SAAS;AAkBtC,SAAO,IAhBc,SAAS;GAC5B,IAAI,sBAAsB,0BAA0B,SAAS;GAC7D;GACA,SAAS,uBAAuB,eAAe,UAAU;IACvD,KAAK,GAAG,UAAU;IAClB,wBAAwB,UAAU;KAChC,MAAM,eAAe,KAAK,SACxB,SACA,sBAAsB,gCAAgC,UAAU,GAAG,UAAU,gBAAgB,CAC9F;AAED,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE7D,CAAC;GACH,CAEc;;CAGjB,6BAAqC,UAA2B,IAA6B;EAC3F,MAAM,WAAW,sBAAsB,gCAAgC,UAAU,GAAG,UAAU,gBAAgB;EAC9G,MAAM,UAAU,KAAK,QAAQ,SAAS;AAkBtC,SAAO,IAhBc,SAAS;GAC5B,IAAI,sBAAsB,0BAA0B,SAAS;GAC7D;GACA,SAAS,uBAAuB,eAAe,UAAU;IACvD,KAAK,GAAG,UAAU;IAClB,0CAA0C,qBAAqB;KAC7D,MAAM,eAAe,KAAK,SACxB,SACA,8BAA8B,uCAAuC,qBAAqB,GAAG,UAAU,gBAAgB,CACxH;AAED,YAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK;;IAE7D,CAAC;GACH,CAEc;;CAGjB,MAAM,QAAQ,UAAoB,MAAwC;EACxE,MAAM,WAAWC,kBAAgB,IAAI,SAAS;EAC9C,MAAM,KAAK,SAAS,QAAQ;EAC5B,MAAM,YAAY,SAAS,QAAQ;EAEnC,MAAM,wBAAwB,MAAM,QAAQ,IAC1C,UAAU,KAAK,aAAa,SAAS,MAAM,mCAAmC,QAC5E,KAAK,6BAA6B,UAAU,GAAG,EAC/C,UACA,KACD,CAAC,CACH;EAED,MAAM,wBAAwB,MAAM,QAAQ,IAC1C,UAAU,KAAK,aAAa,SAAS,MAAM,mCAAmC,QAC5E,KAAK,6BAA6B,UAAU,GAAG,EAC/C,UACA,KACD,CAAC,CACH;AAED,SAAO,CAAC,GAAG,uBAAuB,GAAG,sBAAsB;;CAG7D,OAAO,gCAAgC,UAA2B,iBAA0C;EAC1G,MAAM,WAAW,GAAGC,YAAW,iBAAiB,SAAS,OAAO,KAAK,CAAC;AAQtE,SAAO;GALL;GACAA,YAAW,iBAAiB,SAAS,OAAO,KAAK;GACjD;GAGa,CAAC,KAAK,IAAI;;CAG3B,OAAO,0BAA0B,UAAmC;AAClE,SAAO,GAAG,SAAS,OAAO,QAAQ,YAAY;;CAGhD,OAAO,gCAAgC,UAA2B,iBAA0C;EAC1G,MAAM,WAAW,GAAGA,YAAW,iBAAiB,SAAS,OAAO,KAAK,CAAC;AAQtE,SAAO;GALL;GACAA,YAAW,iBAAiB,SAAS,OAAO,KAAK;GACjD;GAGa,CAAC,KAAK,IAAI;;CAG3B,OAAO,0BAA0B,UAAmC;AAClE,SAAO,GAAG,SAAS,OAAO,QAAQ,YAAY,wBAAwB;;;;;ACzG1E,IAAa,6BAAb,MAAa,2BAA6C;CACxD,wBAAyC,IAAI,uBAAuB;CAEpE,MAAM,UAA0B;EAE9B,MAAM,WAAW,2BAA2B,SAAS,SAAS;AAC9D,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,QAAQ,WAAW,2BAA2B,MAAM,OAAO,SAAS;GACjF,MAAM,YAAY,MAAM,KAAK,sBAAsB,QAAQ,UAAU,KAAK;AAC1E,YAAS,QAAQ,UAAW,KAAK,GAAG,UAAU;IAC9C;;CAGJ,OAAO,SAAS,UAAwD;AACtE,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO,EACL,oCAAoC,IAAIC,QAAAA,yBAAmE;IAAC;IAAY;IAAY;IAAO,CAAC,EAC7I;GACF,CAAC;AAGJ,SAAOD,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAAoE;AAC5E,SAAOA,kBAAgB,IAAI,SAAS;;;;;AC/BxC,MAAaE,oBAAkB,IAAI,sBACjC,yDACD;;;ACHD,IAAa,wBAAb,MAAa,sBAAsB;CACjC,MAAM,UAA0B;EAC9B,MAAM,WAAW,sBAAsB,SAAS,SAAS;AACzD,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,cAAc,IAAI,sBAAsB,OAAO,SAAS;GACrE,MAAM,YAAY,SAAS,QAAQ;AAEnC,YAAS,QAAQ,YAAY,UAAU,KAAK,QAAQ;AAClD,WAAO,IAAI,iBAAA,GAAA,YAAA,YACE,IAAI,cAAqB,EACpC,IAAI,OACL;KACD;IACF;;CAGJ,OAAO,SAAS,UAAmD;AACjE,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO,EAAG;GACX,CAAC;AAEJ,SAAOA,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAA+D;AACvE,SAAO,KAAK,SAAS,SAAS;;;;;AC9BlC,MAAaC,oBAAkB,IAAI,sBACjC,0DACD;;;ACJD,IAAa,yBAAb,MAAa,uBAAyC;CACpD,MAAM,UAA0B;EAC9B,MAAM,WAAW,uBAAuB,SAAS,SAAS;AAC1D,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,SAAS,WAAW,uBAAuB,MAAM,OAAO,SAAS,SAAS;GACvF,MAAM,EAAE,QAAQ;AAEhB,OAAI,CAAC,IAAI,WAAW,UAAU,IAAI,CAAC,IAAI,WAAW,WAAW,CAAE,QAAO,KAAA;GAEtE,MAAM,UAAU,MAAM,KAAK,SAAS,QAAQ;GAC5C,MAAM,OAAO,KAAK,YAAY,QAAQ;AACtC,UAAO,KAAK,UAAU,KAAK;IAC3B;;CAGJ,MAAM,SAAS,SAAmC;EAChD,MAAM,EAAE,KAAK,YAAY;AAEzB,MAAI;GACF,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,SAAS,CAAC;AACzC,OAAI,IAAI,UAAU,KAAK;IACrB,MAAM,OAAO,MAAM,IAAI,MAAM,CAAC,YAAY,GAAG;IAC7C,MAAM,SAAS,OAAO,sBAAsB,SAAS;AACrD,UAAM,IAAI,MAAM,2BAA2B,IAAI,SAAS,SAAS;;AAGnE,UAAO,MAAM,IAAI,MAAM;WAChB,GAAG;AACV,OAAI,aAAa,MACf,GAAE,UAAU,4CAA4C,IAAI,IAAI,EAAE;AAGpE,SAAM;;;CAIV,YAAY,SAAyB;EACnC,MAAM,OAAO,KAAK,MAAM,QAAQ;AAEhC,SADa,aAAa,MAAM,KACrB;;CAGb,OAAO,SAAS,UAAoD;AAClE,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO,EACN;GACF,CAAC;AAEJ,SAAOA,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAAgE;AACxE,SAAO,KAAK,SAAS,SAAS;;;;;ACxDlC,MAAaC,oBAAkB,IAAI,sBACjC,2DACD;;;ACAD,IAAa,0BAAb,MAAa,wBAA0C;CACrD,MAAM,UAA0B;EAC9B,MAAM,WAAW,wBAAwB,SAAS,SAAS;AAC3D,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,SAAS,WAAW,wBAAwB,MAAM,OAAO,SAAS,SAAS;GACxF,MAAM,EAAE,KAAA,OAAK,aAAa;AAC1B,OAAI,CAACC,MAAI,WAAW,UAAU,CAAE,QAAO,KAAA;GACvC,MAAM,YAAA,GAAA,IAAA,eAAyBA,MAAI;GAEnC,MAAM,UAAU,KAAK,QAAQ,SAAS;GACtC,MAAM,UAAU,MAAMC,YAAG,SAAS,UAAU,SAAS;GACrD,MAAM,MAAM,OAAO,YAAY,WAAW,UAAU,QAAQ,SAAS,SAAS;AAE9E,OAAI,CAAC,QAAQ,QAAQ,CAAC,SAAS,QAAQ,EAAE;IACvC,MAAM,QAAQC,QAAK,KAAK,IAAI;AAC5B,WAAO,KAAK,UAAU,aAAa,MAAM,MAAM,CAAC;cACvC,YAAY,QACrB,QAAO,KAAK,UAAU,aAAa,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;IAE5D;;CAGJ,OAAO,SAAS,UAAqD;AACnE,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO,EACN;GACF,CAAC;AAEJ,SAAOA,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAAiE;AACzE,SAAO,KAAK,SAAS,SAAS;;;;;ACxClC,MAAaC,oBAAkB,IAAI,sBACjC,iDACD;;;ACFD,IAAa,gBAAb,MAAa,cAAgC;CAC3C,MAAM,UAA0B;EAC9B,MAAM,WAAW,cAAc,SAAS,SAAS;AACjD,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,cAAc,IAAI,cAAc,OAAO,SAAS;GAC7D,MAAM,UAAU,SAAS,QAAQ;GACjC,MAAM,YAAY,SAAS,QAAQ;AAEnC,YAAS,QAAQ,YAAY,UAC1B,KAAK,aAAa,KAAK,QAAQ,UAAU,SAAS,CAAC,CACnD,QAAQ,aAAa,CAAC,SAAS,SAAS,CAAC,CACzC,QAAQ,aAAa,CAAC,QAAQ,eAAe,SAAS,OAAO,CAAC;IACjE;;CAGJ,QAAQ,UAAoB,UAA4C;EACtE,MAAM,KAAK,SAAS,QAAQ;EAC5B,MAAM,UAAU,SAAS,QAAQ;EAEjC,MAAM,cAAc,UAAkB,QAAgB,cAA6C;AACjG,OAAI,CAAC,iBAAiB,SAAS,OAAO,CAAE,QAAO;AAE/C,UAAO,CAAC,QAAQ,kBAAkB,IAAI,oBAAoB;IACxD;IACA;IACA;IACA,QAAQ,SAAS;IACP;IACX,CAAC,CAAC;;AAUL,SAAO,IAAI,iBAAA,GAAA,yBAAA,oBALT,SAAS,eACT,YACA,EAAE,UAAU,GAAG,UAAU,CAIX,EACd,IAAI,iBACF,SAAS,OAAO,MAChB;GACE,KAAK,YAAY,SAAS,OAAO,KAAK;GACtC,SAAS,EAAE;GACX,UAAU;GACX,CACF,CACF;;CAIH,OAAO,SAAS,UAA2C;AACzD,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO,EACN;GACF,CAAC;AAEJ,SAAOA,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAAuD;AAC/D,SAAO,KAAK,SAAS,SAAS;;;;;ACtElC,eAAsB,2BACpB,MACA,sBACgC;AAuBhC,QAAO,MAtBoC,KAAK,OAAOC,gCAAAA,2BAA2B,CAAC,IACjFC,oBAAAA,QACA;EACE,SAAS;EACT,cAAc,EAAE;EAChB,UAAU,UAAU;GAClB,MAAM,QAAQ,qBAAqB,KAAK,QAAQ;IAAE,MAAM,GAAG,GAAG,OAAO,KAAK,GAAG,GAAG,OAAO,aAAa,CAAC,GAAG,GAAG;IAAY,OAAO;IAAI,EAAE;AAEpI,OAAI,CAAC,MAAO,QAAO;GACnB,MAAM,OAAO,MACV,MAAM,CACN,aAAa,CACb,MAAM,MAAM;AAEf,UAAO,MAAM,QAAQ,MAAM;IACzB,MAAM,OAAO,EAAE,KAAK,aAAa;AACjC,WAAO,KAAK,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;KAC1C;;EAEL,CACF;;;;ACtBH,MAAaC,oBAAkB,IAAI,sBACjC,wDACD;;;ACGD,IAAa,uBAAb,MAAa,qBAAuC;CAClD,YAAY,SAA8C;AAAtC,OAAA,UAAA;;CAEpB,MAAM,UAA0B;EAC9B,MAAM,WAAW,qBAAqB,SAAS,SAAS;AACxD,MAAI,SAAS,QAAS;AAGtB,WAAS,UAAU;AAEnB,WAAS,MAAM,cAAc,WAAW,qBAAqB,MAAM,OAAO,SAAS;GACjF,MAAM,UAAU,SAAS;GAEzB,MAAM,UAAU,QAAQ;GAGxB,MAAM,+BAA+B,MAAM,2BAA2B,MAFpD,QAAQ,UACa,SAAS,aAAa,SAAS,WAC0B,CAAC;AAEjG,QAAK,MAAM,MAAM,6BACf,SAAQ,OAAO;IACb,SAAS,CAAC,CAAC,KAAK,QAAQ;IACxB,MAAM,KAAK,QAAQ,SAAS;IAC5B,YAAY,GAAG,OAAO;IACtB,iBAAiB,GAAG;IACpB,mBAAmB,GAAG;IACvB,CAAC;IAEJ;;CAGJ,OAAO,SAAS,UAAkD;AAChE,MAAI,CAACC,kBAAgB,IAAI,SAAS,CAChC,mBAAgB,IAAI,UAAU;GAC5B,SAAS;GACT,OAAO,EAAE;GACV,CAAC;AAEJ,SAAOA,kBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAA8D;AACtE,SAAO,KAAK,SAAS,SAAS;;;;;ACjDlC,IAAa,cAAb,MAAa,YAA8B;CACzC,MAAM,UAA0B;AAC9B,WAAS,MAAM,cAAc,WAAW,YAAY,MAAM,YAAY;GACpE,MAAM,KAAK,SAAS,QAAQ;AAC5B,OAAI,CAAC,GAAI,OAAM,IAAI,MAAM,+BAA+B;GAExD,MAAM,SAAS,GAAG;AAClB,SAAMC,SAAAA,QAAG,SAAS,OAAO;IACzB;;;;;ACIN,IAAa,mBAAb,MAAa,iBAAmC;CAC9C,YAAY,SAA0C;AAAlC,OAAA,UAAA;;CAGpB,MAAM,UAA0B;AAC9B,WAAS,MAAM,MAAM,IAAI,iBAAiB,OAAO,SAAS;GACxD,MAAM,UAAoB,CACxB,IAAI,wBAAwB,EAC5B,IAAI,yBAAyB,CAC9B;AAED,OAAI,KAAK,QAAQ,MACf,SAAQ,KAAK,IAAI,eAAe,CAAC;AAGnC,OAAI,KAAK,QAAQ,YACf,SAAQ,KACN,IAAI,qBACF,OAAO,KAAK,QAAQ,gBAAgB,WAChC,KAAK,QAAQ,cACb,EAAE,MAAM,SAAS,CACtB,CACF;GAGH,MAAM,KAAK,SAAS,QAAQ;AAE5B,WAAQ,KACN,GAAGC,MAAE,QACF,GAAG,eAAe,EAAE,EAAE,KAAK,eAAe;AAEzC,WADgB,WAAW,OACb;KACd,CACH,CACF;AAED,OAAI,KAAK,QAAQ,MACf,SAAQ,KAAK,IAAI,aAAa,CAAC;AAGjC,OAAI,GAAG,WAAW,GAAG,QAAQ,OAC3B,SAAQ,KAAK,GAAG,GAAG,QAAQ;AAG7B,QAAK,MAAM,UAAU,QACnB,QAAO,MAAM,SAAS;IAExB;;;;;AC3CN,IAAa,6BAAb,MAAa,2BAA6C;CACxD,YAAY,SAA8C;AAA7B,OAAA,UAAA;;CAE7B,MAAM,UAA0B;AAC9B,WAAS,MAAM,cAAc,IAAI,2BAA2B,YAAY;GACtE,MAAM,YAAY,SAAS,QAAQ;GACnC,MAAM,UAAU,KAAK;AAErB,YAAS,QAAQ,YAAY,UAAU,KAAK,aAAa;AAiBvD,WAAO,IAAI,gBAhBE,aAAa,aACxB,SAAS,gBACR,QAAQ,UAAU,cAAc;KAC/B,MAAM,cAAc,QAAQ;MAAE;MAAQ;MAAU;MAAW,QAAQ,SAAS;MAAQ,CAAC;AACrF,SAAI,OAAO,gBAAgB,UAAU;AACnC,UAAI,YAAY,WAAW,EACzB,OAAM,IAAI,UAAU,SAAS,QAAQ,kCAAkC,OAAO,aAAa,CAAC,GAAG,SAAS,uBAAuB;AAEjI,gBAAU,cAAc;AACxB,aAAO;;AAGT,YAAO;MAIoB,EAAE,SAAS,OAAO;KACjD;IACF;;;;;ACpCN,IAAa,4BAAb,MAAa,0BAA4C;CACvD,YAAY,SAA6C;AAA5B,OAAA,UAAA;;CAE7B,MAAM,UAA0B;AAC9B,WAAS,MAAM,eAAe,IAAI,0BAA0B,OAAO,MAAM,qBAAqB;GAC5F,MAAM,UAAW,KAA0F,YAAY;AACvH,OAAI,CAAC,QAAS;GAEd,MAAM,4BAAY,IAAI,KAAqB;AAC3C,QAAK,MAAM,QAAQ,OAAO,KAAK,QAAQ,EAAE;IACvC,MAAM,UAAU,KAAK,QAAQ;KAAE;KAAM,QAAQ;KAAkB,CAAC;AAChE,QAAI,OAAO,YAAY,YAAY,YAAY,KAC7C,WAAU,IAAI,MAAM,QAAQ;;AAIhC,OAAI,UAAU,SAAS,EAAG;AAE1B,QAAK,MAAM,CAAC,SAAS,YAAY,WAAW;AAC1C,YAAQ,WAAW,QAAQ;AAC3B,WAAO,QAAQ;;GAGjB,MAAM,yBAAS,IAAI,KAAqB;AACxC,QAAK,MAAM,CAAC,SAAS,YAAY,UAC/B,QAAO,IACL,wBAAwB,WACxB,wBAAwB,UACzB;GAGH,MAAM,WAAA,GAAA,cAAA,UAA8D;IAClE,MAAM;IACN,MAAM;IACN,YAAY;IACb,CAAC;AAEF,QAAK,MAAM,SAAS,SAAS;IAC3B,MAAM,MAAM,MAAM,MAAM;AACxB,QAAI,OAAO,QAAQ,YAAY,OAAO,IAAI,IAAI,CAC5C,OAAM,MAAM,OAAO,OAAO,IAAI,IAAI;;IAGtC;;;;;ACnCN,MAAM,qBAA+B,OAAO,OAAO,cAAc;AAEjE,IAAa,8BAAb,MAAa,4BAA8C;CACzD,YAAY,SAAwD;AAAvC,OAAA,UAAA;;CAE7B,MAAM,UAA0B;AAC9B,WAAS,MAAM,cAAc,IAAI,4BAA4B,OAAO,SAAS;GAC3E,MAAM,YAAY,SAAS,QAAQ;GACnC,MAAM,UAAU,KAAK;AAErB,YAAS,QAAQ,YAAY,UAAU,KAAK,aAAa;AAmCvD,WAAO,IAAI,gBAlCW,aAAa,aACjC,SAAS,gBACR,QAAQ,UAAU,WAAW,cAAc;KAC1C,MAAM,YAAY,OAAO,YAAY,aAAa,QAAQ;MAAE;MAAW;MAAW;MAAU;MAAQ,QAAQ,SAAS;MAAQ,CAAC,GAAG;AACjI,SAAI,CAAC,UAAW,QAAO;AAEvB,SAAI,UAAU,aAAa;AACzB,UAAI,CAAC,mBAAmB,SAAS,UAAU,YAAY,CACrD,OAAM,IAAI,UAAU,SAAS,QAAQ,4BAA4B,UAAU,YAAY,6BAA6B,UAAU,KAAK,QAAQ,OAAO,aAAa,CAAC,GAAG,SAAS,eAAe;AAG7L,gBAAU,uBAAuB,UAAU;;AAG7C,SAAI,UAAU,cAAc,KAAA,GAAW;AACrC,UAAI,OAAO,UAAU,cAAc,UACjC,OAAM,IAAI,UAAU,SAAS,QAAQ,kDAAkD,UAAU,KAAK,QAAQ,OAAO,aAAa,CAAC,GAAG,SAAS,sBAAsB;AAGvK,gBAAU,qBAAqB,QAAQ,UAAU,UAAU;;AAG7D,SAAI,UAAU,YAAY,KAAA,GAAW;AACnC,UAAI,OAAO,UAAU,YAAY,UAC/B,OAAM,IAAI,UAAU,SAAS,QAAQ,gDAAgD,UAAU,KAAK,QAAQ,OAAO,aAAa,CAAC,GAAG,SAAS,sBAAsB;AAGrK,gBAAU,kBAAkB,QAAQ,UAAU,QAAQ;;AAGxD,YAAO;MAKI,EACb,SAAS,OACV;KACD;IACF;;;;;AC/DN,MAAa,kBAAkB,IAAI,sBACjC,uEACD;;;ACSD,IAAa,sCAAb,MAAa,oCAAsD;CACjE,YAAY,UAAuE,EAAE,EAAE;AAA1D,OAAA,UAAA;;CAE7B,MAAM,UAA0B;EAC9B,MAAM,WAAW,oCAAoC,SAAS,SAAS;AACvE,MAAI,SAAS,QAAS;AAEtB,WAAS,UAAU;EAEnB,MAAM,EAAE,uBAAuB,UAAU,KAAK;AAE9C,MAAI,CAAC,qBAAsB;AAE3B,WAAS,MAAM,cAAc,IAAI,oCAAoC,YAAY;GAC/E,MAAM,YAAY,SAAS,QAAQ;AAEnC,YAAS,QAAQ,YAAY,UAAU,KAAK,aAAa;AAcvD,WAAO,IAAI,gBAbW,aAAa,UACjC,SAAS,gBACR,WAAW;AACV,SAAI,OAAO,SAAS,YAAY,CAAC,OAAO,WAAY,QAAO;AAE3D,SAAI,OAAO,yBAAyB,KAAA,EAClC,QAAO,OAAO,OAAO,EAAE,EAAE,QAAQ,EAAE,sBAAsB,OAAgB,CAAC;AAG5E,YAAO;MAKI,EACb,SAAS,OACV;KACD;IACF;;CAGJ,OAAO,SAAS,UAAiE;AAC/E,MAAI,CAAC,gBAAgB,IAAI,SAAS,CAChC,iBAAgB,IAAI,UAAU,EAC5B,SAAS,OACV,CAAC;AAEJ,SAAO,gBAAgB,IAAI,SAAS;;CAGtC,OAAO,GAAG,UAA6E;AACrF,SAAO,KAAK,SAAS,SAAS;;;;;AC9ClC,IAAa,mBAAb,MAAa,iBAAmC;CAC9C,YAAY,UAAoD,EAAE,EAAE;AAAvC,OAAA,UAAA;;CAE7B,MAAM,UAA0B;AAC9B,WAAS,MAAM,cAAc,IAAI,iBAAiB,YAAY;GAC5D,MAAM,YAAY,SAAS,QAAQ;GAGnC,MAAM,WAAW,IADDC,iBAAAA,QAAQ;IAAE,WAAW;IAAM,QAAQ;IAAO,CACtC,CAAC,UAAU,+CAA+C;AAE9E,OAAI,CAAC,UAAU;AACb,mBAAA,OAAO,KAAK,sEAAsE;AAClF;;GAGF,IAAI,YAAY;AAEhB,QAAK,MAAM,YAAY,WAAW;IAChC,MAAM,OAAO,SAAS;IACtB,MAAM,aAAa,SAAS,OAAO;AAGnC,QAAI,KAAK,YAAY,QACnB,MAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,KAAK,WAAW,QAAQ,EAAE;AACpE,SAAI,OAAO,WAAW,aAAa,UAAU,OAAQ;AAErD,SAAI,CAAC,SAAS,OAAO,IAAI,SAAS,QAAQ;AACxC,kBAAY;AACZ,WAAK,MAAM,SAAS,SAAS,OAC3B,gBAAA,OAAO,KAAK,IAAI,WAAW,uBAAuB,OAAO,MAAM,aAAa,IAAI,MAAM,UAAU;;;AAOxG,SAAK,MAAM,CAAC,MAAM,aAAa,OAAO,QAAQ,KAAK,SAAS,EAAE,CAAC,EAAE;AAC/D,SAAI,CAAC,SAAU;AAEf,UAAK,MAAM,UAAU,kBAAkB;MACrC,MAAM,YAAa,SAAyD;AAC5E,UAAI,CAAC,UAAW;MAEhB,MAAM,cAAc,UAAU,eAAe,GAAG,OAAO,aAAa,CAAC,GAAG;AAGxE,UAAI,UAAU,WACZ,MAAK,MAAM,SAAS,UAAU,YAAY;AACxC,WAAI,UAAU,SAAS,CAAC,MAAM,OAAQ;AACtC,WAAI,OAAO,MAAM,WAAW,aAAa,UAAU,MAAM,OAAQ;AAEjE,WAAI,CAAC,SAAS,MAAM,OAAO,IAAI,SAAS,QAAQ;AAC9C,oBAAY;AACZ,aAAK,MAAM,SAAS,SAAS,OAC3B,gBAAA,OAAO,KAAK,IAAI,WAAW,IAAI,YAAY,cAAc,MAAM,KAAK,UAAU,MAAM,aAAa,IAAI,MAAM,UAAU;;;AAO7H,UAAI,UAAU,eAAe,EAAE,UAAU,UAAU,cAAc;OAC/D,MAAM,UAAW,UAAU,YAAY,WAAW,EAAE;AACpD,YAAK,MAAM,CAAC,WAAW,iBAAiB,OAAO,QAAQ,QAAQ,EAAE;AAC/D,YAAI,CAAC,aAAa,UAAU,OAAO,aAAa,WAAW,aAAa,UAAU,aAAa,OAAQ;AAEvG,YAAI,CAAC,SAAS,aAAa,OAAO,IAAI,SAAS,QAAQ;AACrD,qBAAY;AACZ,cAAK,MAAM,SAAS,SAAS,OAC3B,gBAAA,OAAO,KAAK,IAAI,WAAW,IAAI,YAAY,eAAe,UAAU,SAAS,MAAM,aAAa,IAAI,MAAM,UAAU;;;;AAO5H,UAAI,UAAU,UACZ,MAAK,MAAM,CAAC,YAAY,aAAa,OAAO,QAAQ,UAAU,UAAU,EAAE;AACxE,WAAI,UAAU,SAAU;OAExB,MAAM,UAAW,SAAS,WAAW,EAAE;AACvC,YAAK,MAAM,CAAC,WAAW,iBAAiB,OAAO,QAAQ,QAAQ,EAAE;AAC/D,YAAI,CAAC,aAAa,UAAU,OAAO,aAAa,WAAW,aAAa,UAAU,aAAa,OAAQ;AAEvG,YAAI,CAAC,SAAS,aAAa,OAAO,IAAI,SAAS,QAAQ;AACrD,qBAAY;AACZ,cAAK,MAAM,SAAS,SAAS,OAC3B,gBAAA,OAAO,KAAK,IAAI,WAAW,IAAI,YAAY,YAAY,WAAW,GAAG,UAAU,SAAS,MAAM,aAAa,IAAI,MAAM,UAAU;;;;;;;AAU/I,OAAI,KAAK,QAAQ,UAAU,UACzB,OAAM,IAAI,MAAM,iGAAiG;AAGnH,QAAK,yBAAyB,UAAU,UAAU;IAClD;;;;;;;;;CAUJ,yBAAiC,UAAoB,WAAoC;AACvF,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;GACzC,MAAM,WAAW,UAAU;GAC3B,MAAM,OAAO,SAAS;GACtB,MAAM,aAAa,SAAS,OAAO;GAEnC,MAAM,iCAAiB,IAAI,KAA0D;AACrF,QAAK,MAAM,CAAC,UAAU,aAAa,OAAO,QAAQ,KAAK,SAAS,EAAE,CAAC,EAAE;AACnE,QAAI,CAAC,SAAU;AACf,SAAK,MAAM,UAAU,kBAAkB;KACrC,MAAM,YAAa,SAAyD;AAC5E,SAAI,CAAC,WAAW,YAAa;KAC7B,MAAM,OAAO,eAAe,IAAI,UAAU,YAAY,IAAI,EAAE;AAC5D,UAAK,KAAK;MAAE;MAAQ;MAAU,CAAC;AAC/B,oBAAe,IAAI,UAAU,aAAa,KAAK;;;GAInD,MAAM,aAAa,CAAC,GAAG,eAAe,SAAS,CAAC,CAAC,QAAQ,GAAG,SAAS,IAAI,SAAS,EAAE;AACpF,OAAI,WAAW,WAAW,EAAG;AAE7B,OAAI,CAAC,SAAS,QAAQ,UAAU;IAC9B,MAAM,WAAW,WAAW,KAAK,CAAC,IAAI,SAAS,oBAAoB,GAAG,gBAAgB,IAAI,KAAK,MAAM,IAAI,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,KAAK,KAAK,GAC3J;AACD,UAAM,IAAI,UAAU,SAAS,QAAQ,iCAAiC,SAAS,KAAK,KAAK,GAAG;;GAG9F,MAAM,eAAe,IAAI,IAAI,WAAW,KAAK,CAAC,QAAQ,GAAG,CAAC;AAC1D,QAAK,MAAM,CAAC,IAAI,QAAQ,WACtB,gBAAA,OAAO,KAAK,IAAI,WAAW,2BAA2B,GAAG,cAAc,IAAI,KAAK,MAAM,IAAI,EAAE,OAAO,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,KAAK,KAAK,GAAG;GAGlJ,MAAM,UAAU,aAAa,aAAa,OAAO,QAAQ,UAAU,cAAc;AAC/E,QAAI,UAAU,eAAe,aAAa,IAAI,UAAU,YAAY,EAAE;KACpE,MAAM,YAAY,SACf,QAAQ,OAAO,IAAI,CACnB,QAAQ,MAAM,IAAI,CAClB,QAAQ,MAAM,KAAK,CACnB,QAAQ,UAAU,OAAO;KAC5B,MAAM,QAAQ,GAAG,UAAU,YAAY,IAAI,SAAS;AACpD,oBAAA,OAAO,KAAK,IAAI,WAAW,cAAc,UAAU,YAAY,QAAQ,MAAM,SAAS,OAAO,aAAa,CAAC,GAAG,SAAS,GAAG;AAC1H,eAAU,cAAc;;AAE1B,WAAO;KACP;AAEF,YAAS,QAAQ,UAAW,KAAK,IAAI,gBAAgB,SAAS,SAAS,OAAO;;;;;;AC9KpF,SAAS,kBAAkB,KAAoB;AAC7C,KAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM;AAE7C,KAAI,MAAM,QAAQ,IAAI,EAAE;AACtB,OAAK,MAAM,QAAQ,IACjB,mBAAkB,KAAK;AAEzB;;CAGF,MAAM,SAAS;AAEf,KAAI,gBAAgB,UAAU,OAAO,OAAO,eAAe,YAAY,OAAO,eAAe,MAAM;EACjG,MAAM,aAAa,OAAO;AAC1B,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,WAAW,CACnD,KAAI,EAAE,OAAO,QACX,QAAO,OAAO;AAGlB,SAAO,OAAO;;AAGhB,MAAK,MAAM,SAAS,OAAO,OAAO,OAAO,CACvC,mBAAkB,MAAM;;;;;;;;;AAY5B,IAAa,wBAAb,MAAa,sBAAwC;CACnD,MAAM,UAA0B;AAC9B,WAAS,MAAM,eAAe,IAAI,sBAAsB,OAAO,SAAS;AACtE,qBAAkB,KAAK;IACvB;;;;;ACpBN,SAAS,WAAW,MAAc,KAAqC;AACrE,KAAI,CAAC,IAAI,WAAW,KAAK,CAAE,QAAO,KAAA;CAClC,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC,MAAM,IAAI;CACrC,IAAI,UAAmB;AACvB,MAAK,MAAM,QAAQ,OAAO;AACxB,MAAI,OAAO,YAAY,YAAY,YAAY,KAAM,QAAO,KAAA;AAC5D,YAAW,QAAoC;;AAEjD,QAAO,OAAO,YAAY,YAAY,YAAY,OAAO,UAAwB,KAAA;;AAGnF,SAAS,kBAAkB,MAAc,MAA0C;AACjF,KAAI,UAAU,QAAQ,OAAO,KAAK,YAAY,SAC5C,QAAO,WAAW,MAAM,KAAK,QAAQ;AAEvC,QAAO;;AAGT,SAAS,iBAAiB,MAA2B;AACnD,QAAO,aAAa,QACf,cAAc,QACd,UAAU,QACV,WAAW,QACX,aAAa;;AAGpB,SAAS,iBAAiB,MAAkB,MAA8C;AACxF,KAAI,KAAK;MAEH,EADU,MAAM,QAAQ,KAAK,KAAK,GAAG,KAAK,OAAO,CAAC,KAAK,KAAK,EACrD,SAAS,KAAK,KAAe,CAAE,QAAO;;AAEnD,KAAI,KAAK,UAAU,KAAK,WAAW,KAAK,OAAQ,QAAO;AACvD,QAAO;;AAGT,SAAS,YAAY,MAAkB,MAA8B;AACnE,KAAI,aAAa,KACf,MAAK,UAAU,KAAK;UACX,WAAW,KACpB,MAAK,aAAa,KAAK,OACnB,GAAG,KAAK,QAAQ,KAAK,MAAM,GAC3B,KAAK;UACA,aAAa,KACtB,MAAK,UAAU,KAAK;;AAIxB,SAAS,sBAAsB,OAAmC;CAChE,MAAM,QAAQ,MAAM,MAAM,0BAA0B;AACpD,QAAO,QAAQ,MAAM,KAAK,KAAA;;AAG5B,SAAS,uBAAuB,OAAmC;CACjE,MAAM,MAAM,MAAM,YAAY,eAAe;AAC7C,KAAI,QAAQ,GAAI,QAAO,KAAA;AACvB,QAAO,MAAM,MAAM,GAAG,IAAI;;AAG5B,SAAS,qBACP,QACA,MACA,SACA,0BAAuB,IAAI,KAAK,EAC1B;CACN,MAAM,WAAW,kBAAkB,MAAM,OAAO;AAChD,KAAI,CAAC,SAAU;AACf,KAAI,QAAQ,IAAI,SAAS,CAAE;AAC3B,SAAQ,IAAI,SAAS;AAErB,KAAI,SAAS,cAAc,OAAO,SAAS,eAAe,SACxD,MAAK,MAAM,CAAC,MAAM,cAAc,OAAO,QAAQ,SAAS,WAAsC,EAAE;AAC9F,MAAI,OAAO,cAAc,YAAY,cAAc,KAAM;EACzD,MAAM,aAAa;AACnB,UAAQ,MAAM,WAAW;AACzB,uBAAqB,YAAY,MAAM,SAAS,QAAQ;;AAI5D,KAAI,SAAS,SAAS,OAAO,SAAS,UAAU,SAC9C,sBAAqB,SAAS,OAAqB,MAAM,SAAS,QAAQ;AAG5E,MAAK,MAAM,OAAO;EAAC;EAAS;EAAS;EAAQ,EAAW;EACtD,MAAM,MAAM,SAAS;AACrB,MAAI,MAAM,QAAQ,IAAI;QACf,MAAM,OAAO,IAChB,KAAI,OAAO,QAAQ,YAAY,QAAQ,KACrC,sBAAqB,KAAmB,MAAM,SAAS,QAAQ;;;;AAOzE,IAAa,aAAb,MAAa,WAA6B;CACxC;CAEA,YAAY,SAA4B;AACtC,OAAK,QAAQ,QAAQ;;CAGvB,MAAM,UAA0B;AAC9B,WAAS,MAAM,eAAe,IAAI,WAAW,OAAO,SAAS;AAC3D,QAAK,MAAM,QAAQ,KAAK,MACtB,MAAK,UAAU,MAAM,KAAK;IAE5B;;CAGJ,UAAkB,MAAc,MAAsB;EACpD,MAAM,iBAAiB,sBAAsB,KAAK,MAAM;AAExD,MAAI,CAAC,gBAAgB;GACnB,MAAM,WAAA,GAAA,cAAA,UAA8C;IAClD,MAAM,KAAK;IACX,MAAM;IACN,YAAY;IACb,CAAC;AACF,QAAK,MAAM,SAAS,SAAS;IAC3B,MAAM,OAAO,MAAM;AACnB,QAAI,OAAO,SAAS,YAAY,SAAS,KAAM;IAC/C,MAAM,SAAS;AACf,QAAI,iBAAiB,OAAO,CAAE;AAC9B,QAAI,KAAK,QAAQ,CAAC,iBAAiB,QAAQ,KAAK,KAAK,CAAE;AACvD,gBAAY,QAAQ,KAAK,KAAK;;AAEhC;;EAGF,MAAM,kBAAkB,uBAAuB,KAAK,MAAM;AAC1D,MAAI,CAAC,gBAAiB;EAEtB,MAAM,WAAA,GAAA,cAAA,UAA8C;GAClD,MAAM;GACN,MAAM;GACN,YAAY;GACb,CAAC;AAEF,OAAK,MAAM,SAAS,SAAS;AAC3B,OAAI,OAAO,MAAM,UAAU,YAAY,MAAM,UAAU,KAAM;GAC7D,MAAM,cAAc,MAAM;AAE1B,wBAAqB,aAAa,OAAO,UAAU,eAAe;AAChE,QAAI,aAAa,eAAgB;AACjC,QAAI,iBAAiB,WAAW,CAAE;AAClC,QAAI,KAAK,QAAQ,CAAC,iBAAiB,YAAY,KAAK,KAAK,CAAE;AAC3D,gBAAY,YAAY,KAAK,KAAK;KAClC"}