diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 52ca79e1..3eb07837 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -124,12 +124,24 @@ jobs: matrix: include: - typescript-version: 5.9.3 + typescript-package: typescript@5.9.3 + expected-adapter: classic experimental: false - - typescript-version: 6 + - typescript-version: 6.0.2 + typescript-package: typescript@6.0.2 + expected-adapter: classic experimental: false - - typescript-version: 7.0.1-rc + - typescript-version: typescript6-alias + typescript-package: typescript@npm:@typescript/typescript6@6.0.2 + expected-adapter: classic + experimental: false + - typescript-version: 7.0.2 + typescript-package: typescript@7.0.2 + expected-adapter: native experimental: false - typescript-version: next + typescript-package: typescript@next + expected-adapter: any experimental: true steps: - name: Checkout repository @@ -152,62 +164,95 @@ jobs: run: pnpm ci - name: Build generator packages - run: pnpm exec turbo run build --filter=next-openapi-gen... + run: pnpm exec turbo run build --filter=next-openapi-gen... --concurrency=100% - name: Run TypeScript compatibility smoke env: + EXPECTED_TYPESCRIPT_ADAPTER: ${{ matrix.expected-adapter }} + TYPESCRIPT_PACKAGE: ${{ matrix.typescript-package }} TYPESCRIPT_VERSION: ${{ matrix.typescript-version }} run: | set -euo pipefail compat_root="$(mktemp -d)" - cp -R tests/fixtures/projects/next/app-router/core-flow "$compat_root/app" - cat > "$compat_root/app/package.json" <<'JSON' + cp -R tests/fixtures/projects/next/app-router/core-flow "$compat_root/core-flow" + cp -R tests/fixtures/projects/next/app-router/ts-full-coverage "$compat_root/ts-full-coverage" + for compat_project in "$compat_root/core-flow" "$compat_root/ts-full-coverage"; do + cat > "$compat_project/package.json" <<'JSON' { "private": true, "type": "module" } JSON - cp "$compat_root/app/templates/openapi-3.0.json" "$compat_root/app/next.openapi.json" - pnpm --dir "$compat_root/app" add -D "typescript@${TYPESCRIPT_VERSION}" + done + cp "$compat_root/core-flow/templates/openapi-3.0.json" "$compat_root/core-flow/next.openapi.json" + cp "$compat_root/ts-full-coverage/templates/openapi-3.2.json" "$compat_root/ts-full-coverage/next.openapi.json" + pnpm --dir "$compat_root/core-flow" add -D "${TYPESCRIPT_PACKAGE}" + pnpm --dir "$compat_root/ts-full-coverage" add -D "${TYPESCRIPT_PACKAGE}" - COMPAT_PROJECT="$compat_root/app" node --input-type=module <<'NODE' + COMPAT_CORE_PROJECT="$compat_root/core-flow" COMPAT_TS_FULL_PROJECT="$compat_root/ts-full-coverage" node --input-type=module <<'NODE' import fs from "node:fs"; import path from "node:path"; import { createRequire } from "node:module"; import { OpenApiGenerator } from "next-openapi-gen"; import { inferResponsesForExport } from "@workspace/openapi-core/routes/typescript-response-inference.js"; + import { getTypeScriptAdapter } from "@workspace/openapi-core/shared/typescript-project.js"; - const projectRoot = process.env.COMPAT_PROJECT; - if (!projectRoot) { - throw new Error("COMPAT_PROJECT is required"); + const coreProjectRoot = process.env.COMPAT_CORE_PROJECT; + const tsFullProjectRoot = process.env.COMPAT_TS_FULL_PROJECT; + if (!coreProjectRoot || !tsFullProjectRoot) { + throw new Error("COMPAT_CORE_PROJECT and COMPAT_TS_FULL_PROJECT are required"); } const require = createRequire(import.meta.url); const projectTypeScriptPackageJsonPath = require.resolve("typescript/package.json", { - paths: [projectRoot], + paths: [coreProjectRoot], }); const projectTypeScriptPackageJson = JSON.parse( fs.readFileSync(projectTypeScriptPackageJsonPath, "utf8"), ); console.log(`Using project TypeScript ${projectTypeScriptPackageJson.version}`); - const templatePath = path.join(projectRoot, "next.openapi.json"); - process.chdir(projectRoot); - const generator = new OpenApiGenerator({ templatePath }); - const spec = generator.generate(); - const errors = generator.getDiagnostics().filter((diagnostic) => diagnostic.severity === "error"); + function time(label, action) { + const start = performance.now(); + const result = action(); + const duration = performance.now() - start; + console.log(`${label}: ${duration.toFixed(1)}ms`); + return result; + } + + function generateProject(projectRoot) { + const templatePath = path.join(projectRoot, "next.openapi.json"); + process.chdir(projectRoot); + const generator = new OpenApiGenerator({ templatePath }); + const spec = time(`generate ${path.basename(projectRoot)}`, () => generator.generate()); + const errors = generator + .getDiagnostics() + .filter((diagnostic) => diagnostic.severity === "error"); + + if (errors.length > 0) { + throw new Error(`Unexpected generator errors: ${JSON.stringify(errors, null, 2)}`); + } - if (errors.length > 0) { - throw new Error(`Unexpected generator errors: ${JSON.stringify(errors, null, 2)}`); + return spec; } - if (!spec.paths?.["/users/{id}"]?.get) { + const coreSpec = generateProject(coreProjectRoot); + if (!coreSpec.paths?.["/users/{id}"]?.get) { throw new Error("Expected /users/{id} GET operation to be generated"); } - const checkerSmokeRoute = path.join(projectRoot, "src", "app", "api", "ts7-smoke", "route.ts"); + const tsFullSpec = generateProject(tsFullProjectRoot); + if ( + !tsFullSpec.components?.schemas?.FixedTuple || + !tsFullSpec.components?.schemas?.Versioned || + !tsFullSpec.paths?.["/utilities"]?.post + ) { + throw new Error("Expected ts-full-coverage schemas and utility route to be generated"); + } + + const checkerSmokeRoute = path.join(coreProjectRoot, "src", "app", "api", "ts7-smoke", "route.ts"); fs.mkdirSync(path.dirname(checkerSmokeRoute), { recursive: true }); fs.writeFileSync( checkerSmokeRoute, @@ -222,7 +267,16 @@ jobs: `, ); - const inferred = inferResponsesForExport(checkerSmokeRoute, "GET"); + const adapter = getTypeScriptAdapter(checkerSmokeRoute); + const expectedAdapter = process.env.EXPECTED_TYPESCRIPT_ADAPTER; + console.log(`Selected TypeScript adapter: ${adapter.kind} (${adapter.version})`); + if (expectedAdapter && expectedAdapter !== "any" && adapter.kind !== expectedAdapter) { + throw new Error(`Expected ${expectedAdapter} adapter, got ${adapter.kind}`); + } + + const inferred = time("infer checker response", () => + inferResponsesForExport(checkerSmokeRoute, "GET"), + ); const inferredResponse = inferred.responses.find( (response) => response.statusCode === "201" && response.contentType === "application/json", ); @@ -238,6 +292,40 @@ jobs: } NODE + if [[ "${TYPESCRIPT_VERSION}" == "5.9.3" ]]; then + consumer_root="$compat_root/declaration-consumer" + mkdir -p "$consumer_root/src" "$consumer_root/node_modules" + cat > "$consumer_root/package.json" <<'JSON' + { + "private": true, + "type": "module" + } + JSON + cat > "$consumer_root/tsconfig.json" <<'JSON' + { + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "target": "ES2024", + "types": ["node"] + }, + "include": ["src"] + } + JSON + cat > "$consumer_root/src/index.ts" <<'TS' + import { OpenApiGenerator } from "next-openapi-gen"; + import { withNextOpenApi } from "next-openapi-gen/next"; + + const generator = new OpenApiGenerator({ templatePath: "next.openapi.json" }); + withNextOpenApi({}); + console.log(typeof generator.generate); + TS + pnpm --dir "$consumer_root" add -D typescript@5.9.3 @types/node + ln -s "$PWD/packages/next-openapi-gen" "$consumer_root/node_modules/next-openapi-gen" + pnpm --dir "$consumer_root" exec tsc --noEmit + fi + bench-regression: name: Bench Regression runs-on: ubuntu-latest @@ -269,7 +357,10 @@ jobs: - name: Run schema micro-benchmarks and compare against baseline run: pnpm test:bench:schema:check - - name: Upload current bench report + - name: Run generator benchmarks and compare against baseline + run: pnpm test:bench:generator:check + + - name: Upload current schema bench report if: always() uses: actions/upload-artifact@v7 with: @@ -278,6 +369,15 @@ jobs: if-no-files-found: warn retention-days: 7 + - name: Upload current generator bench report + if: always() + uses: actions/upload-artifact@v7 + with: + name: generator-bench-report + path: tests/bench/generator/current.json + if-no-files-found: warn + retention-days: 7 + integration: name: Integration Tests runs-on: ubuntu-latest diff --git a/.vscode/settings.json b/.vscode/settings.json index a0cb3f4a..cf2e657b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,7 +6,7 @@ "source.fixAll.oxc": "explicit", "source.organizeImports": "explicit" }, - "typescript.tsdk": "node_modules/typescript/lib", + "typescript.tsdk": "node_modules/@typescript/native/lib", "typescript.enablePromptUseWorkspaceTsdk": true, "typescript.preferences.preferTypeOnlyAutoImports": true, "typescript.updateImportsOnFileMove.enabled": "always", diff --git a/AGENTS.md b/AGENTS.md index 72737736..b5f91c81 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -9,7 +9,7 @@ This version has breaking changes — APIs, conventions, and file structure may ## Learned User Preferences - Prefer Oxc config to stay close to standard defaults and avoid large hand-maintained rule lists unless there is a clear repo-specific need. -- Prefer simpler, direct APIs over wrapper factories or overly clever abstraction layers when they do not add clear value. Preserve existing user-facing CLI/API behavior during internal refactors, and avoid adding new config or customization surface unless it is explicitly requested. At app or API boundaries, prefer one client factory with direct method calls, inlining it when a call site uses it only once. +- Prefer simpler, direct APIs over wrapper factories or overly clever abstraction layers when they do not add clear value. Preserve existing user-facing CLI/API behavior during internal refactors, and avoid adding new config or customization surface unless it is explicitly requested; when promoting experimental options to stable config, drop legacy experimental shims rather than keeping backward-compatibility aliases unless a deprecation window is explicitly requested. At app or API boundaries, prefer one client factory with direct method calls, inlining it when a call site uses it only once; for multipart uploads, prefer explicit `@body` schemas over the bodyless `@contentType multipart/form-data` binary-`file` fallback when richer typed forms are needed. - Prefer standard, concise module names over verbose `create-*` filenames when the exported symbol already carries the constructor/factory meaning. - Prefer `.ts`/`.mts` for tool and config files when the tool supports it, with proper typing over workarounds that drop type safety; keep inherently non-TS formats as-is (`.json`, `.yaml`, `.editorconfig`, `.gitattributes`, `.gitignore`, GitHub Actions workflow files); migrate remaining JavaScript-based configs where the toolchain supports typed configs cleanly (including release tooling and example apps). - Prefer `openapi-gen` as the forward-looking CLI/config naming and `openapi-gen.config.ts` as the TypeScript config format across sample apps, but keep legacy `next-openapi-gen` and `next.openapi.json` working through a deprecation window instead of breaking existing apps immediately. @@ -26,12 +26,12 @@ This version has breaking changes — APIs, conventions, and file structure may - Shared TypeScript baselines in `packages/typescript-config` (`base.json`, `nextjs.json`) intentionally follow a stricter preset. - Workspace editor defaults live in `.vscode/`; they point TypeScript at the workspace SDK and use the Oxc VS Code extension for formatting and fixes. - Git hooks are installed via `simple-git-hooks` from the root `package.json`; `pre-commit` runs `lint-staged` with Oxfmt/Oxlint using `oxfmt.config.ts` and `oxlint.config.ts`, and `commit-msg` runs `commitlint`. Root Ox configs ignore `**/public/openapi.json`; when only such generated JSON is staged, `oxfmt` can otherwise receive no paths, so lint-staged runs `oxfmt` with `--no-error-on-unmatched-pattern` (root `package.json`). -- The workspace pins a Zod 3 compatibility catalog (and related apps) to the latest Zod 3 line; broad dependency major upgrades should not fold that track onto Zod 4. +- The workspace pins a Zod 3 compatibility catalog (and related apps) to the latest Zod 3 line; broad dependency major upgrades should not fold that track onto Zod 4. The AST Zod converter in `packages/openapi-core/src/schema/zod/zod-converter.ts` must handle Zod Mini (`zod/mini`, `zod/v4/mini`) functional APIs—`z.extend`, `z.optional`/`z.nullable`, `.check(z.minLength(...))`—via structural dispatch, not only chain forms; top-level `z.extend` on the `z` binding must not use the named-schema `.extend` pre-check. Shared nullability lives in `nullability.ts`; non-discriminated unions emit `anyOf` (not `oneOf`); `z.undefined()` union branches map to optional semantics. - Vitest coverage thresholds in `vitest.config.ts` are `80/80/80` for statements, functions, and lines; branch thresholds are `80` for packaged scopes except `openapi-core` (`73`). See `coverageScopes` in `vitest.config.ts`. -- Integration generator fixtures live under `tests/fixtures/projects/`, and `tests/helpers/test-project.ts` provides temp-copy, template-materialization, and isolated-cwd helpers for running them; the `next/app-router/core-flow` fixture carries checked-in OpenAPI `3.0`/`3.1`/`3.2` templates plus upload routes covering schema-backed and bodyless multipart request bodies, and `apps/next-app-next-config` plus `apps/next-app-zod` serve as concrete `3.1`/`3.2` examples. -- The repo now uses internal workspace packages for the generator split: `packages/openapi-core`, `packages/openapi-cli`, `packages/openapi-init`, `packages/openapi-framework-next`, `packages/openapi-framework-tanstack`, and `packages/openapi-framework-react-router`, while `packages/next-openapi-gen` remains the public compatibility facade. Published packages declare TypeScript `>=5.9 <8`; `packages/openapi-core/src/shared/typescript-runtime.ts` resolves the project-local compiler first with a bundled fallback, and the workspace catalog pins exact `5.9.3` for baseline dev installs. +- Integration generator fixtures live under `tests/fixtures/projects/`, and `tests/helpers/test-project.ts` provides temp-copy, template-materialization, and isolated-cwd helpers for running them; the `next/app-router/core-flow` fixture carries checked-in OpenAPI `3.0`/`3.1`/`3.2` templates plus upload routes covering schema-backed and bodyless multipart request bodies, and `apps/next-app-next-config` plus `apps/next-app-zod` serve as concrete `3.1`/`3.2` examples. Large-scale `*-at-scale` fixtures and app `generated/` trees are produced by `pnpm generate:scale-fixtures`; regenerate instead of hand-editing generated route or schema files, and keep them committed because CI does not run `generate:scale-fixtures` on checkout, except `apps/next-app-drizzle-zod` scale output (`src/app/api/generated/`, `src/schemas/generated/`, `src/db/schema.generated.ts`), which stays gitignored because `drizzle-zod@0.8.3` infers Zod 4 types that fail typecheck against that app's Zod 3 pin. TanStack/React Router scale routes from `scripts/fixture-scale/routes.mts` reference types via JSDoc only (no `import type` blocks), matching Next.js generated routes. +- The repo now uses internal workspace packages for the generator split: `packages/openapi-core`, `packages/openapi-cli`, `packages/openapi-init`, `packages/openapi-framework-next`, `packages/openapi-framework-tanstack`, and `packages/openapi-framework-react-router`, while `packages/next-openapi-gen` remains the public compatibility facade. Published packages declare TypeScript `>=5.9 <8`; `packages/openapi-core/src/shared/typescript-runtime.ts` resolves the project-local compiler first with a bundled fallback, routes TS 5.9/6.x through classic `lib/typescript.js`, and TS 7.x through the native adapter in `native-typescript-adapter.ts`; the workspace catalog pins exact `5.9.3` for baseline dev installs. - Built-in docs UI template assets live under `packages/next-openapi-gen/templates/init/ui/{nextjs,tanstack,reactrouter}`; `packages/next-openapi-gen/src/init/ui-registry.ts` maps UI metadata to those template files, the published package includes the `templates` directory alongside `dist`, and docs-page scaffolding dispatches by framework instead of assuming Next-only output. - `apps/next-app-adapter` is the only Next sample that should use `adapterPath` (pointing at a sibling `next-openapi.adapter.mjs`); `apps/next-app-next-config` wraps its `next.config.ts` with `withNextOpenApi` from `next-openapi-gen/next` and must stay `adapterPath`-free. - `packages/next-openapi-gen` CLI bundling in `tsup.config.ts` must externalize non-workspace runtime dependencies; bundling CommonJS packages like `commander` into the ESM CLI breaks sample-app `generate` with Node's `Dynamic require` error. A committed bin wrapper at `packages/next-openapi-gen/bin/cli.mjs` delegates to the built CLI so the `next-openapi-gen` / `openapi-gen` commands resolve in clean checkouts before any workspace build runs. Playwright e2e (`playwright.config.ts`) prebuilds the CLI workspace graph with `pnpm exec turbo run build --filter=next-openapi-gen...` so internal packages have `dist/` outputs. -- GitHub Actions CI is defined in `.github/workflows/ci.yml` (quality, build, unit, integration, coverage, parallelized E2E, `typescript-compatibility` matrix for TS 5.9.3/6/next, default-branch/`workflow_dispatch`); standard Linux jobs use `pnpm exec turbo run` for build and other tasks wired in `turbo.json` where applicable; `.github/dependabot.yml` maintains Actions dependencies; generator benchmarks use `vitest.bench.config.ts` (`pnpm test:bench`, `pnpm test:bench:vitest` under `tests/bench`), and `test:bench:schema` scopes discovery with `--dir tests/bench/schema` so Vitest does not duplicate benchmarks from `.pnpm-store`. -- OpenAPI generation writes `.openapi-gen/manifest.json` only when `NODE_ENV !== "production"`; it is dev-only metadata (for example config path, diagnostics, performance) and `.openapi-gen/` stays gitignored. Generator output must be deterministic across runs: paths are sorted by folder path, then file name, then HTTP method, so re-generating the spec does not create order-only diffs. +- GitHub Actions CI is defined in `.github/workflows/ci.yml` (quality, build, unit, integration, coverage, parallelized E2E, `typescript-compatibility` matrix for TS 5.9.3/6/7, default-branch/`workflow_dispatch`); standard Linux jobs use `pnpm exec turbo run` for build and other tasks wired in `turbo.json` where applicable; `.github/dependabot.yml` maintains Actions dependencies; generator benchmarks use `vitest.bench.config.ts` (`pnpm test:bench`, `pnpm test:bench:vitest` under `tests/bench`), with a committed generator baseline at `tests/bench/generator/baseline.json`, CLI subprocess benchmarks under `tests/bench/cli/`, and workflow notes in `docs/performance.md`; `test:bench:schema` scopes discovery with `--dir tests/bench/schema` so Vitest does not duplicate benchmarks from `.pnpm-store`. The route-parse worker bench (`tests/bench/generator/route-parse-worker.bench.ts`) needs `@babel/parser` as a direct root `devDependency` because worker threads resolve modules from the workspace root. +- OpenAPI generation writes `.openapi-gen/manifest.json` only when `NODE_ENV !== "production"`; it is dev-only metadata (for example config path, diagnostics, performance) and `.openapi-gen/` stays gitignored. Generator disk cache is on by default via top-level `cache: true` (`OPENAPI_GEN_CACHE=0`/`1` overrides); route fragments and input hashes reuse unchanged work across runs. Generator output must be deterministic across runs: paths are sorted by folder path, then file name, then HTTP method, so re-generating the spec does not create order-only diffs. Bodyless `@contentType multipart/form-data` routes without `@body` emit a required multipart body with a binary `file` field. diff --git a/README.md b/README.md index 7ccb70dd..fd1064fc 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Generate OpenAPI `3.0`, `3.1`, and `3.2` from the routes and schemas you already ### Requirements - Node.js `>=24` -- TypeScript `>=5.9 <8` for TypeScript schemas and checker-assisted response inference. The generator prefers your project-installed TypeScript and falls back to its bundled compiler when none is installed. +- TypeScript `>=5.9 <8` for TypeScript schemas and checker-assisted response inference. The generator prefers your project-installed TypeScript, uses TypeScript 7's native checker API when available, and falls back to its bundled TypeScript 6 compatibility compiler when needed. - A supported app framework: - Next.js using App Router or Pages Router - TanStack Router @@ -74,6 +74,13 @@ pnpm exec openapi-gen generate --watch Need the full setup flow, config walkthrough, or production notes? See [docs/getting-started.md](./docs/getting-started.md). +> [!NOTE] +> TypeScript 7 ships a faster native CLI and language server, but its stable +> programmatic API is still in transition. Projects can use TypeScript 7 for +> `tsc`; `next-openapi-gen` will use the native checker API when it is exposed +> by the installed package, otherwise it falls back to the bundled TypeScript 6 +> API. TypeScript 5.9 remains the minimum supported compiler for consumers. + ### What you get - `next.openapi.json` in your project root @@ -291,6 +298,9 @@ Version guidance: | `defaultResponseSet` / `responseSets` | Reusable error-response groups | | `errorConfig` | Shared error schema templates | | `authPresets` | Override or extend the `@auth` keyword → scheme-name mapping | +| `diagnostics.failOn` | CI gate: `"never"` (default), `"warning"`, or `"error"` | + +During generation, the CLI prints diagnostics grouped by severity (`error`, `warning`, `info`) and also writes them to `.openapi-gen/manifest.json` in non-production runs. Common codes include `missing-query-params-type`, `multipart-missing-body-schema`, `schema-not-found`, `schema-dir-empty`, `path-param-schema-conflict`, `unknown-zod-helper`, `unknown-zod-method`, `type-resolution-fallback`, `inferred-path-params`, `inferred-query-params`, and `inferred-body`. For a fuller setup guide, Pages Router notes, response sets, and route exclusion patterns, see [docs/getting-started.md](./docs/getting-started.md). @@ -318,7 +328,7 @@ patterns, see [docs/getting-started.md](./docs/getting-started.md). | `@openapi-override` | Deep-merge extra OpenAPI fields onto the operation | | `@ignore` | Exclude a route from generation | | `@internal` | Exclude a schema/type declaration from `components/schemas` | -| `@method` | Required HTTP method tag for Pages Router handlers | +| `@method` | Override or declare the HTTP method; `QUERY` emits OpenAPI 3.2 `additionalOperations` | For the complete tag guide and usage recipes, see [docs/jsdoc-reference.md](./docs/jsdoc-reference.md). @@ -442,11 +452,14 @@ pnpm exec openapi-gen generate --watch ### `generate` options -| Option | Purpose | -| ------------ | --------------------------------------------- | -| `--config` | Use a specific config file | -| `--template` | Merge a specific OpenAPI template or fragment | -| `--watch` | Regenerate when routes or schema files change | +| Option | Purpose | +| ------------ | ------------------------------------------------------------------------ | +| `--config` | Use a specific config file | +| `--template` | Merge a specific OpenAPI template or fragment | +| `--watch` | Regenerate when routes or schema files change | +| `--fail-on` | Exit with an error when diagnostics reach `error`, `warning`, or `never` | + +Generated diagnostics are printed after each run and recorded in `.openapi-gen/manifest.json` (development only) for automation and CI review. ## Contributing diff --git a/apps/next-app-adapter/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..957051af --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId adapterAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId adapterAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId adapterAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/api-keys/route.ts b/apps/next-app-adapter/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..12569195 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId adapterAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId adapterAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..0bb3ba47 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId adapterAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId adapterAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId adapterAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/attachments/route.ts b/apps/next-app-adapter/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..2ea31a57 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId adapterAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId adapterAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..576e3852 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId adapterAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId adapterAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId adapterAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/audit-logs/route.ts b/apps/next-app-adapter/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..08e2705d --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId adapterAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId adapterAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..b6844d25 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId adapterAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId adapterAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId adapterAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/catalog-items/route.ts b/apps/next-app-adapter/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..22816d61 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId adapterAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId adapterAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..fe3dfd38 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId adapterAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId adapterAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId adapterAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/comments/route.ts b/apps/next-app-adapter/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..04dfa4a4 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId adapterAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId adapterAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..86dd308c --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId adapterAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId adapterAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId adapterAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/customers/route.ts b/apps/next-app-adapter/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..746101dc --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId adapterAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId adapterAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..a3c0ef95 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId adapterAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId adapterAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId adapterAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/departments/route.ts b/apps/next-app-adapter/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..b15ec34f --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId adapterAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId adapterAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..57fcc57f --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId adapterAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId adapterAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId adapterAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/documents/route.ts b/apps/next-app-adapter/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..71bf8dbd --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId adapterAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId adapterAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..3935e758 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId adapterAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId adapterAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId adapterAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/exports/route.ts b/apps/next-app-adapter/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..ae343f40 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId adapterAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId adapterAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..df55506b --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId adapterAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId adapterAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId adapterAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/invoices/route.ts b/apps/next-app-adapter/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..96d60dee --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId adapterAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId adapterAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/members/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..432ff518 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId adapterAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId adapterAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId adapterAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/members/route.ts b/apps/next-app-adapter/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..b0501a8d --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId adapterAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId adapterAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..394dbe63 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId adapterAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId adapterAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId adapterAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/notifications/route.ts b/apps/next-app-adapter/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..a240f562 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId adapterAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId adapterAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..445487b8 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId adapterAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId adapterAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId adapterAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/orders/route.ts b/apps/next-app-adapter/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..0f8ef50a --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId adapterAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId adapterAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..89955759 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId adapterAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId adapterAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId adapterAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..0d0ae933 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId adapterAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId adapterAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..927a8984 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId adapterAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId adapterAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId adapterAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/organizations/route.ts b/apps/next-app-adapter/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..f9595f77 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId adapterAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId adapterAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..3c5f8578 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId adapterAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId adapterAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId adapterAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/payments/route.ts b/apps/next-app-adapter/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..215a34a4 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId adapterAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId adapterAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/products/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..b62d961a --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId adapterAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId adapterAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId adapterAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/products/route.ts b/apps/next-app-adapter/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..209934fb --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId adapterAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId adapterAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..fc036b7e --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId adapterAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId adapterAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId adapterAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-adapter/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..4c18d639 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId adapterAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId adapterAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..d7f7a890 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId adapterAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId adapterAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId adapterAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/refunds/route.ts b/apps/next-app-adapter/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..dc87fba3 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId adapterAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId adapterAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..88c1be09 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId adapterAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId adapterAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId adapterAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/reports/route.ts b/apps/next-app-adapter/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..d7b24147 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId adapterAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId adapterAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..dd4b3293 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId adapterAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId adapterAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId adapterAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/sessions/route.ts b/apps/next-app-adapter/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..e6718025 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId adapterAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId adapterAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..89a3970d --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId adapterAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId adapterAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId adapterAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/subscriptions/route.ts b/apps/next-app-adapter/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..5657ead6 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId adapterAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId adapterAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..04d5d678 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId adapterAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId adapterAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId adapterAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/teams/route.ts b/apps/next-app-adapter/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..b6dc18d6 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId adapterAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId adapterAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..b709cdac --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId adapterAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId adapterAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId adapterAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/webhooks/route.ts b/apps/next-app-adapter/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..80efe75e --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId adapterAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId adapterAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-adapter/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..aa28e973 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId adapterAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId adapterAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId adapterAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/app/api/generated/workspaces/route.ts b/apps/next-app-adapter/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..6a4d6602 --- /dev/null +++ b/apps/next-app-adapter/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId adapterAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId adapterAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-adapter/src/schemas/generated/api-keys-entity.ts b/apps/next-app-adapter/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/api-keys-input.ts b/apps/next-app-adapter/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/attachments-entity.ts b/apps/next-app-adapter/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/attachments-input.ts b/apps/next-app-adapter/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/audit-logs-entity.ts b/apps/next-app-adapter/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/audit-logs-input.ts b/apps/next-app-adapter/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/catalog-items-entity.ts b/apps/next-app-adapter/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/catalog-items-input.ts b/apps/next-app-adapter/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/comments-entity.ts b/apps/next-app-adapter/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/comments-input.ts b/apps/next-app-adapter/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/customers-entity.ts b/apps/next-app-adapter/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/customers-input.ts b/apps/next-app-adapter/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/departments-entity.ts b/apps/next-app-adapter/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/departments-input.ts b/apps/next-app-adapter/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/documents-entity.ts b/apps/next-app-adapter/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/documents-input.ts b/apps/next-app-adapter/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/exports-entity.ts b/apps/next-app-adapter/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/exports-input.ts b/apps/next-app-adapter/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/invoices-entity.ts b/apps/next-app-adapter/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/invoices-input.ts b/apps/next-app-adapter/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/members-entity.ts b/apps/next-app-adapter/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/members-input.ts b/apps/next-app-adapter/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/notifications-entity.ts b/apps/next-app-adapter/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/notifications-input.ts b/apps/next-app-adapter/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/orders-entity.ts b/apps/next-app-adapter/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/orders-input.ts b/apps/next-app-adapter/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/organizations-entity.ts b/apps/next-app-adapter/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/organizations-input.ts b/apps/next-app-adapter/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/payments-entity.ts b/apps/next-app-adapter/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/payments-input.ts b/apps/next-app-adapter/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/products-entity.ts b/apps/next-app-adapter/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/products-input.ts b/apps/next-app-adapter/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/projects-entity.ts b/apps/next-app-adapter/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/projects-input.ts b/apps/next-app-adapter/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/refunds-entity.ts b/apps/next-app-adapter/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/refunds-input.ts b/apps/next-app-adapter/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/reports-entity.ts b/apps/next-app-adapter/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/reports-input.ts b/apps/next-app-adapter/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/sessions-entity.ts b/apps/next-app-adapter/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/sessions-input.ts b/apps/next-app-adapter/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/subscriptions-entity.ts b/apps/next-app-adapter/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/subscriptions-input.ts b/apps/next-app-adapter/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/tasks-entity.ts b/apps/next-app-adapter/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/tasks-input.ts b/apps/next-app-adapter/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/teams-entity.ts b/apps/next-app-adapter/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/teams-input.ts b/apps/next-app-adapter/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/webhooks-entity.ts b/apps/next-app-adapter/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/webhooks-input.ts b/apps/next-app-adapter/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/workspaces-entity.ts b/apps/next-app-adapter/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/apps/next-app-adapter/src/schemas/generated/workspaces-input.ts b/apps/next-app-adapter/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/apps/next-app-adapter/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-drizzle-zod/.gitignore b/apps/next-app-drizzle-zod/.gitignore index 7f1a39c0..9c7872be 100644 --- a/apps/next-app-drizzle-zod/.gitignore +++ b/apps/next-app-drizzle-zod/.gitignore @@ -6,3 +6,9 @@ build *.log .env*.local .vercelignore + +# Scale benchmark routes/schemas from `pnpm generate:scale-fixtures --target=apps`. +# drizzle-zod@0.8.3 infers Zod 4 types that fail typecheck against this app's Zod 3 pin. +src/app/api/generated/ +src/schemas/generated/ +src/db/schema.generated.ts diff --git a/apps/next-app-drizzle-zod/public/openapi.json b/apps/next-app-drizzle-zod/public/openapi.json index 1b71eef1..fa3ecdaf 100644 --- a/apps/next-app-drizzle-zod/public/openapi.json +++ b/apps/next-app-drizzle-zod/public/openapi.json @@ -32,7 +32,8 @@ "pattern": "^\\d+$", "description": "Page number" }, - "description": "Page number" + "description": "Page number", + "example": 1 }, { "in": "query", @@ -43,7 +44,8 @@ "pattern": "^\\d+$", "description": "Items per page" }, - "description": "Items per page" + "description": "Items per page", + "example": "example" }, { "in": "query", @@ -53,7 +55,8 @@ "type": "string", "description": "Case-insensitive author search" }, - "description": "Case-insensitive author search" + "description": "Case-insensitive author search", + "example": "example" }, { "in": "query", @@ -67,7 +70,8 @@ ], "description": "Sort mode" }, - "description": "Sort mode" + "description": "Sort mode", + "example": "example" } ], "responses": { @@ -294,7 +298,8 @@ "pattern": "^\\d+$", "description": "Page number" }, - "description": "Page number" + "description": "Page number", + "example": 1 }, { "in": "query", @@ -305,7 +310,8 @@ "pattern": "^\\d+$", "description": "Items per page" }, - "description": "Items per page" + "description": "Items per page", + "example": "example" }, { "in": "query", @@ -319,7 +325,8 @@ ], "description": "Filter by publication status" }, - "description": "Filter by publication status" + "description": "Filter by publication status", + "example": "example" }, { "in": "query", @@ -330,7 +337,8 @@ "pattern": "^\\d+$", "description": "Filter by author ID" }, - "description": "Filter by author ID" + "description": "Filter by author ID", + "example": "123" } ], "responses": { @@ -673,47 +681,58 @@ "CreateAuthorSchema": { "type": "object", "properties": { - "bio": { + "name": { "type": "string", - "maxLength": 280, - "description": "Author biography" + "maxLength": 100, + "minLength": 2, + "description": "Author display name" }, "email": { "type": "string", + "maxLength": 255, "format": "email", "description": "Author email address" }, - "name": { + "bio": { "type": "string", - "minLength": 2, - "maxLength": 100, - "description": "Author display name" + "nullable": true, + "maxLength": 280, + "description": "Author biography" + }, + "avatarUrl": { + "type": "string", + "maxLength": 500, + "nullable": true } }, "required": [ - "email", - "name" + "name", + "email" ] }, "CreatePostSchema": { "type": "object", "properties": { + "id": { + "type": "integer" + }, "title": { "type": "string", - "minLength": 5, "maxLength": 255, + "minLength": 5, "description": "Post title" }, "slug": { "type": "string", - "minLength": 3, "maxLength": 255, + "minLength": 3, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "URL-friendly slug" }, "excerpt": { "type": "string", "maxLength": 500, + "nullable": true, "description": "Short excerpt of the post" }, "content": { @@ -725,11 +744,22 @@ "type": "boolean", "description": "Whether the post is published" }, + "viewCount": { + "type": "integer" + }, "authorId": { "type": "integer", "minimum": 0, "exclusiveMinimum": true, "description": "ID of the post author" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" } }, "required": [ @@ -845,21 +875,24 @@ "UpdateAuthorSchema": { "type": "object", "properties": { - "avatarUrl": { + "name": { "type": "string", - "format": "uri", - "description": "Author avatar URL" + "maxLength": 100, + "minLength": 2, + "description": "Author display name" }, "bio": { "type": "string", + "nullable": true, "maxLength": 280, "description": "Author biography" }, - "name": { + "avatarUrl": { "type": "string", - "minLength": 2, - "maxLength": 100, - "description": "Author display name" + "maxLength": 500, + "nullable": true, + "format": "uri", + "description": "Author avatar URL" } }, "required": [] @@ -869,18 +902,20 @@ "properties": { "title": { "type": "string", - "minLength": 5, "maxLength": 255, + "minLength": 5, "description": "Post title" }, "slug": { "type": "string", + "maxLength": 255, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "URL-friendly slug" }, "excerpt": { "type": "string", "maxLength": 500, + "nullable": true, "description": "Short excerpt" }, "content": { diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..c67ccd0d --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId mixedAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId mixedAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId mixedAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/api-keys/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..b9b545d9 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId mixedAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId mixedAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..34a5dd19 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId mixedAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId mixedAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId mixedAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/attachments/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..f7a497e1 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId mixedAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId mixedAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..1e40806c --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId mixedAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId mixedAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId mixedAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/audit-logs/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..22220e42 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId mixedAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId mixedAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..2aa450f5 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId mixedAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId mixedAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId mixedAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/catalog-items/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..48599ed7 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId mixedAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId mixedAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..9c6c045d --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId mixedAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId mixedAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId mixedAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/comments/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..7db77ae2 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId mixedAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId mixedAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..0fd36580 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId mixedAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId mixedAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId mixedAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/customers/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..89435e1c --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId mixedAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId mixedAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..4821ead8 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId mixedAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId mixedAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId mixedAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/departments/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..3598ec97 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId mixedAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId mixedAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..9316b401 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId mixedAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId mixedAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId mixedAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/documents/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..bb4700dc --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId mixedAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId mixedAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..0cffff67 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId mixedAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId mixedAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId mixedAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/exports/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..ce4fa630 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId mixedAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId mixedAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..ac4dcc87 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId mixedAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId mixedAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId mixedAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/invoices/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..637291f8 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId mixedAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId mixedAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/members/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..08341ccd --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId mixedAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId mixedAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId mixedAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/members/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..7d10d3a3 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId mixedAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId mixedAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..80f45aa9 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId mixedAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId mixedAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId mixedAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/notifications/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..127b7d62 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId mixedAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId mixedAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..c7abc202 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId mixedAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId mixedAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId mixedAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/orders/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..bf61bb6d --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId mixedAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId mixedAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..93636bf0 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId mixedAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId mixedAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId mixedAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..094398c0 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId mixedAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId mixedAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..cc69a45d --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId mixedAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId mixedAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId mixedAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/organizations/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..9a54df4b --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId mixedAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId mixedAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..680b5792 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId mixedAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId mixedAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId mixedAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/payments/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..d92839ca --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId mixedAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId mixedAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/products/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..fefe1f58 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId mixedAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId mixedAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId mixedAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/products/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..cd639a39 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId mixedAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId mixedAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..15798eb6 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId mixedAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId mixedAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId mixedAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..96b0b1dd --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId mixedAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId mixedAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..2b846a47 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId mixedAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId mixedAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId mixedAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/refunds/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..7364ce7d --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId mixedAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId mixedAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..e85f8d88 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId mixedAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId mixedAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId mixedAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/reports/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..4c0372ee --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId mixedAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId mixedAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..771d0c21 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId mixedAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId mixedAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId mixedAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/sessions/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..601aa8b2 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId mixedAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId mixedAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..dc1f36a7 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId mixedAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId mixedAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId mixedAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/subscriptions/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..27ffa170 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId mixedAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId mixedAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..55887153 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId mixedAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId mixedAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId mixedAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/teams/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..7e94ff38 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId mixedAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId mixedAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..a6637db8 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId mixedAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId mixedAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId mixedAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/webhooks/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..85664a5d --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId mixedAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId mixedAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..f17b39bc --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId mixedAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId mixedAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId mixedAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/app/api/generated/workspaces/route.ts b/apps/next-app-mixed-schemas/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..dd90cb12 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId mixedAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId mixedAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/audit-logs-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..bd9b8931 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/audit-logs-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..34e13d87 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAuditLogSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/comments-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..44db99e6 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/comments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/comments-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..840de293 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/comments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCommentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/departments-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..92c51920 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/departments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/departments-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..d3705544 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/departments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDepartmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/invoices-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..cbab42ff --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/invoices-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..07d279d2 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/invoices-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateInvoiceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/members-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..8a5c5ccd --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/members-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/members-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..fdccd311 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/members-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateMemberSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/orders-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..2bf76fbb --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/orders-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/orders-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..9826c38f --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/orders-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrderSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/refunds-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..9d9867ee --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/refunds-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..f90e1386 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/refunds-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateRefundSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/reports-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..2981e8f1 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/reports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/reports-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..d65dbc4c --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/reports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateReportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateReportSchema = CreateReportSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/sessions-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..9880f94b --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/sessions-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..00d4afeb --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/sessions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSessionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/tasks-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..09677f29 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().uuid(), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().uuid(), + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/tasks-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..0c1422c3 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/tasks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTaskSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/webhooks-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..ddb257ab --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/webhooks-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..61a0e181 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWebhookSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/workspaces-entity.ts b/apps/next-app-mixed-schemas/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..20d92e0e --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-mixed-schemas/src/schemas/generated/workspaces-input.ts b/apps/next-app-mixed-schemas/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..e6b80db9 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWorkspaceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); diff --git a/apps/next-app-mixed-schemas/src/types/generated/api-keys-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/api-keys-input.ts b/apps/next-app-mixed-schemas/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/attachments-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/attachments-input.ts b/apps/next-app-mixed-schemas/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/catalog-items-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/catalog-items-input.ts b/apps/next-app-mixed-schemas/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/customers-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/customers-input.ts b/apps/next-app-mixed-schemas/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/documents-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/documents-input.ts b/apps/next-app-mixed-schemas/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/exports-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/exports-input.ts b/apps/next-app-mixed-schemas/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/notifications-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/notifications-input.ts b/apps/next-app-mixed-schemas/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/organizations-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/organizations-input.ts b/apps/next-app-mixed-schemas/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/payments-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/payments-input.ts b/apps/next-app-mixed-schemas/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/products-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/products-input.ts b/apps/next-app-mixed-schemas/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/projects-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/projects-input.ts b/apps/next-app-mixed-schemas/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/subscriptions-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/subscriptions-input.ts b/apps/next-app-mixed-schemas/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/teams-entity.ts b/apps/next-app-mixed-schemas/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/next-app-mixed-schemas/src/types/generated/teams-input.ts b/apps/next-app-mixed-schemas/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/next-app-mixed-schemas/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..6f177b1b --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId nextConfigAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId nextConfigAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId nextConfigAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/api-keys/route.ts b/apps/next-app-next-config/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..d6e7a635 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId nextConfigAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId nextConfigAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..65ced679 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId nextConfigAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId nextConfigAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId nextConfigAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/attachments/route.ts b/apps/next-app-next-config/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..43c3480f --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId nextConfigAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId nextConfigAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..70f7f4a8 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId nextConfigAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId nextConfigAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId nextConfigAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/audit-logs/route.ts b/apps/next-app-next-config/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..cf8fb9f5 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId nextConfigAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId nextConfigAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..cdb13aa8 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId nextConfigAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId nextConfigAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId nextConfigAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/catalog-items/route.ts b/apps/next-app-next-config/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..6bd4e430 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId nextConfigAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId nextConfigAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..f25162fa --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId nextConfigAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId nextConfigAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId nextConfigAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/comments/route.ts b/apps/next-app-next-config/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..1b90614e --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId nextConfigAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId nextConfigAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..b0d62755 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId nextConfigAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId nextConfigAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId nextConfigAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/customers/route.ts b/apps/next-app-next-config/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..ff190965 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId nextConfigAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId nextConfigAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..5aeb64b6 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId nextConfigAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId nextConfigAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId nextConfigAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/departments/route.ts b/apps/next-app-next-config/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..3c920286 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId nextConfigAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId nextConfigAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..740032a4 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId nextConfigAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId nextConfigAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId nextConfigAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/documents/route.ts b/apps/next-app-next-config/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..7f723b79 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId nextConfigAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId nextConfigAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..eadd5f8f --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId nextConfigAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId nextConfigAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId nextConfigAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/exports/route.ts b/apps/next-app-next-config/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..938400da --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId nextConfigAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId nextConfigAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..688e2164 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId nextConfigAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId nextConfigAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId nextConfigAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/invoices/route.ts b/apps/next-app-next-config/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..49bd848d --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId nextConfigAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId nextConfigAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/members/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..d7c186b2 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId nextConfigAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId nextConfigAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId nextConfigAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/members/route.ts b/apps/next-app-next-config/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..68500526 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId nextConfigAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId nextConfigAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..8d048967 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId nextConfigAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId nextConfigAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId nextConfigAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/notifications/route.ts b/apps/next-app-next-config/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..e0c78440 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId nextConfigAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId nextConfigAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..b60ea343 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId nextConfigAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId nextConfigAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId nextConfigAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/orders/route.ts b/apps/next-app-next-config/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..5ac55ebd --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId nextConfigAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId nextConfigAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..0bcf2a06 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId nextConfigAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId nextConfigAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId nextConfigAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..82b022ca --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId nextConfigAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId nextConfigAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..aff33fdd --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId nextConfigAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId nextConfigAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId nextConfigAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/organizations/route.ts b/apps/next-app-next-config/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..cf587f5c --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId nextConfigAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId nextConfigAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..2b027db1 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId nextConfigAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId nextConfigAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId nextConfigAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/payments/route.ts b/apps/next-app-next-config/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..9078ba9f --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId nextConfigAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId nextConfigAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/products/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..b57dc05c --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId nextConfigAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId nextConfigAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId nextConfigAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/products/route.ts b/apps/next-app-next-config/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..e2b20624 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId nextConfigAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId nextConfigAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..ef1e6091 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId nextConfigAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId nextConfigAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId nextConfigAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-next-config/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..0bf72f12 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId nextConfigAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId nextConfigAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..5a0cbb08 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId nextConfigAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId nextConfigAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId nextConfigAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/refunds/route.ts b/apps/next-app-next-config/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..69263275 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId nextConfigAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId nextConfigAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..8fc4d042 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId nextConfigAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId nextConfigAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId nextConfigAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/reports/route.ts b/apps/next-app-next-config/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..8b3e376d --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId nextConfigAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId nextConfigAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..2f8d1346 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId nextConfigAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId nextConfigAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId nextConfigAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/sessions/route.ts b/apps/next-app-next-config/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..78b066f1 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId nextConfigAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId nextConfigAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..04017cd4 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId nextConfigAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId nextConfigAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId nextConfigAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/subscriptions/route.ts b/apps/next-app-next-config/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..1df6def1 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId nextConfigAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId nextConfigAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..595876c2 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId nextConfigAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId nextConfigAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId nextConfigAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/teams/route.ts b/apps/next-app-next-config/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..2281b374 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId nextConfigAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId nextConfigAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..14f3b1ba --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId nextConfigAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId nextConfigAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId nextConfigAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/webhooks/route.ts b/apps/next-app-next-config/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..d61e8f91 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId nextConfigAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId nextConfigAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-next-config/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..03365fa6 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId nextConfigAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId nextConfigAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId nextConfigAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/app/api/generated/workspaces/route.ts b/apps/next-app-next-config/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..195df831 --- /dev/null +++ b/apps/next-app-next-config/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId nextConfigAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId nextConfigAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-next-config/src/schemas/generated/api-keys-entity.ts b/apps/next-app-next-config/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/api-keys-input.ts b/apps/next-app-next-config/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/attachments-entity.ts b/apps/next-app-next-config/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/attachments-input.ts b/apps/next-app-next-config/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/audit-logs-entity.ts b/apps/next-app-next-config/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/audit-logs-input.ts b/apps/next-app-next-config/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/catalog-items-entity.ts b/apps/next-app-next-config/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/catalog-items-input.ts b/apps/next-app-next-config/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/comments-entity.ts b/apps/next-app-next-config/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/comments-input.ts b/apps/next-app-next-config/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/customers-entity.ts b/apps/next-app-next-config/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/customers-input.ts b/apps/next-app-next-config/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/departments-entity.ts b/apps/next-app-next-config/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/departments-input.ts b/apps/next-app-next-config/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/documents-entity.ts b/apps/next-app-next-config/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/documents-input.ts b/apps/next-app-next-config/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/exports-entity.ts b/apps/next-app-next-config/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/exports-input.ts b/apps/next-app-next-config/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/invoices-entity.ts b/apps/next-app-next-config/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/invoices-input.ts b/apps/next-app-next-config/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/members-entity.ts b/apps/next-app-next-config/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/members-input.ts b/apps/next-app-next-config/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/notifications-entity.ts b/apps/next-app-next-config/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/notifications-input.ts b/apps/next-app-next-config/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/orders-entity.ts b/apps/next-app-next-config/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/orders-input.ts b/apps/next-app-next-config/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/organizations-entity.ts b/apps/next-app-next-config/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/organizations-input.ts b/apps/next-app-next-config/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/payments-entity.ts b/apps/next-app-next-config/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/payments-input.ts b/apps/next-app-next-config/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/products-entity.ts b/apps/next-app-next-config/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/products-input.ts b/apps/next-app-next-config/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/projects-entity.ts b/apps/next-app-next-config/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/projects-input.ts b/apps/next-app-next-config/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/refunds-entity.ts b/apps/next-app-next-config/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/refunds-input.ts b/apps/next-app-next-config/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/reports-entity.ts b/apps/next-app-next-config/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/reports-input.ts b/apps/next-app-next-config/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/sessions-entity.ts b/apps/next-app-next-config/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/sessions-input.ts b/apps/next-app-next-config/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/subscriptions-entity.ts b/apps/next-app-next-config/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/subscriptions-input.ts b/apps/next-app-next-config/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/tasks-entity.ts b/apps/next-app-next-config/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/tasks-input.ts b/apps/next-app-next-config/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/teams-entity.ts b/apps/next-app-next-config/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/teams-input.ts b/apps/next-app-next-config/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/webhooks-entity.ts b/apps/next-app-next-config/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/webhooks-input.ts b/apps/next-app-next-config/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/workspaces-entity.ts b/apps/next-app-next-config/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/apps/next-app-next-config/src/schemas/generated/workspaces-input.ts b/apps/next-app-next-config/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/apps/next-app-next-config/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/next.openapi.json b/apps/next-app-sandbox/next.openapi.json index eb5f5e5d..20c49846 100644 --- a/apps/next-app-sandbox/next.openapi.json +++ b/apps/next-app-sandbox/next.openapi.json @@ -64,7 +64,7 @@ } }, "apiDir": "./src/app/api", - "schemaDir": "./src/app/api/types", + "schemaDir": ["./src/app/api/types", "./src/schemas"], "docsUrl": "api-docs", "schemaType": "zod", "ui": "scalar", diff --git a/apps/next-app-sandbox/public/openapi.json b/apps/next-app-sandbox/public/openapi.json index 3a4fa866..45dbf5d5 100644 --- a/apps/next-app-sandbox/public/openapi.json +++ b/apps/next-app-sandbox/public/openapi.json @@ -175,474 +175,9520 @@ } } }, - "CoerceBody": { + "ApiKeyEntity": { "type": "object", "properties": { - "traceId": { - "$ref": "#/components/schemas/TraceId" + "id": { + "type": "string" }, - "amount": { - "type": "number", - "minimum": 0 + "name": { + "type": "string" }, - "email": { + "description": { "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] } }, "required": [ - "traceId", - "amount", - "email" + "id", + "name", + "active", + "status" ] }, - "CoerceQuery": { + "ApiKeyIdParams": { "type": "object", "properties": { - "count": { - "default": 10, - "type": "integer", - "minimum": 0, - "maximum": 1000 - }, - "active": { - "type": "boolean" - }, - "since": { - "type": "string", - "format": "date-time" + "id": { + "type": "string" } }, "required": [ - "count" + "id" ] }, - "CoerceResponse": { + "ApiKeyListQuery": { "type": "object", "properties": { - "ok": { - "type": "boolean", + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", "enum": [ - true + "true", + "false" ] + } + } + }, + "ApiKeyListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } }, - "echoed": { - "$ref": "#/components/schemas/CoerceBody" + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" } }, "required": [ - "ok", - "echoed" + "items", + "total", + "page", + "limit" ] }, - "DashboardResponse": { + "AttachmentEntity": { "type": "object", "properties": { "id": { - "type": "string", - "description": "Dashboard ID" + "type": "string" }, "name": { - "type": "string", - "description": "Dashboard name" + "type": "string" }, - "widgets": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Widget IDs" + "description": { + "type": "string" }, - "userId": { + "active": { + "type": "boolean" + }, + "status": { "type": "string", - "description": "Owner user ID" + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" } }, "required": [ "id", "name", - "widgets", - "userId" + "active", + "status", + "createdAt", + "updatedAt" ] }, - "GetUserProfilePathParams": { + "AttachmentIdParams": { "type": "object", "properties": { "id": { - "type": "string", - "description": "User ID" + "type": "string" } }, "required": [ "id" ] }, - "Image": { + "AttachmentListQuery": { "type": "object", "properties": { - "url": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { "type": "string", - "description": "The url" + "enum": [ + "true", + "false" + ] + } + } + }, + "AttachmentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" } }, "required": [ - "url" + "items", + "total", + "page", + "limit" ] }, - "LoginRequest": { + "AuditLogEntity": { "type": "object", "properties": { - "email": { - "type": "string", - "format": "email", - "description": "User email address" + "id": { + "type": "string" }, - "password": { - "type": "string", - "minLength": 6, - "description": "User password" + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" } }, "required": [ - "email", - "password" + "id", + "name", + "active" ] }, - "LoginResponse": { + "AuditLogIdParams": { "type": "object", "properties": { - "token": { - "type": "string", - "description": "JWT access token" - }, - "user": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "email": { - "type": "string", - "format": "email", - "description": "User email" - }, - "name": { - "type": "string", - "description": "User full name" - } - }, - "required": [ - "id", - "email", - "name" - ], - "description": "User information" + "id": { + "type": "string" } }, "required": [ - "token", - "user" + "id" ] }, - "ProfileDraft": { + "AuditLogListQuery": { "type": "object", "properties": { - "avatar": { - "type": "object", - "properties": { - "url": { - "type": "string", - "format": "uri", - "description": "Avatar URL" - } - }, - "required": [ - "url" - ], - "nullable": true, - "description": "Nullable avatar" + "page": { + "type": "string" }, - "banner": { - "type": "object", - "properties": { - "url": { - "type": "string", - "format": "uri", - "description": "Banner URL" - } - }, - "required": [ - "url" - ], - "nullable": true, - "description": "Nullish banner" + "limit": { + "type": "string" }, - "displayName": { + "search": { + "type": "string" + }, + "active": { "type": "string", - "description": "Optional public display name" + "enum": [ + "true", + "false" + ] + } + } + }, + "AuditLogListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" } }, "required": [ - "avatar" + "items", + "total", + "page", + "limit" ] }, - "ProfileFilters": { + "CatalogItemEntity": { "type": "object", "properties": { - "includeHidden": { - "type": "boolean", - "description": "Include hidden profiles" + "id": { + "type": "string" }, - "q": { - "type": "string", - "description": "Search term" + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" } - } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] }, - "SearchQueryParams": { + "CatalogItemIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CatalogItemListQuery": { "type": "object", "properties": { - "q": { - "type": "string", - "description": "Search query" - }, "page": { - "type": "number", - "description": "Page number" + "type": "string" }, "limit": { - "type": "number", - "description": "Items per page" + "type": "string" }, - "sort": { + "search": { + "type": "string" + }, + "active": { "type": "string", "enum": [ - "asc", - "desc" - ], - "description": "Sort order" + "true", + "false" + ] } - }, - "required": [ - "q" - ] + } }, - "SearchResponse": { + "CatalogItemListResponse": { "type": "object", "properties": { - "results": { + "items": { "type": "array", "items": { "type": "object", "properties": { "id": { - "type": "string", - "description": "Result ID" + "type": "string" }, - "title": { - "type": "string", - "description": "Result title" + "name": { + "type": "string" }, - "score": { - "type": "number", - "description": "Relevance score" + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" } }, "required": [ "id", - "title", - "score" + "name", + "active", + "createdAt", + "updatedAt" ] - }, - "description": "Search results" + } }, "total": { - "type": "number", - "description": "Total results found" + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" } }, "required": [ - "results", - "total" + "items", + "total", + "page", + "limit" ] }, - "TraceId": { - "type": "string", - "format": "nanoid" + "CoerceBody": { + "type": "object", + "properties": { + "traceId": { + "$ref": "#/components/schemas/TraceId" + }, + "amount": { + "type": "number", + "minimum": 0 + }, + "email": { + "type": "string" + } + }, + "required": [ + "traceId", + "amount", + "email" + ] }, - "User": { + "CoerceQuery": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "Full name of the user" + "count": { + "default": 10, + "type": "integer", + "minimum": 0, + "maximum": 1000 }, - "profileImage": { - "allOf": [ - { - "$ref": "#/components/schemas/Image" - } - ], - "description": "The profile image" + "active": { + "type": "boolean" }, - "avatar": { - "$ref": "#/components/schemas/Image", - "description": "The avatar image", - "nullable": true + "since": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "count" + ] + }, + "CoerceResponse": { + "type": "object", + "properties": { + "ok": { + "type": "boolean", + "enum": [ + true + ] }, - "banner": { - "$ref": "#/components/schemas/Image", - "description": "The banner image", - "nullable": true + "echoed": { + "$ref": "#/components/schemas/CoerceBody" } }, "required": [ - "name", - "avatar" + "ok", + "echoed" ] }, - "Users": { + "CommentEntity": { "type": "object", "properties": { "id": { - "type": "string", - "description": "User ID" + "type": "string" }, "name": { "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" } }, "required": [ "id", - "name" + "name", + "active" ] }, - "UserSettings": { + "CommentIdParams": { "type": "object", "properties": { - "theme": { - "type": "string", - "enum": [ - "light", - "dark" - ], - "description": "UI theme preference" + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CommentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" }, - "notifications": { - "type": "boolean", - "description": "Enable notifications" + "limit": { + "type": "string" }, - "language": { - "type": "string", - "description": "Preferred language" + "search": { + "type": "string" }, - "timezone": { + "active": { "type": "string", - "description": "User timezone" + "enum": [ + "true", + "false" + ] } - }, - "required": [ - "theme", - "notifications", - "language", - "timezone" + } + }, + "CommentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "CreateApiKeyInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateAttachmentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateAuditLogInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateCatalogItemInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateCommentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateCustomerInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateDepartmentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateDocumentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateExportInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateInvoiceInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateMemberInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateNotificationInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateOrderInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" ] + }, + "CreateOrganizationInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreatePaymentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateProductInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateProjectInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateRefundInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateReportInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateSessionInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateSubscriptionInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateTaskInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateTeamInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateWebhookInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateWorkspaceInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CustomerEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + }, + "CustomerIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CustomerListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "CustomerListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "DashboardResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Dashboard ID" + }, + "name": { + "type": "string", + "description": "Dashboard name" + }, + "widgets": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Widget IDs" + }, + "userId": { + "type": "string", + "description": "Owner user ID" + } + }, + "required": [ + "id", + "name", + "widgets", + "userId" + ] + }, + "DepartmentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "DepartmentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "DepartmentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "DepartmentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "DocumentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "DocumentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "DocumentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "DocumentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ExportEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ExportIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ExportListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ExportListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "GetUserProfilePathParams": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + } + }, + "required": [ + "id" + ] + }, + "Image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The url" + } + }, + "required": [ + "url" + ] + }, + "InvoiceEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "InvoiceIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "InvoiceListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "InvoiceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "LoginRequest": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "description": "User email address" + }, + "password": { + "type": "string", + "minLength": 6, + "description": "User password" + } + }, + "required": [ + "email", + "password" + ] + }, + "LoginResponse": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "JWT access token" + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "email": { + "type": "string", + "format": "email", + "description": "User email" + }, + "name": { + "type": "string", + "description": "User full name" + } + }, + "required": [ + "id", + "email", + "name" + ], + "description": "User information" + } + }, + "required": [ + "token", + "user" + ] + }, + "MemberEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "MemberIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "MemberListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "MemberListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "NotificationEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + }, + "NotificationIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "NotificationListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "NotificationListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "OrderEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "OrderIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "OrderListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "OrderListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "OrganizationEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "OrganizationIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "OrganizationListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "OrganizationListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "PaymentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "PaymentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "PaymentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "PaymentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ProductEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "ProductIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ProductListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ProductListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ProfileDraft": { + "type": "object", + "properties": { + "avatar": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "Avatar URL" + } + }, + "required": [ + "url" + ], + "nullable": true, + "description": "Nullable avatar" + }, + "banner": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "Banner URL" + } + }, + "required": [ + "url" + ], + "nullable": true, + "description": "Nullish banner" + }, + "displayName": { + "type": "string", + "description": "Optional public display name" + } + }, + "required": [ + "avatar" + ] + }, + "ProfileFilters": { + "type": "object", + "properties": { + "includeHidden": { + "type": "boolean", + "description": "Include hidden profiles" + }, + "q": { + "type": "string", + "description": "Search term" + } + } + }, + "ProjectEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ProjectIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ProjectListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ProjectListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "RefundEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "RefundIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "RefundListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "RefundListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ReportEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ReportIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ReportListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ReportListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "SearchQueryParams": { + "type": "object", + "properties": { + "q": { + "type": "string", + "description": "Search query" + }, + "page": { + "type": "number", + "description": "Page number" + }, + "limit": { + "type": "number", + "description": "Items per page" + }, + "sort": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "description": "Sort order" + } + }, + "required": [ + "q" + ] + }, + "SearchResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Result ID" + }, + "title": { + "type": "string", + "description": "Result title" + }, + "score": { + "type": "number", + "description": "Relevance score" + } + }, + "required": [ + "id", + "title", + "score" + ] + }, + "description": "Search results" + }, + "total": { + "type": "number", + "description": "Total results found" + } + }, + "required": [ + "results", + "total" + ] + }, + "SessionEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "SessionIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "SessionListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "SessionListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "SubscriptionEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "SubscriptionIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "SubscriptionListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "SubscriptionListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "TaskEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "TaskIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "TaskListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "TaskListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "TeamEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "TeamIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "TeamListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "TeamListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "TraceId": { + "type": "string", + "format": "nanoid" + }, + "UpdateApiKeyInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateAttachmentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateAuditLogInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateCatalogItemInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateCommentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateCustomerInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateDepartmentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateDocumentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateExportInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateInvoiceInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateMemberInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateNotificationInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateOrderInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateOrganizationInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdatePaymentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateProductInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateProjectInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateRefundInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateReportInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateSessionInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateSubscriptionInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateTaskInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateTeamInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateWebhookInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateWorkspaceInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "User": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Full name of the user" + }, + "profileImage": { + "allOf": [ + { + "$ref": "#/components/schemas/Image" + } + ], + "description": "The profile image" + }, + "avatar": { + "$ref": "#/components/schemas/Image", + "description": "The avatar image", + "nullable": true + }, + "banner": { + "$ref": "#/components/schemas/Image", + "description": "The banner image", + "nullable": true + } + }, + "required": [ + "name", + "avatar" + ] + }, + "Users": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "UserSettings": { + "type": "object", + "properties": { + "theme": { + "type": "string", + "enum": [ + "light", + "dark" + ], + "description": "UI theme preference" + }, + "notifications": { + "type": "boolean", + "description": "Enable notifications" + }, + "language": { + "type": "string", + "description": "Preferred language" + }, + "timezone": { + "type": "string", + "description": "User timezone" + } + }, + "required": [ + "theme", + "notifications", + "language", + "timezone" + ] + }, + "WebhookEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "WebhookIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "WebhookListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "WebhookListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "WorkspaceEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "WorkspaceIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "WorkspaceListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "WorkspaceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + } + }, + "responses": { + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": false + }, + "error": { + "type": "string", + "example": "Validation error" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": false + }, + "error": { + "type": "string", + "example": "Unathorized" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": false + }, + "error": { + "type": "string", + "example": "Something went wrong" + } + } + } + } + } + } + } + }, + "paths": { + "/audit": { + "get": { + "operationId": "get-audit", + "summary": "List admin audit entries", + "description": "Provides a second admin route-group example with explicit auth and edge-case query parsing.", + "tags": [ + "Admin" + ], + "parameters": [ + { + "in": "query", + "name": "actorId", + "required": false, + "schema": { + "type": "string", + "description": "Filter by actor" + }, + "description": "Filter by actor", + "example": "123" + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer", + "exclusiveMinimum": true, + "description": "Maximum audit rows", + "minimum": 0 + }, + "description": "Maximum audit rows", + "example": 1 + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AdminAuditEntry" + } + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/users": { + "get": { + "operationId": "get-users", + "summary": "List all users (Admin only)", + "description": "Retrieves a paginated list of all users in the system", + "tags": [ + "Admin" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "number", + "description": "Page number" + }, + "description": "Page number", + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "number", + "description": "Items per page" + }, + "description": "Items per page", + "example": 1 + }, + { + "in": "query", + "name": "role", + "required": false, + "schema": { + "type": "string", + "enum": [ + "admin", + "user" + ], + "description": "Filter by role" + }, + "description": "Filter by role", + "example": "admin" + }, + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "string", + "enum": [ + "active", + "inactive", + "banned" + ], + "description": "Filter by status" + }, + "description": "Filter by status", + "example": "example" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AdminUserListResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/api-keys": { + "get": { + "operationId": "sandboxAppScaleListApiKey", + "summary": "List api-keys", + "description": "Returns a paginated list of api-keys", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateApiKey", + "summary": "Create apikey", + "description": "Creates a new apikey", + "tags": [ + "ApiKeys" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateApiKeyInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyEntity" + } + } + } + } + } + } + }, + "/generated/api-keys/{id}": { + "get": { + "operationId": "sandboxAppScaleGetApiKey", + "summary": "Get apikey by ID", + "description": "Returns a single apikey by identifier", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateApiKey", + "summary": "Update apikey", + "description": "Updates an existing apikey", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateApiKeyInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteApiKey", + "summary": "Delete apikey", + "description": "Deletes a apikey by identifier", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/attachments": { + "get": { + "operationId": "sandboxAppScaleListAttachment", + "summary": "List attachments", + "description": "Returns a paginated list of attachments", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateAttachment", + "summary": "Create attachment", + "description": "Creates a new attachment", + "tags": [ + "Attachments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAttachmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentEntity" + } + } + } + } + } + } + }, + "/generated/attachments/{id}": { + "get": { + "operationId": "sandboxAppScaleGetAttachment", + "summary": "Get attachment by ID", + "description": "Returns a single attachment by identifier", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateAttachment", + "summary": "Update attachment", + "description": "Updates an existing attachment", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAttachmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteAttachment", + "summary": "Delete attachment", + "description": "Deletes a attachment by identifier", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/audit-logs": { + "get": { + "operationId": "sandboxAppScaleListAuditLog", + "summary": "List audit-logs", + "description": "Returns a paginated list of audit-logs", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateAuditLog", + "summary": "Create auditlog", + "description": "Creates a new auditlog", + "tags": [ + "AuditLogs" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAuditLogInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + } + } + } + }, + "/generated/audit-logs/{id}": { + "get": { + "operationId": "sandboxAppScaleGetAuditLog", + "summary": "Get auditlog by ID", + "description": "Returns a single auditlog by identifier", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateAuditLog", + "summary": "Update auditlog", + "description": "Updates an existing auditlog", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAuditLogInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteAuditLog", + "summary": "Delete auditlog", + "description": "Deletes a auditlog by identifier", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/auth": { + "post": { + "operationId": "post-auth", + "summary": "Sign in", + "description": "Authenticate user and return access token", + "tags": [ + "Authentication", + "Sandbox" + ], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "x-internal": true, + "x-rate-limit": 100 + } + }, + "/generated/catalog-items": { + "get": { + "operationId": "sandboxAppScaleListCatalogItem", + "summary": "List catalog-items", + "description": "Returns a paginated list of catalog-items", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateCatalogItem", + "summary": "Create catalogitem", + "description": "Creates a new catalogitem", + "tags": [ + "Catalog" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCatalogItemInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + } + } + } + }, + "/generated/catalog-items/{id}": { + "get": { + "operationId": "sandboxAppScaleGetCatalogItem", + "summary": "Get catalogitem by ID", + "description": "Returns a single catalogitem by identifier", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateCatalogItem", + "summary": "Update catalogitem", + "description": "Updates an existing catalogitem", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCatalogItemInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteCatalogItem", + "summary": "Delete catalogitem", + "description": "Deletes a catalogitem by identifier", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/comments": { + "get": { + "operationId": "sandboxAppScaleListComment", + "summary": "List comments", + "description": "Returns a paginated list of comments", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateComment", + "summary": "Create comment", + "description": "Creates a new comment", + "tags": [ + "Comments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + } + } + } + }, + "/generated/comments/{id}": { + "get": { + "operationId": "sandboxAppScaleGetComment", + "summary": "Get comment by ID", + "description": "Returns a single comment by identifier", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateComment", + "summary": "Update comment", + "description": "Updates an existing comment", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCommentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteComment", + "summary": "Delete comment", + "description": "Deletes a comment by identifier", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/customers": { + "get": { + "operationId": "sandboxAppScaleListCustomer", + "summary": "List customers", + "description": "Returns a paginated list of customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateCustomer", + "summary": "Create customer", + "description": "Creates a new customer", + "tags": [ + "Customers" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCustomerInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + } + } + } + }, + "/generated/customers/{id}": { + "get": { + "operationId": "sandboxAppScaleGetCustomer", + "summary": "Get customer by ID", + "description": "Returns a single customer by identifier", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateCustomer", + "summary": "Update customer", + "description": "Updates an existing customer", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCustomerInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteCustomer", + "summary": "Delete customer", + "description": "Deletes a customer by identifier", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/dashboard": { + "get": { + "operationId": "get-dashboard", + "summary": "Get user dashboard", + "description": "Retrieves the user's dashboard configuration", + "tags": [ + "Dashboard" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "put": { + "operationId": "put-dashboard", + "summary": "Update dashboard", + "description": "Updates the user's dashboard configuration", + "tags": [ + "Dashboard" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardResponse" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/departments": { + "get": { + "operationId": "sandboxAppScaleListDepartment", + "summary": "List departments", + "description": "Returns a paginated list of departments", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateDepartment", + "summary": "Create department", + "description": "Creates a new department", + "tags": [ + "Departments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDepartmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + } + } + } + }, + "/generated/departments/{id}": { + "get": { + "operationId": "sandboxAppScaleGetDepartment", + "summary": "Get department by ID", + "description": "Returns a single department by identifier", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateDepartment", + "summary": "Update department", + "description": "Updates an existing department", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDepartmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteDepartment", + "summary": "Delete department", + "description": "Deletes a department by identifier", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/documents": { + "get": { + "operationId": "sandboxAppScaleListDocument", + "summary": "List documents", + "description": "Returns a paginated list of documents", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateDocument", + "summary": "Create document", + "description": "Creates a new document", + "tags": [ + "Documents" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDocumentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + } + } + } + }, + "/generated/documents/{id}": { + "get": { + "operationId": "sandboxAppScaleGetDocument", + "summary": "Get document by ID", + "description": "Returns a single document by identifier", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateDocument", + "summary": "Update document", + "description": "Updates an existing document", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDocumentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteDocument", + "summary": "Delete document", + "description": "Deletes a document by identifier", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/coerce": { + "post": { + "operationId": "sandboxCoerceEdgeCases", + "summary": "Coercion edge cases", + "description": "Exercises `z.coerce`, `z.preprocess`, `z.brand<>`, `.transform()`, and `.pipe()` together.", + "tags": [ + "Edge cases", + "Sandbox" + ], + "parameters": [ + { + "in": "query", + "name": "count", + "required": true, + "schema": { + "default": 10, + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "example": 1 + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "in": "query", + "name": "since", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + }, + "example": "example" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CoerceBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CoerceResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/exports": { + "get": { + "operationId": "sandboxAppScaleListExport", + "summary": "List exports", + "description": "Returns a paginated list of exports", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateExport", + "summary": "Create export", + "description": "Creates a new export", + "tags": [ + "Exports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateExportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + } + } + } + }, + "/generated/exports/{id}": { + "get": { + "operationId": "sandboxAppScaleGetExport", + "summary": "Get export by ID", + "description": "Returns a single export by identifier", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateExport", + "summary": "Update export", + "description": "Updates an existing export", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateExportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteExport", + "summary": "Delete export", + "description": "Deletes a export by identifier", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/invoices": { + "get": { + "operationId": "sandboxAppScaleListInvoice", + "summary": "List invoices", + "description": "Returns a paginated list of invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateInvoice", + "summary": "Create invoice", + "description": "Creates a new invoice", + "tags": [ + "Invoices" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInvoiceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + } + } + } + }, + "/generated/invoices/{id}": { + "get": { + "operationId": "sandboxAppScaleGetInvoice", + "summary": "Get invoice by ID", + "description": "Returns a single invoice by identifier", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateInvoice", + "summary": "Update invoice", + "description": "Updates an existing invoice", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateInvoiceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteInvoice", + "summary": "Delete invoice", + "description": "Deletes a invoice by identifier", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/members": { + "get": { + "operationId": "sandboxAppScaleListMember", + "summary": "List members", + "description": "Returns a paginated list of members", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateMember", + "summary": "Create member", + "description": "Creates a new member", + "tags": [ + "Members" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMemberInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + } + } + } + }, + "/generated/members/{id}": { + "get": { + "operationId": "sandboxAppScaleGetMember", + "summary": "Get member by ID", + "description": "Returns a single member by identifier", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateMember", + "summary": "Update member", + "description": "Updates an existing member", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMemberInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteMember", + "summary": "Delete member", + "description": "Deletes a member by identifier", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/notifications": { + "get": { + "operationId": "sandboxAppScaleListNotification", + "summary": "List notifications", + "description": "Returns a paginated list of notifications", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateNotification", + "summary": "Create notification", + "description": "Creates a new notification", + "tags": [ + "Notifications" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotificationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + } + } + } + }, + "/generated/notifications/{id}": { + "get": { + "operationId": "sandboxAppScaleGetNotification", + "summary": "Get notification by ID", + "description": "Returns a single notification by identifier", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateNotification", + "summary": "Update notification", + "description": "Updates an existing notification", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateNotificationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteNotification", + "summary": "Delete notification", + "description": "Deletes a notification by identifier", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/orders": { + "get": { + "operationId": "sandboxAppScaleListOrder", + "summary": "List orders", + "description": "Returns a paginated list of orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateOrder", + "summary": "Create order", + "description": "Creates a new order", + "tags": [ + "Orders" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrderInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + } + } + } + }, + "/generated/orders/{id}": { + "get": { + "operationId": "sandboxAppScaleGetOrder", + "summary": "Get order by ID", + "description": "Returns a single order by identifier", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateOrder", + "summary": "Update order", + "description": "Updates an existing order", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteOrder", + "summary": "Delete order", + "description": "Deletes a order by identifier", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/organizations": { + "get": { + "operationId": "sandboxAppScaleListOrganization", + "summary": "List organizations", + "description": "Returns a paginated list of organizations", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateOrganization", + "summary": "Create organization", + "description": "Creates a new organization", + "tags": [ + "Organizations" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrganizationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + } + } + } + }, + "/generated/organizations/{id}": { + "get": { + "operationId": "sandboxAppScaleGetOrganization", + "summary": "Get organization by ID", + "description": "Returns a single organization by identifier", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateOrganization", + "summary": "Update organization", + "description": "Updates an existing organization", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrganizationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteOrganization", + "summary": "Delete organization", + "description": "Deletes a organization by identifier", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/payments": { + "get": { + "operationId": "sandboxAppScaleListPayment", + "summary": "List payments", + "description": "Returns a paginated list of payments", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreatePayment", + "summary": "Create payment", + "description": "Creates a new payment", + "tags": [ + "Payments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePaymentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + } + } + } + }, + "/generated/payments/{id}": { + "get": { + "operationId": "sandboxAppScaleGetPayment", + "summary": "Get payment by ID", + "description": "Returns a single payment by identifier", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdatePayment", + "summary": "Update payment", + "description": "Updates an existing payment", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePaymentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeletePayment", + "summary": "Delete payment", + "description": "Deletes a payment by identifier", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/products": { + "get": { + "operationId": "sandboxAppScaleListProduct", + "summary": "List products", + "description": "Returns a paginated list of products", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateProduct", + "summary": "Create product", + "description": "Creates a new product", + "tags": [ + "Products" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProductInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + } + } + } + }, + "/generated/products/{id}": { + "get": { + "operationId": "sandboxAppScaleGetProduct", + "summary": "Get product by ID", + "description": "Returns a single product by identifier", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateProduct", + "summary": "Update product", + "description": "Updates an existing product", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProductInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteProduct", + "summary": "Delete product", + "description": "Deletes a product by identifier", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/profiles": { + "get": { + "operationId": "get-profiles", + "summary": "List public profiles", + "description": "Exercises nullable, nullish, and optional permutations from a public route group.", + "tags": [ + "Profiles" + ], + "parameters": [ + { + "in": "query", + "name": "includeHidden", + "required": false, + "schema": { + "type": "boolean", + "description": "Include hidden profiles" + }, + "description": "Include hidden profiles", + "example": true + }, + { + "in": "query", + "name": "q", + "required": false, + "schema": { + "type": "string", + "description": "Search term" + }, + "description": "Search term", + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileDraft" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "post-profiles", + "summary": "Create a profile preview", + "description": "Mixes query and body metadata in the sandbox app to stress route parsing.", + "tags": [ + "Profiles" + ], + "parameters": [ + { + "in": "query", + "name": "includeHidden", + "required": false, + "schema": { + "type": "boolean", + "description": "Include hidden profiles" + }, + "description": "Include hidden profiles", + "example": true + }, + { + "in": "query", + "name": "q", + "required": false, + "schema": { + "type": "string", + "description": "Search term" + }, + "description": "Search term", + "example": "example" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProfileDraft" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProfileDraft" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/organizations/{organizationId}/projects": { + "get": { + "operationId": "sandboxAppScaleListProject", + "summary": "List projects", + "description": "Returns a paginated list of projects", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateProject", + "summary": "Create project", + "description": "Creates a new project", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProjectInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + } + } + } + }, + "/generated/organizations/{organizationId}/projects/{id}": { + "get": { + "operationId": "sandboxAppScaleGetProject", + "summary": "Get project by ID", + "description": "Returns a single project by identifier", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateProject", + "summary": "Update project", + "description": "Updates an existing project", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteProject", + "summary": "Delete project", + "description": "Deletes a project by identifier", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/refunds": { + "get": { + "operationId": "sandboxAppScaleListRefund", + "summary": "List refunds", + "description": "Returns a paginated list of refunds", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateRefund", + "summary": "Create refund", + "description": "Creates a new refund", + "tags": [ + "Refunds" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRefundInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + } + } + } + }, + "/generated/refunds/{id}": { + "get": { + "operationId": "sandboxAppScaleGetRefund", + "summary": "Get refund by ID", + "description": "Returns a single refund by identifier", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateRefund", + "summary": "Update refund", + "description": "Updates an existing refund", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRefundInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteRefund", + "summary": "Delete refund", + "description": "Deletes a refund by identifier", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/reports": { + "get": { + "operationId": "sandboxAppScaleListReport", + "summary": "List reports", + "description": "Returns a paginated list of reports", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateReport", + "summary": "Create report", + "description": "Creates a new report", + "tags": [ + "Reports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } + } + } + } + }, + "/generated/reports/{id}": { + "get": { + "operationId": "sandboxAppScaleGetReport", + "summary": "Get report by ID", + "description": "Returns a single report by identifier", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateReport", + "summary": "Update report", + "description": "Updates an existing report", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateReportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteReport", + "summary": "Delete report", + "description": "Deletes a report by identifier", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/sessions": { + "get": { + "operationId": "sandboxAppScaleListSession", + "summary": "List sessions", + "description": "Returns a paginated list of sessions", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateSession", + "summary": "Create session", + "description": "Creates a new session", + "tags": [ + "Sessions" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSessionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionEntity" + } + } + } + } + } + } + }, + "/generated/sessions/{id}": { + "get": { + "operationId": "sandboxAppScaleGetSession", + "summary": "Get session by ID", + "description": "Returns a single session by identifier", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateSession", + "summary": "Update session", + "description": "Updates an existing session", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSessionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteSession", + "summary": "Delete session", + "description": "Deletes a session by identifier", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/settings": { + "get": { + "operationId": "get-settings", + "summary": "Get user settings", + "description": "Retrieves the user's personal settings", + "tags": [ + "Settings" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserSettings" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "patch-settings", + "summary": "Update user settings", + "description": "Updates the user's personal settings", + "tags": [ + "Settings" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserSettings" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserSettings" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/subscriptions": { + "get": { + "operationId": "sandboxAppScaleListSubscription", + "summary": "List subscriptions", + "description": "Returns a paginated list of subscriptions", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateSubscription", + "summary": "Create subscription", + "description": "Creates a new subscription", + "tags": [ + "Subscriptions" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSubscriptionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionEntity" + } + } + } + } + } } }, - "responses": { - "400": { - "description": "Bad request", - "content": { - "application/json": { + "/generated/subscriptions/{id}": { + "get": { + "operationId": "sandboxAppScaleGetSubscription", + "summary": "Get subscription by ID", + "description": "Returns a single subscription by identifier", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": false - }, - "error": { - "type": "string", - "example": "Validation error" + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionEntity" } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { + "patch": { + "operationId": "sandboxAppScaleUpdateSubscription", + "summary": "Update subscription", + "description": "Updates an existing subscription", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": false - }, - "error": { - "type": "string", - "example": "Unathorized" + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSubscriptionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionEntity" } } } + }, + "401": { + "$ref": "#/components/responses/401" } } }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { + "delete": { + "operationId": "sandboxAppScaleDeleteSubscription", + "summary": "Delete subscription", + "description": "Deletes a subscription by identifier", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": false - }, - "error": { - "type": "string", - "example": "Something went wrong" + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/projects/{projectId}/tasks": { + "get": { + "operationId": "sandboxAppScaleListTask", + "summary": "List tasks", + "description": "Returns a paginated list of tasks", + "tags": [ + "Tasks" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + }, + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateTask", + "summary": "Create task", + "description": "Creates a new task", + "tags": [ + "Tasks" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTaskInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskEntity" } } } } } } - } - }, - "paths": { - "/audit": { + }, + "/generated/projects/{projectId}/tasks/{id}": { "get": { - "operationId": "get-audit", - "summary": "List admin audit entries", - "description": "Provides a second admin route-group example with explicit auth and edge-case query parsing.", + "operationId": "sandboxAppScaleGetTask", + "summary": "Get task by ID", + "description": "Returns a single task by identifier", "tags": [ - "Admin" + "Tasks" ], "parameters": [ { - "in": "query", - "name": "actorId", - "required": false, + "in": "path", + "name": "id", + "required": true, "schema": { - "type": "string", - "description": "Filter by actor" + "type": "string" }, - "description": "Filter by actor" + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "sandboxAppScaleUpdateTask", + "summary": "Update task", + "description": "Updates an existing task", + "tags": [ + "Tasks" + ], + "parameters": [ { - "in": "query", - "name": "limit", - "required": false, + "in": "path", + "name": "id", + "required": true, "schema": { - "type": "integer", - "exclusiveMinimum": true, - "description": "Maximum audit rows", - "minimum": 0 + "type": "string" }, - "description": "Maximum audit rows" + "example": "123" } ], "security": [ @@ -650,16 +9696,22 @@ "BearerAuth": [] } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTaskInput" + } + } + } + }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AdminAuditEntry" - } + "$ref": "#/components/schemas/TaskEntity" } } } @@ -668,15 +9720,47 @@ "$ref": "#/components/responses/401" } } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteTask", + "summary": "Delete task", + "description": "Deletes a task by identifier", + "tags": [ + "Tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } } }, - "/users": { + "/generated/teams": { "get": { - "operationId": "get-users", - "summary": "List all users (Admin only)", - "description": "Retrieves a paginated list of all users in the system", + "operationId": "sandboxAppScaleListTeam", + "summary": "List teams", + "description": "Returns a paginated list of teams", "tags": [ - "Admin" + "Teams" ], "parameters": [ { @@ -684,54 +9768,40 @@ "name": "page", "required": false, "schema": { - "type": "number", - "description": "Page number" + "type": "string" }, - "description": "Page number" + "example": 1 }, { "in": "query", "name": "limit", "required": false, "schema": { - "type": "number", - "description": "Items per page" + "type": "string" }, - "description": "Items per page" + "example": "example" }, { "in": "query", - "name": "role", + "name": "search", "required": false, "schema": { - "type": "string", - "enum": [ - "admin", - "user" - ], - "description": "Filter by role" + "type": "string" }, - "description": "Filter by role" + "example": "example" }, { "in": "query", - "name": "status", + "name": "active", "required": false, "schema": { "type": "string", "enum": [ - "active", - "inactive", - "banned" - ], - "description": "Filter by status" + "true", + "false" + ] }, - "description": "Filter by status" - } - ], - "security": [ - { - "BearerAuth": [] + "example": "example" } ], "responses": { @@ -740,35 +9810,31 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdminUserListResponse" + "$ref": "#/components/schemas/TeamListResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } - } - }, - "/auth": { + }, "post": { - "operationId": "post-auth", - "summary": "Sign in", - "description": "Authenticate user and return access token", + "operationId": "sandboxAppScaleCreateTeam", + "summary": "Create team", + "description": "Creates a new team", "tags": [ - "Authentication", - "Sandbox" + "Teams" ], "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginRequest" + "$ref": "#/components/schemas/CreateTeamInput" } } } @@ -779,31 +9845,33 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginResponse" + "$ref": "#/components/schemas/TeamEntity" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } - }, - "x-internal": true, - "x-rate-limit": 100 + } } }, - "/dashboard": { + "/generated/teams/{id}": { "get": { - "operationId": "get-dashboard", - "summary": "Get user dashboard", - "description": "Retrieves the user's dashboard configuration", + "operationId": "sandboxAppScaleGetTeam", + "summary": "Get team by ID", + "description": "Returns a single team by identifier", "tags": [ - "Dashboard" + "Teams" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } ], - "parameters": [], "security": [ { "BearerAuth": [] @@ -815,7 +9883,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardResponse" + "$ref": "#/components/schemas/TeamEntity" } } } @@ -828,35 +9896,103 @@ } } }, - "put": { - "operationId": "put-dashboard", - "summary": "Update dashboard", - "description": "Updates the user's dashboard configuration", + "patch": { + "operationId": "sandboxAppScaleUpdateTeam", + "summary": "Update team", + "description": "Updates an existing team", + "tags": [ + "Teams" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTeamInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "sandboxAppScaleDeleteTeam", + "summary": "Delete team", + "description": "Deletes a team by identifier", + "tags": [ + "Teams" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/test-optional": { + "get": { + "operationId": "get-test-optional", + "summary": "This is a test user endpoint", + "description": "Test User Description", "tags": [ - "Dashboard" + "Test-optional" ], "parameters": [], - "security": [ - { - "BearerAuth": [] - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardResponse" - } - } - } - }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardResponse" + "$ref": "#/components/schemas/User" } } } @@ -870,61 +10006,71 @@ } } }, - "/coerce": { - "post": { - "operationId": "sandboxCoerceEdgeCases", - "summary": "Coercion edge cases", - "description": "Exercises `z.coerce`, `z.preprocess`, `z.brand<>`, `.transform()`, and `.pipe()` together.", + "/test-query-params": { + "get": { + "operationId": "get-test-query-params", + "summary": "Search endpoint with @queryParams tag", + "description": "Test endpoint to verify @queryParams works (to avoid prettier-plugin-jsdoc conflicts)", "tags": [ - "Edge cases", - "Sandbox" + "Test-query-params" ], "parameters": [ { "in": "query", - "name": "count", + "name": "q", "required": true, "schema": { - "default": 10, - "type": "integer", - "minimum": 0, - "maximum": 1000 - } + "type": "string", + "description": "Search query" + }, + "description": "Search query", + "example": "example" }, { "in": "query", - "name": "active", + "name": "page", "required": false, "schema": { - "type": "boolean" - } + "type": "number", + "description": "Page number" + }, + "description": "Page number", + "example": 1 }, { "in": "query", - "name": "since", + "name": "limit", + "required": false, + "schema": { + "type": "number", + "description": "Items per page" + }, + "description": "Items per page", + "example": 1 + }, + { + "in": "query", + "name": "sort", "required": false, "schema": { "type": "string", - "format": "date-time" - } + "enum": [ + "asc", + "desc" + ], + "description": "Sort order" + }, + "description": "Sort order", + "example": "example" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CoerceBody" - } - } - } - }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CoerceResponse" + "$ref": "#/components/schemas/SearchResponse" } } } @@ -938,46 +10084,39 @@ } } }, - "/profiles": { + "/users/{id}": { "get": { - "operationId": "get-profiles", - "summary": "List public profiles", - "description": "Exercises nullable, nullish, and optional permutations from a public route group.", + "operationId": "get-users-{id}", + "summary": "Read the user profile", + "description": "Detailed user profile", "tags": [ - "Profiles" + "Users" ], "parameters": [ { - "in": "query", - "name": "includeHidden", - "required": false, - "schema": { - "type": "boolean", - "description": "Include hidden profiles" - }, - "description": "Include hidden profiles" - }, - { - "in": "query", - "name": "q", - "required": false, + "in": "path", + "name": "id", + "required": true, "schema": { "type": "string", - "description": "Search term" + "description": "User ID" }, - "description": "Search term" + "description": "User ID", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] } ], "responses": { "200": { - "description": "Successful response", + "description": "Test", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProfileDraft" - } + "$ref": "#/components/schemas/Users" } } } @@ -985,45 +10124,131 @@ "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "409": { + "$ref": "#/components/responses/409" + }, "500": { "$ref": "#/components/responses/500" } } }, - "post": { - "operationId": "post-profiles", - "summary": "Create a profile preview", - "description": "Mixes query and body metadata in the sandbox app to stress route parsing.", + "delete": { + "operationId": "delete-users-{id}", + "summary": "Delete user", + "description": "Delete a user by ID", "tags": [ - "Profiles" + "Users" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "User ID" + }, + "description": "User ID", + "example": "123" + } + ], + "responses": { + "204": { + "description": "User deleted successfully" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/webhooks": { + "get": { + "operationId": "sandboxAppScaleListWebhook", + "summary": "List webhooks", + "description": "Returns a paginated list of webhooks", + "tags": [ + "Webhooks" ], "parameters": [ { "in": "query", - "name": "includeHidden", + "name": "page", "required": false, "schema": { - "type": "boolean", - "description": "Include hidden profiles" + "type": "string" }, - "description": "Include hidden profiles" + "example": 1 }, { "in": "query", - "name": "q", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", "required": false, "schema": { "type": "string", - "description": "Search term" + "enum": [ + "true", + "false" + ] }, - "description": "Search term" + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateWebhook", + "summary": "Create webhook", + "description": "Creates a new webhook", + "tags": [ + "Webhooks" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProfileDraft" + "$ref": "#/components/schemas/CreateWebhookInput" } } } @@ -1034,29 +10259,33 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProfileDraft" + "$ref": "#/components/schemas/WebhookEntity" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/settings": { + "/generated/webhooks/{id}": { "get": { - "operationId": "get-settings", - "summary": "Get user settings", - "description": "Retrieves the user's personal settings", + "operationId": "sandboxAppScaleGetWebhook", + "summary": "Get webhook by ID", + "description": "Returns a single webhook by identifier", "tags": [ - "Settings" + "Webhooks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } ], - "parameters": [], "security": [ { "BearerAuth": [] @@ -1068,7 +10297,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserSettings" + "$ref": "#/components/schemas/WebhookEntity" } } } @@ -1082,13 +10311,23 @@ } }, "patch": { - "operationId": "patch-settings", - "summary": "Update user settings", - "description": "Updates the user's personal settings", + "operationId": "sandboxAppScaleUpdateWebhook", + "summary": "Update webhook", + "description": "Updates an existing webhook", "tags": [ - "Settings" + "Webhooks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } ], - "parameters": [], "security": [ { "BearerAuth": [] @@ -1098,7 +10337,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserSettings" + "$ref": "#/components/schemas/UpdateWebhookInput" } } } @@ -1109,101 +10348,97 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserSettings" + "$ref": "#/components/schemas/WebhookEntity" } } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } - } - }, - "/test-optional": { - "get": { - "operationId": "get-test-optional", - "summary": "This is a test user endpoint", - "description": "Test User Description", + }, + "delete": { + "operationId": "sandboxAppScaleDeleteWebhook", + "summary": "Delete webhook", + "description": "Deletes a webhook by identifier", "tags": [ - "Test-optional" + "Webhooks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" + "204": { + "description": "Resource deleted successfully" }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } } }, - "/test-query-params": { + "/generated/workspaces": { "get": { - "operationId": "get-test-query-params", - "summary": "Search endpoint with @queryParams tag", - "description": "Test endpoint to verify @queryParams works (to avoid prettier-plugin-jsdoc conflicts)", + "operationId": "sandboxAppScaleListWorkspace", + "summary": "List workspaces", + "description": "Returns a paginated list of workspaces", "tags": [ - "Test-query-params" + "Workspaces" ], "parameters": [ { "in": "query", - "name": "q", - "required": true, + "name": "page", + "required": false, "schema": { - "type": "string", - "description": "Search query" + "type": "string" }, - "description": "Search query" + "example": 1 }, { "in": "query", - "name": "page", + "name": "limit", "required": false, "schema": { - "type": "number", - "description": "Page number" + "type": "string" }, - "description": "Page number" + "example": "example" }, { "in": "query", - "name": "limit", + "name": "search", "required": false, "schema": { - "type": "number", - "description": "Items per page" + "type": "string" }, - "description": "Items per page" + "example": "example" }, { "in": "query", - "name": "sort", + "name": "active", "required": false, "schema": { "type": "string", "enum": [ - "asc", - "desc" - ], - "description": "Sort order" + "true", + "false" + ] }, - "description": "Sort order" + "example": "example" } ], "responses": { @@ -1212,27 +10447,56 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchResponse" + "$ref": "#/components/schemas/WorkspaceListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "sandboxAppScaleCreateWorkspace", + "summary": "Create workspace", + "description": "Creates a new workspace", + "tags": [ + "Workspaces" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWorkspaceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceEntity" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/users/{id}": { + "/generated/workspaces/{id}": { "get": { - "operationId": "get-users-{id}", - "summary": "Read the user profile", - "description": "Detailed user profile", + "operationId": "sandboxAppScaleGetWorkspace", + "summary": "Get workspace by ID", + "description": "Returns a single workspace by identifier", "tags": [ - "Users" + "Workspaces" ], "parameters": [ { @@ -1240,10 +10504,8 @@ "name": "id", "required": true, "schema": { - "type": "string", - "description": "User ID" + "type": "string" }, - "description": "User ID", "example": "123" } ], @@ -1254,11 +10516,11 @@ ], "responses": { "200": { - "description": "Test", + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Users" + "$ref": "#/components/schemas/WorkspaceEntity" } } } @@ -1266,23 +10528,65 @@ "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, - "409": { - "$ref": "#/components/responses/409" - }, "500": { "$ref": "#/components/responses/500" } } }, + "patch": { + "operationId": "sandboxAppScaleUpdateWorkspace", + "summary": "Update workspace", + "description": "Updates an existing workspace", + "tags": [ + "Workspaces" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWorkspaceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, "delete": { - "operationId": "delete-users-{id}", - "summary": "Delete user", - "description": "Delete a user by ID", + "operationId": "sandboxAppScaleDeleteWorkspace", + "summary": "Delete workspace", + "description": "Deletes a workspace by identifier", "tags": [ - "Users" + "Workspaces" ], "parameters": [ { @@ -1290,22 +10594,22 @@ "name": "id", "required": true, "schema": { - "type": "string", - "description": "User ID" + "type": "string" }, - "description": "User ID", "example": "123" } ], + "security": [ + { + "BearerAuth": [] + } + ], "responses": { "204": { - "description": "User deleted successfully" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Resource deleted successfully" }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } } @@ -1315,21 +10619,90 @@ { "name": "Admin" }, + { + "name": "ApiKeys" + }, + { + "name": "Attachments" + }, + { + "name": "AuditLogs" + }, { "name": "Authentication" }, + { + "name": "Catalog" + }, + { + "name": "Comments" + }, + { + "name": "Customers" + }, { "name": "Dashboard" }, + { + "name": "Departments" + }, + { + "name": "Documents" + }, { "name": "Edge cases" }, + { + "name": "Exports" + }, + { + "name": "Invoices" + }, + { + "name": "Members" + }, + { + "name": "Notifications" + }, + { + "name": "Orders" + }, + { + "name": "Organizations" + }, + { + "name": "Payments" + }, + { + "name": "Products" + }, { "name": "Profiles" }, + { + "name": "Projects" + }, + { + "name": "Refunds" + }, + { + "name": "Reports" + }, + { + "name": "Sessions" + }, { "name": "Settings" }, + { + "name": "Subscriptions" + }, + { + "name": "Tasks" + }, + { + "name": "Teams" + }, { "name": "Test-optional" }, @@ -1338,6 +10711,12 @@ }, { "name": "Users" + }, + { + "name": "Webhooks" + }, + { + "name": "Workspaces" } ] } diff --git a/apps/next-app-sandbox/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..192e97c2 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId sandboxAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId sandboxAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId sandboxAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/api-keys/route.ts b/apps/next-app-sandbox/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..2676b0c9 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId sandboxAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId sandboxAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..dcecd215 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId sandboxAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId sandboxAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId sandboxAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/attachments/route.ts b/apps/next-app-sandbox/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..c778945b --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId sandboxAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId sandboxAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..9bd82347 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId sandboxAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId sandboxAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId sandboxAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/audit-logs/route.ts b/apps/next-app-sandbox/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..3612e46c --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId sandboxAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId sandboxAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..5a9766c8 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId sandboxAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId sandboxAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId sandboxAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/catalog-items/route.ts b/apps/next-app-sandbox/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..72fcb5c9 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId sandboxAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId sandboxAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..82c8ba0b --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId sandboxAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId sandboxAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId sandboxAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/comments/route.ts b/apps/next-app-sandbox/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..ad717b48 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId sandboxAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId sandboxAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..e04f106b --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId sandboxAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId sandboxAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId sandboxAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/customers/route.ts b/apps/next-app-sandbox/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..ebdcdd91 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId sandboxAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId sandboxAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..9e8a33e1 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId sandboxAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId sandboxAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId sandboxAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/departments/route.ts b/apps/next-app-sandbox/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..3ea35c54 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId sandboxAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId sandboxAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..4dc85895 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId sandboxAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId sandboxAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId sandboxAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/documents/route.ts b/apps/next-app-sandbox/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..d01e5627 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId sandboxAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId sandboxAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..65d7394f --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId sandboxAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId sandboxAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId sandboxAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/exports/route.ts b/apps/next-app-sandbox/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..ba868674 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId sandboxAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId sandboxAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..7c245718 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId sandboxAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId sandboxAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId sandboxAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/invoices/route.ts b/apps/next-app-sandbox/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..c6927f4a --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId sandboxAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId sandboxAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/members/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..08694795 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId sandboxAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId sandboxAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId sandboxAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/members/route.ts b/apps/next-app-sandbox/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..fbb29c98 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId sandboxAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId sandboxAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..cf697094 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId sandboxAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId sandboxAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId sandboxAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/notifications/route.ts b/apps/next-app-sandbox/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..3de41a8a --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId sandboxAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId sandboxAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..4b47e748 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId sandboxAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId sandboxAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId sandboxAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/orders/route.ts b/apps/next-app-sandbox/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..1ac693f6 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId sandboxAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId sandboxAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..7da7be7c --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId sandboxAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId sandboxAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId sandboxAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..b275daf4 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId sandboxAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId sandboxAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..3350a710 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId sandboxAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId sandboxAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId sandboxAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/organizations/route.ts b/apps/next-app-sandbox/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..eb0b1221 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId sandboxAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId sandboxAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..0759f97f --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId sandboxAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId sandboxAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId sandboxAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/payments/route.ts b/apps/next-app-sandbox/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..8d539003 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId sandboxAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId sandboxAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/products/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..ae6286b4 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId sandboxAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId sandboxAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId sandboxAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/products/route.ts b/apps/next-app-sandbox/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..d2fbbfa0 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId sandboxAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId sandboxAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..5d89b872 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId sandboxAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId sandboxAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId sandboxAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-sandbox/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..ff73f238 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId sandboxAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId sandboxAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..eb77225f --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId sandboxAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId sandboxAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId sandboxAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/refunds/route.ts b/apps/next-app-sandbox/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..7fd68873 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId sandboxAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId sandboxAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..5bef3e8d --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId sandboxAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId sandboxAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId sandboxAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/reports/route.ts b/apps/next-app-sandbox/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..ccd3947c --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId sandboxAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId sandboxAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..74447b04 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId sandboxAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId sandboxAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId sandboxAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/sessions/route.ts b/apps/next-app-sandbox/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..ef5a498e --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId sandboxAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId sandboxAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..a44838c3 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId sandboxAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId sandboxAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId sandboxAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/subscriptions/route.ts b/apps/next-app-sandbox/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..4c6c53a6 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId sandboxAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId sandboxAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..2f66556d --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId sandboxAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId sandboxAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId sandboxAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/teams/route.ts b/apps/next-app-sandbox/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..2527078f --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId sandboxAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId sandboxAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..b35bf087 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId sandboxAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId sandboxAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId sandboxAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/webhooks/route.ts b/apps/next-app-sandbox/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..2b5bdfb0 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId sandboxAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId sandboxAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-sandbox/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..0857914a --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId sandboxAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId sandboxAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId sandboxAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/app/api/generated/workspaces/route.ts b/apps/next-app-sandbox/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..f7063fa7 --- /dev/null +++ b/apps/next-app-sandbox/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId sandboxAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId sandboxAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-sandbox/src/schemas/generated/api-keys-entity.ts b/apps/next-app-sandbox/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/api-keys-input.ts b/apps/next-app-sandbox/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/attachments-entity.ts b/apps/next-app-sandbox/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/attachments-input.ts b/apps/next-app-sandbox/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/audit-logs-entity.ts b/apps/next-app-sandbox/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/audit-logs-input.ts b/apps/next-app-sandbox/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/catalog-items-entity.ts b/apps/next-app-sandbox/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/catalog-items-input.ts b/apps/next-app-sandbox/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/comments-entity.ts b/apps/next-app-sandbox/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/comments-input.ts b/apps/next-app-sandbox/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/customers-entity.ts b/apps/next-app-sandbox/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/customers-input.ts b/apps/next-app-sandbox/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/departments-entity.ts b/apps/next-app-sandbox/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/departments-input.ts b/apps/next-app-sandbox/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/documents-entity.ts b/apps/next-app-sandbox/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/documents-input.ts b/apps/next-app-sandbox/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/exports-entity.ts b/apps/next-app-sandbox/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/exports-input.ts b/apps/next-app-sandbox/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/invoices-entity.ts b/apps/next-app-sandbox/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/invoices-input.ts b/apps/next-app-sandbox/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/members-entity.ts b/apps/next-app-sandbox/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/members-input.ts b/apps/next-app-sandbox/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/notifications-entity.ts b/apps/next-app-sandbox/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/notifications-input.ts b/apps/next-app-sandbox/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/orders-entity.ts b/apps/next-app-sandbox/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/orders-input.ts b/apps/next-app-sandbox/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/organizations-entity.ts b/apps/next-app-sandbox/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/organizations-input.ts b/apps/next-app-sandbox/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/payments-entity.ts b/apps/next-app-sandbox/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/payments-input.ts b/apps/next-app-sandbox/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/products-entity.ts b/apps/next-app-sandbox/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/products-input.ts b/apps/next-app-sandbox/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/projects-entity.ts b/apps/next-app-sandbox/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/projects-input.ts b/apps/next-app-sandbox/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/refunds-entity.ts b/apps/next-app-sandbox/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/refunds-input.ts b/apps/next-app-sandbox/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/reports-entity.ts b/apps/next-app-sandbox/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/reports-input.ts b/apps/next-app-sandbox/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/sessions-entity.ts b/apps/next-app-sandbox/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/sessions-input.ts b/apps/next-app-sandbox/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/subscriptions-entity.ts b/apps/next-app-sandbox/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/subscriptions-input.ts b/apps/next-app-sandbox/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/tasks-entity.ts b/apps/next-app-sandbox/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/tasks-input.ts b/apps/next-app-sandbox/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/teams-entity.ts b/apps/next-app-sandbox/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/teams-input.ts b/apps/next-app-sandbox/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/webhooks-entity.ts b/apps/next-app-sandbox/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/webhooks-input.ts b/apps/next-app-sandbox/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/workspaces-entity.ts b/apps/next-app-sandbox/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/apps/next-app-sandbox/src/schemas/generated/workspaces-input.ts b/apps/next-app-sandbox/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/apps/next-app-sandbox/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-scalar/package.json b/apps/next-app-scalar/package.json index 40327152..bf85ef8d 100644 --- a/apps/next-app-scalar/package.json +++ b/apps/next-app-scalar/package.json @@ -29,6 +29,7 @@ "babel-plugin-react-compiler": "catalog:", "next-openapi-gen": "workspace:*", "postcss": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "zod": "catalog:" } } diff --git a/apps/next-app-scalar/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..5910e28d --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId scalarAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeySchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId scalarAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId scalarAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/api-keys/route.ts b/apps/next-app-scalar/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..109c8f4b --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId scalarAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuerySchema + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId scalarAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..19c60195 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId scalarAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId scalarAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId scalarAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/attachments/route.ts b/apps/next-app-scalar/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..ea896831 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId scalarAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuerySchema + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId scalarAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..51d020b8 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId scalarAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId scalarAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId scalarAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/audit-logs/route.ts b/apps/next-app-scalar/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..39b62f83 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId scalarAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId scalarAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..234ad4af --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId scalarAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId scalarAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId scalarAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/catalog-items/route.ts b/apps/next-app-scalar/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..d1aad4dd --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId scalarAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuerySchema + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId scalarAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..e648836c --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId scalarAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId scalarAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId scalarAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/comments/route.ts b/apps/next-app-scalar/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..b3eae06b --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId scalarAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId scalarAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..4c552bc8 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId scalarAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId scalarAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId scalarAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/customers/route.ts b/apps/next-app-scalar/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..6cce8240 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId scalarAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuerySchema + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId scalarAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..5905f43e --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId scalarAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId scalarAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId scalarAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/departments/route.ts b/apps/next-app-scalar/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..a8160dd6 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId scalarAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId scalarAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..2a392428 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId scalarAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId scalarAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId scalarAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/documents/route.ts b/apps/next-app-scalar/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..6cdcc81f --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId scalarAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuerySchema + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId scalarAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..3ef52503 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId scalarAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId scalarAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportSchema + * @response ExportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId scalarAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/exports/route.ts b/apps/next-app-scalar/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..578b1372 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId scalarAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuerySchema + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId scalarAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportSchema + * @response ExportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..103a538e --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId scalarAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId scalarAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId scalarAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/invoices/route.ts b/apps/next-app-scalar/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..25b25c7a --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId scalarAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId scalarAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/members/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..dfbe2eda --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId scalarAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId scalarAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId scalarAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/members/route.ts b/apps/next-app-scalar/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..985e46af --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId scalarAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId scalarAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..96e74887 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId scalarAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId scalarAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId scalarAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/notifications/route.ts b/apps/next-app-scalar/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..87e166b1 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId scalarAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuerySchema + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId scalarAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..439d95cc --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId scalarAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId scalarAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId scalarAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/orders/route.ts b/apps/next-app-scalar/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..5f17fb20 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId scalarAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId scalarAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..3db569ef --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId scalarAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId scalarAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId scalarAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..372b16a2 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId scalarAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuerySchema + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId scalarAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..8d407d5e --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId scalarAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId scalarAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId scalarAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/organizations/route.ts b/apps/next-app-scalar/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..fbd53092 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId scalarAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuerySchema + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId scalarAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..8735325e --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId scalarAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId scalarAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId scalarAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/payments/route.ts b/apps/next-app-scalar/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..6025a0c4 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId scalarAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuerySchema + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId scalarAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/products/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..7e34614e --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId scalarAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId scalarAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductSchema + * @response ProductSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId scalarAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/products/route.ts b/apps/next-app-scalar/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..9ce55551 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId scalarAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuerySchema + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId scalarAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductSchema + * @response ProductSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..7e411dee --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId scalarAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId scalarAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId scalarAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-scalar/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..e4a24c46 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId scalarAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId scalarAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..0249ef5d --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId scalarAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId scalarAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId scalarAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/refunds/route.ts b/apps/next-app-scalar/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..fcb7d77e --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId scalarAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId scalarAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..448b3ca1 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId scalarAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId scalarAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId scalarAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/reports/route.ts b/apps/next-app-scalar/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..256cfe55 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId scalarAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId scalarAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..f91445ce --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId scalarAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId scalarAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId scalarAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/sessions/route.ts b/apps/next-app-scalar/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..ad9bc6b9 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId scalarAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId scalarAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..97253959 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId scalarAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId scalarAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId scalarAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/subscriptions/route.ts b/apps/next-app-scalar/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..a1cd4dba --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId scalarAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuerySchema + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId scalarAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..c67e225a --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId scalarAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId scalarAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId scalarAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/teams/route.ts b/apps/next-app-scalar/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..c7488f9a --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId scalarAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuerySchema + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId scalarAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..4c33379f --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId scalarAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId scalarAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId scalarAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/webhooks/route.ts b/apps/next-app-scalar/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..b109f7ee --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId scalarAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId scalarAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-scalar/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..8ca348f8 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId scalarAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId scalarAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId scalarAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/app/api/generated/workspaces/route.ts b/apps/next-app-scalar/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..d93382e2 --- /dev/null +++ b/apps/next-app-scalar/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId scalarAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId scalarAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-scalar/src/schemas/generated/api-keys-entity.ts b/apps/next-app-scalar/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..e16eeeeb --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeySchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ApiKeyListResponse = z.object({ + items: z.array(ApiKeySchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ApiKeyIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/api-keys-input.ts b/apps/next-app-scalar/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..12b4864a --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeyListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateApiKeySchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateApiKeySchema = CreateApiKeySchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/attachments-entity.ts b/apps/next-app-scalar/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..d67ef024 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AttachmentListResponse = z.object({ + items: z.array(AttachmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AttachmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/attachments-input.ts b/apps/next-app-scalar/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..845843f3 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/attachments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAttachmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAttachmentSchema = CreateAttachmentSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/audit-logs-entity.ts b/apps/next-app-scalar/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..bd9b8931 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/audit-logs-input.ts b/apps/next-app-scalar/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..34e13d87 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAuditLogSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/catalog-items-entity.ts b/apps/next-app-scalar/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e7a311cb --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CatalogItemListResponse = z.object({ + items: z.array(CatalogItemSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CatalogItemIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/catalog-items-input.ts b/apps/next-app-scalar/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..9ca2d0fb --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCatalogItemSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCatalogItemSchema = CreateCatalogItemSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/comments-entity.ts b/apps/next-app-scalar/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..44db99e6 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/comments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/comments-input.ts b/apps/next-app-scalar/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..840de293 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/comments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCommentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/customers-entity.ts b/apps/next-app-scalar/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..7da28861 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/customers-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CustomerListResponse = z.object({ + items: z.array(CustomerSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CustomerIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/customers-input.ts b/apps/next-app-scalar/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..da9fe60a --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/customers-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCustomerSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCustomerSchema = CreateCustomerSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/departments-entity.ts b/apps/next-app-scalar/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..92c51920 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/departments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/departments-input.ts b/apps/next-app-scalar/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..d3705544 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/departments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDepartmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/documents-entity.ts b/apps/next-app-scalar/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..a8f57a10 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/documents-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DocumentListResponse = z.object({ + items: z.array(DocumentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DocumentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/documents-input.ts b/apps/next-app-scalar/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..869eca94 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/documents-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDocumentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDocumentSchema = CreateDocumentSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/exports-entity.ts b/apps/next-app-scalar/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..8b3a79c8 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/exports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ExportListResponse = z.object({ + items: z.array(ExportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ExportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/exports-input.ts b/apps/next-app-scalar/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..21c25a5f --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/exports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateExportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateExportSchema = CreateExportSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/invoices-entity.ts b/apps/next-app-scalar/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..cbab42ff --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/invoices-input.ts b/apps/next-app-scalar/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..07d279d2 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/invoices-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateInvoiceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/members-entity.ts b/apps/next-app-scalar/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..8a5c5ccd --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/members-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/members-input.ts b/apps/next-app-scalar/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..fdccd311 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/members-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateMemberSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/notifications-entity.ts b/apps/next-app-scalar/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..ff8107e6 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const NotificationListResponse = z.object({ + items: z.array(NotificationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const NotificationIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/notifications-input.ts b/apps/next-app-scalar/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..421e709c --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/notifications-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateNotificationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateNotificationSchema = CreateNotificationSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/orders-entity.ts b/apps/next-app-scalar/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..2bf76fbb --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/orders-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/orders-input.ts b/apps/next-app-scalar/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..9826c38f --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/orders-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrderSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/organizations-entity.ts b/apps/next-app-scalar/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..4bd841b5 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrganizationListResponse = z.object({ + items: z.array(OrganizationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrganizationIdParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/organizations-input.ts b/apps/next-app-scalar/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..24198e68 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/organizations-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrganizationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrganizationSchema = CreateOrganizationSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/payments-entity.ts b/apps/next-app-scalar/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..fca47a60 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/payments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const PaymentListResponse = z.object({ + items: z.array(PaymentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const PaymentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/payments-input.ts b/apps/next-app-scalar/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..15f4871f --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/payments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreatePaymentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdatePaymentSchema = CreatePaymentSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/products-entity.ts b/apps/next-app-scalar/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..681fc713 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/products-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProductListResponse = z.object({ + items: z.array(ProductSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProductIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/products-input.ts b/apps/next-app-scalar/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..d8cd63e2 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/products-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProductSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProductSchema = CreateProductSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/projects-entity.ts b/apps/next-app-scalar/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..4d3f3c01 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/projects-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProjectListResponse = z.object({ + items: z.array(ProjectSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProjectCollectionPathParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); + +export const ProjectIdParamsSchema = z.object({ + organizationId: z.string().uuid(), + projectId: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/projects-input.ts b/apps/next-app-scalar/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..7f687df8 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/projects-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProjectSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProjectSchema = CreateProjectSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/refunds-entity.ts b/apps/next-app-scalar/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..9d9867ee --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/refunds-input.ts b/apps/next-app-scalar/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..f90e1386 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/refunds-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateRefundSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/reports-entity.ts b/apps/next-app-scalar/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..2981e8f1 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/reports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/reports-input.ts b/apps/next-app-scalar/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..d65dbc4c --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/reports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateReportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateReportSchema = CreateReportSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/sessions-entity.ts b/apps/next-app-scalar/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..9880f94b --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/sessions-input.ts b/apps/next-app-scalar/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..00d4afeb --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/sessions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSessionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/subscriptions-entity.ts b/apps/next-app-scalar/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..2d61082d --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SubscriptionListResponse = z.object({ + items: z.array(SubscriptionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SubscriptionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/subscriptions-input.ts b/apps/next-app-scalar/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..28273921 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSubscriptionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSubscriptionSchema = CreateSubscriptionSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/tasks-entity.ts b/apps/next-app-scalar/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..09677f29 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().uuid(), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().uuid(), + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/tasks-input.ts b/apps/next-app-scalar/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..0c1422c3 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/tasks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTaskSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/teams-entity.ts b/apps/next-app-scalar/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..afbf8fcf --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/teams-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TeamListResponse = z.object({ + items: z.array(TeamSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TeamIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/teams-input.ts b/apps/next-app-scalar/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..7043e4b5 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/teams-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTeamSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTeamSchema = CreateTeamSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/webhooks-entity.ts b/apps/next-app-scalar/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..ddb257ab --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/webhooks-input.ts b/apps/next-app-scalar/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..61a0e181 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWebhookSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); diff --git a/apps/next-app-scalar/src/schemas/generated/workspaces-entity.ts b/apps/next-app-scalar/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..20d92e0e --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-scalar/src/schemas/generated/workspaces-input.ts b/apps/next-app-scalar/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..e6b80db9 --- /dev/null +++ b/apps/next-app-scalar/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWorkspaceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); diff --git a/apps/next-app-swagger/package.json b/apps/next-app-swagger/package.json index 9b97b5c0..1bc77792 100644 --- a/apps/next-app-swagger/package.json +++ b/apps/next-app-swagger/package.json @@ -27,6 +27,7 @@ "@workspace/next-config": "workspace:*", "babel-plugin-react-compiler": "catalog:", "next-openapi-gen": "workspace:*", - "typescript": "catalog:" + "typescript": "catalog:", + "zod": "catalog:" } } diff --git a/apps/next-app-swagger/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..debc3905 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId swaggerAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeySchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId swaggerAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId swaggerAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/api-keys/route.ts b/apps/next-app-swagger/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..9fb6589e --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId swaggerAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuerySchema + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId swaggerAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..8603f899 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId swaggerAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId swaggerAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId swaggerAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/attachments/route.ts b/apps/next-app-swagger/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..bb1558e6 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId swaggerAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuerySchema + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId swaggerAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..0704c210 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId swaggerAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId swaggerAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId swaggerAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/audit-logs/route.ts b/apps/next-app-swagger/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..345a705c --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId swaggerAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId swaggerAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..2e65d8fb --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId swaggerAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId swaggerAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId swaggerAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/catalog-items/route.ts b/apps/next-app-swagger/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..a0448727 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId swaggerAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuerySchema + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId swaggerAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..1f4908e4 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId swaggerAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId swaggerAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId swaggerAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/comments/route.ts b/apps/next-app-swagger/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..0bbc0aba --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId swaggerAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId swaggerAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..c97a9534 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId swaggerAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId swaggerAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId swaggerAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/customers/route.ts b/apps/next-app-swagger/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..51b5dc61 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId swaggerAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuerySchema + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId swaggerAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..de99670d --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId swaggerAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId swaggerAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId swaggerAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/departments/route.ts b/apps/next-app-swagger/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..8a897035 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId swaggerAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId swaggerAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..5370b6e9 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId swaggerAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId swaggerAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId swaggerAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/documents/route.ts b/apps/next-app-swagger/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..0a263d11 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId swaggerAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuerySchema + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId swaggerAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..c59e7aee --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId swaggerAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId swaggerAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportSchema + * @response ExportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId swaggerAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/exports/route.ts b/apps/next-app-swagger/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..3aec3709 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId swaggerAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuerySchema + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId swaggerAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportSchema + * @response ExportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..295e7d03 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId swaggerAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId swaggerAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId swaggerAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/invoices/route.ts b/apps/next-app-swagger/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..9fa1522d --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId swaggerAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId swaggerAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/members/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..b0d7a914 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId swaggerAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId swaggerAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId swaggerAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/members/route.ts b/apps/next-app-swagger/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..6c6eb21f --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId swaggerAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId swaggerAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..be17aff4 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId swaggerAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId swaggerAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId swaggerAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/notifications/route.ts b/apps/next-app-swagger/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..9cb51a6b --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId swaggerAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuerySchema + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId swaggerAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..d3bd5dcd --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId swaggerAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId swaggerAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId swaggerAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/orders/route.ts b/apps/next-app-swagger/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..330a1bdd --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId swaggerAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId swaggerAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..db9a61e6 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId swaggerAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId swaggerAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId swaggerAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..1effbb66 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId swaggerAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuerySchema + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId swaggerAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..06b28a8a --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId swaggerAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId swaggerAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId swaggerAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/organizations/route.ts b/apps/next-app-swagger/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..c9af0cc6 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId swaggerAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuerySchema + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId swaggerAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..dba1de7c --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId swaggerAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId swaggerAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId swaggerAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/payments/route.ts b/apps/next-app-swagger/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..47dac9d3 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId swaggerAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuerySchema + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId swaggerAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/products/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..b310819e --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId swaggerAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId swaggerAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductSchema + * @response ProductSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId swaggerAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/products/route.ts b/apps/next-app-swagger/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..157a7fbd --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId swaggerAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuerySchema + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId swaggerAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductSchema + * @response ProductSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..107ecdab --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId swaggerAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId swaggerAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId swaggerAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-swagger/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..d27edec1 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId swaggerAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId swaggerAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..2b4c0df4 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId swaggerAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId swaggerAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId swaggerAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/refunds/route.ts b/apps/next-app-swagger/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..aa7fbd15 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId swaggerAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId swaggerAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..502326d0 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId swaggerAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId swaggerAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId swaggerAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/reports/route.ts b/apps/next-app-swagger/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..7c9c5441 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId swaggerAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId swaggerAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..05827747 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId swaggerAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId swaggerAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId swaggerAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/sessions/route.ts b/apps/next-app-swagger/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..5537d845 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId swaggerAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId swaggerAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..3aa19922 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId swaggerAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId swaggerAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId swaggerAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/subscriptions/route.ts b/apps/next-app-swagger/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..acc029e5 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId swaggerAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuerySchema + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId swaggerAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..8e0c7952 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId swaggerAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId swaggerAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId swaggerAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/teams/route.ts b/apps/next-app-swagger/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..a64f5b83 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId swaggerAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuerySchema + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId swaggerAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..df52e64f --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId swaggerAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId swaggerAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId swaggerAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/webhooks/route.ts b/apps/next-app-swagger/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..7d3b6201 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId swaggerAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId swaggerAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-swagger/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..21610ef9 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId swaggerAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId swaggerAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId swaggerAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/app/api/generated/workspaces/route.ts b/apps/next-app-swagger/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..769dd672 --- /dev/null +++ b/apps/next-app-swagger/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId swaggerAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId swaggerAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-swagger/src/schemas/generated/api-keys-entity.ts b/apps/next-app-swagger/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..e16eeeeb --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeySchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ApiKeyListResponse = z.object({ + items: z.array(ApiKeySchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ApiKeyIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/api-keys-input.ts b/apps/next-app-swagger/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..12b4864a --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeyListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateApiKeySchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateApiKeySchema = CreateApiKeySchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/attachments-entity.ts b/apps/next-app-swagger/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..d67ef024 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AttachmentListResponse = z.object({ + items: z.array(AttachmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AttachmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/attachments-input.ts b/apps/next-app-swagger/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..845843f3 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/attachments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAttachmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAttachmentSchema = CreateAttachmentSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/audit-logs-entity.ts b/apps/next-app-swagger/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..bd9b8931 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/audit-logs-input.ts b/apps/next-app-swagger/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..34e13d87 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAuditLogSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/catalog-items-entity.ts b/apps/next-app-swagger/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e7a311cb --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CatalogItemListResponse = z.object({ + items: z.array(CatalogItemSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CatalogItemIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/catalog-items-input.ts b/apps/next-app-swagger/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..9ca2d0fb --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCatalogItemSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCatalogItemSchema = CreateCatalogItemSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/comments-entity.ts b/apps/next-app-swagger/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..44db99e6 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/comments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/comments-input.ts b/apps/next-app-swagger/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..840de293 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/comments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCommentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/customers-entity.ts b/apps/next-app-swagger/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..7da28861 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/customers-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CustomerListResponse = z.object({ + items: z.array(CustomerSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CustomerIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/customers-input.ts b/apps/next-app-swagger/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..da9fe60a --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/customers-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCustomerSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCustomerSchema = CreateCustomerSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/departments-entity.ts b/apps/next-app-swagger/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..92c51920 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/departments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/departments-input.ts b/apps/next-app-swagger/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..d3705544 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/departments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDepartmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/documents-entity.ts b/apps/next-app-swagger/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..a8f57a10 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/documents-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DocumentListResponse = z.object({ + items: z.array(DocumentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DocumentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/documents-input.ts b/apps/next-app-swagger/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..869eca94 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/documents-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDocumentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDocumentSchema = CreateDocumentSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/exports-entity.ts b/apps/next-app-swagger/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..8b3a79c8 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/exports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ExportListResponse = z.object({ + items: z.array(ExportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ExportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/exports-input.ts b/apps/next-app-swagger/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..21c25a5f --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/exports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateExportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateExportSchema = CreateExportSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/invoices-entity.ts b/apps/next-app-swagger/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..cbab42ff --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/invoices-input.ts b/apps/next-app-swagger/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..07d279d2 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/invoices-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateInvoiceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/members-entity.ts b/apps/next-app-swagger/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..8a5c5ccd --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/members-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/members-input.ts b/apps/next-app-swagger/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..fdccd311 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/members-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateMemberSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/notifications-entity.ts b/apps/next-app-swagger/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..ff8107e6 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const NotificationListResponse = z.object({ + items: z.array(NotificationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const NotificationIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/notifications-input.ts b/apps/next-app-swagger/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..421e709c --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/notifications-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateNotificationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateNotificationSchema = CreateNotificationSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/orders-entity.ts b/apps/next-app-swagger/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..2bf76fbb --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/orders-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/orders-input.ts b/apps/next-app-swagger/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..9826c38f --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/orders-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrderSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/organizations-entity.ts b/apps/next-app-swagger/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..4bd841b5 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrganizationListResponse = z.object({ + items: z.array(OrganizationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrganizationIdParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/organizations-input.ts b/apps/next-app-swagger/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..24198e68 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/organizations-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrganizationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrganizationSchema = CreateOrganizationSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/payments-entity.ts b/apps/next-app-swagger/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..fca47a60 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/payments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const PaymentListResponse = z.object({ + items: z.array(PaymentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const PaymentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/payments-input.ts b/apps/next-app-swagger/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..15f4871f --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/payments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreatePaymentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdatePaymentSchema = CreatePaymentSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/products-entity.ts b/apps/next-app-swagger/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..681fc713 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/products-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProductListResponse = z.object({ + items: z.array(ProductSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProductIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/products-input.ts b/apps/next-app-swagger/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..d8cd63e2 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/products-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProductSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProductSchema = CreateProductSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/projects-entity.ts b/apps/next-app-swagger/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..4d3f3c01 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/projects-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProjectListResponse = z.object({ + items: z.array(ProjectSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProjectCollectionPathParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); + +export const ProjectIdParamsSchema = z.object({ + organizationId: z.string().uuid(), + projectId: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/projects-input.ts b/apps/next-app-swagger/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..7f687df8 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/projects-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProjectSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProjectSchema = CreateProjectSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/refunds-entity.ts b/apps/next-app-swagger/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..9d9867ee --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/refunds-input.ts b/apps/next-app-swagger/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..f90e1386 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/refunds-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateRefundSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/reports-entity.ts b/apps/next-app-swagger/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..2981e8f1 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/reports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/reports-input.ts b/apps/next-app-swagger/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..d65dbc4c --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/reports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateReportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateReportSchema = CreateReportSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/sessions-entity.ts b/apps/next-app-swagger/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..9880f94b --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/sessions-input.ts b/apps/next-app-swagger/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..00d4afeb --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/sessions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSessionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/subscriptions-entity.ts b/apps/next-app-swagger/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..2d61082d --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SubscriptionListResponse = z.object({ + items: z.array(SubscriptionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SubscriptionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/subscriptions-input.ts b/apps/next-app-swagger/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..28273921 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSubscriptionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSubscriptionSchema = CreateSubscriptionSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/tasks-entity.ts b/apps/next-app-swagger/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..09677f29 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().uuid(), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().uuid(), + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/tasks-input.ts b/apps/next-app-swagger/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..0c1422c3 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/tasks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTaskSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/teams-entity.ts b/apps/next-app-swagger/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..afbf8fcf --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/teams-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TeamListResponse = z.object({ + items: z.array(TeamSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TeamIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/teams-input.ts b/apps/next-app-swagger/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..7043e4b5 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/teams-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTeamSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTeamSchema = CreateTeamSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/webhooks-entity.ts b/apps/next-app-swagger/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..ddb257ab --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/webhooks-input.ts b/apps/next-app-swagger/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..61a0e181 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWebhookSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); diff --git a/apps/next-app-swagger/src/schemas/generated/workspaces-entity.ts b/apps/next-app-swagger/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..20d92e0e --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-swagger/src/schemas/generated/workspaces-input.ts b/apps/next-app-swagger/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..e6b80db9 --- /dev/null +++ b/apps/next-app-swagger/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWorkspaceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); diff --git a/apps/next-app-ts-config/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..2cac8ff3 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId tsConfigAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId tsConfigAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId tsConfigAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/api-keys/route.ts b/apps/next-app-ts-config/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..c543e4e9 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId tsConfigAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId tsConfigAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..72482471 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId tsConfigAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId tsConfigAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId tsConfigAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/attachments/route.ts b/apps/next-app-ts-config/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..9ef9f2ba --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId tsConfigAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId tsConfigAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..95ed4e5f --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId tsConfigAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId tsConfigAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId tsConfigAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/audit-logs/route.ts b/apps/next-app-ts-config/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..48f00f81 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId tsConfigAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId tsConfigAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..4eeb81cc --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId tsConfigAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId tsConfigAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId tsConfigAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/catalog-items/route.ts b/apps/next-app-ts-config/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..588bf26a --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId tsConfigAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId tsConfigAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..34564924 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId tsConfigAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId tsConfigAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId tsConfigAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/comments/route.ts b/apps/next-app-ts-config/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..3f213fce --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId tsConfigAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId tsConfigAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..4e7f6405 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId tsConfigAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId tsConfigAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId tsConfigAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/customers/route.ts b/apps/next-app-ts-config/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..2b102011 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId tsConfigAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId tsConfigAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..76263cee --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId tsConfigAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId tsConfigAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId tsConfigAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/departments/route.ts b/apps/next-app-ts-config/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..109fd82a --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId tsConfigAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId tsConfigAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..166dc68b --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId tsConfigAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId tsConfigAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId tsConfigAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/documents/route.ts b/apps/next-app-ts-config/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..91f5f386 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId tsConfigAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId tsConfigAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..3f939f5e --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId tsConfigAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId tsConfigAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId tsConfigAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/exports/route.ts b/apps/next-app-ts-config/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..1669ab49 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId tsConfigAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId tsConfigAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..4a1ff558 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId tsConfigAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId tsConfigAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId tsConfigAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/invoices/route.ts b/apps/next-app-ts-config/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..940f5be9 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId tsConfigAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId tsConfigAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/members/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..c7dae7fb --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId tsConfigAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId tsConfigAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId tsConfigAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/members/route.ts b/apps/next-app-ts-config/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..7e3fcde1 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId tsConfigAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId tsConfigAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..6cb6b2a9 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId tsConfigAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId tsConfigAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId tsConfigAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/notifications/route.ts b/apps/next-app-ts-config/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..19a32f34 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId tsConfigAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId tsConfigAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..b175784c --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId tsConfigAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId tsConfigAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId tsConfigAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/orders/route.ts b/apps/next-app-ts-config/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..f410cd10 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId tsConfigAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId tsConfigAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..30eaf315 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId tsConfigAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId tsConfigAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId tsConfigAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..928741b7 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId tsConfigAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId tsConfigAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..ec739be9 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId tsConfigAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId tsConfigAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId tsConfigAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/organizations/route.ts b/apps/next-app-ts-config/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..c6f75fff --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId tsConfigAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId tsConfigAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..bafdaacf --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId tsConfigAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId tsConfigAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId tsConfigAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/payments/route.ts b/apps/next-app-ts-config/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..a4da5915 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId tsConfigAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId tsConfigAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/products/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..f291867d --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId tsConfigAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId tsConfigAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId tsConfigAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/products/route.ts b/apps/next-app-ts-config/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..51cc02e5 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId tsConfigAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId tsConfigAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..e74ae81c --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId tsConfigAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId tsConfigAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId tsConfigAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-ts-config/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..eaa19e7a --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId tsConfigAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId tsConfigAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..f44699fc --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId tsConfigAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId tsConfigAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId tsConfigAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/refunds/route.ts b/apps/next-app-ts-config/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..ee142139 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId tsConfigAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId tsConfigAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..77a9e894 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId tsConfigAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId tsConfigAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId tsConfigAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/reports/route.ts b/apps/next-app-ts-config/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..926b324f --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId tsConfigAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId tsConfigAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..0f39a3b0 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId tsConfigAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId tsConfigAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId tsConfigAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/sessions/route.ts b/apps/next-app-ts-config/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..7dedd94b --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId tsConfigAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId tsConfigAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..2dba5ff3 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId tsConfigAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId tsConfigAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId tsConfigAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/subscriptions/route.ts b/apps/next-app-ts-config/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..b5b28cf8 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId tsConfigAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId tsConfigAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..235575ce --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId tsConfigAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId tsConfigAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId tsConfigAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/teams/route.ts b/apps/next-app-ts-config/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..5e044d48 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId tsConfigAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId tsConfigAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..e015cefa --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId tsConfigAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId tsConfigAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId tsConfigAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/webhooks/route.ts b/apps/next-app-ts-config/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..d9473f4b --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId tsConfigAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId tsConfigAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-ts-config/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..0e9962d3 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId tsConfigAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId tsConfigAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId tsConfigAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/app/api/generated/workspaces/route.ts b/apps/next-app-ts-config/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..25b4ded9 --- /dev/null +++ b/apps/next-app-ts-config/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId tsConfigAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId tsConfigAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-ts-config/src/schemas/generated/api-keys-entity.ts b/apps/next-app-ts-config/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/api-keys-input.ts b/apps/next-app-ts-config/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/attachments-entity.ts b/apps/next-app-ts-config/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/attachments-input.ts b/apps/next-app-ts-config/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/audit-logs-entity.ts b/apps/next-app-ts-config/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/audit-logs-input.ts b/apps/next-app-ts-config/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/catalog-items-entity.ts b/apps/next-app-ts-config/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/catalog-items-input.ts b/apps/next-app-ts-config/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/comments-entity.ts b/apps/next-app-ts-config/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/comments-input.ts b/apps/next-app-ts-config/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/customers-entity.ts b/apps/next-app-ts-config/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/customers-input.ts b/apps/next-app-ts-config/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/departments-entity.ts b/apps/next-app-ts-config/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/departments-input.ts b/apps/next-app-ts-config/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/documents-entity.ts b/apps/next-app-ts-config/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/documents-input.ts b/apps/next-app-ts-config/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/exports-entity.ts b/apps/next-app-ts-config/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/exports-input.ts b/apps/next-app-ts-config/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/invoices-entity.ts b/apps/next-app-ts-config/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/invoices-input.ts b/apps/next-app-ts-config/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/members-entity.ts b/apps/next-app-ts-config/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/members-input.ts b/apps/next-app-ts-config/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/notifications-entity.ts b/apps/next-app-ts-config/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/notifications-input.ts b/apps/next-app-ts-config/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/orders-entity.ts b/apps/next-app-ts-config/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/orders-input.ts b/apps/next-app-ts-config/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/organizations-entity.ts b/apps/next-app-ts-config/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/organizations-input.ts b/apps/next-app-ts-config/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/payments-entity.ts b/apps/next-app-ts-config/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/payments-input.ts b/apps/next-app-ts-config/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/products-entity.ts b/apps/next-app-ts-config/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/products-input.ts b/apps/next-app-ts-config/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/projects-entity.ts b/apps/next-app-ts-config/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/projects-input.ts b/apps/next-app-ts-config/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/refunds-entity.ts b/apps/next-app-ts-config/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/refunds-input.ts b/apps/next-app-ts-config/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/reports-entity.ts b/apps/next-app-ts-config/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/reports-input.ts b/apps/next-app-ts-config/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/sessions-entity.ts b/apps/next-app-ts-config/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/sessions-input.ts b/apps/next-app-ts-config/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/subscriptions-entity.ts b/apps/next-app-ts-config/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/subscriptions-input.ts b/apps/next-app-ts-config/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/tasks-entity.ts b/apps/next-app-ts-config/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/tasks-input.ts b/apps/next-app-ts-config/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/teams-entity.ts b/apps/next-app-ts-config/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/teams-input.ts b/apps/next-app-ts-config/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/webhooks-entity.ts b/apps/next-app-ts-config/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/webhooks-input.ts b/apps/next-app-ts-config/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/workspaces-entity.ts b/apps/next-app-ts-config/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/apps/next-app-ts-config/src/schemas/generated/workspaces-input.ts b/apps/next-app-ts-config/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/apps/next-app-ts-config/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/public/openapi.json b/apps/next-app-typescript/public/openapi.json index f3c1ff52..8cfe78aa 100644 --- a/apps/next-app-typescript/public/openapi.json +++ b/apps/next-app-typescript/public/openapi.json @@ -127,6 +127,123 @@ "manifest" ] }, + "ApiKeyEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "ApiKeyIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ApiKeyListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ApiKeyListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, "ApiResponse": { "oneOf": [ { @@ -229,535 +346,566 @@ "uploadedAt" ] }, - "BillingCookies": { + "AttachmentEntity": { "type": "object", "properties": { - "session": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { "type": "string", - "description": "Session token" + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" } }, "required": [ - "session" + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" ] }, - "BillingRequestHeaders": { + "AttachmentIdParams": { "type": "object", - "properties": {} + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] }, - "Comment": { + "AttachmentListQuery": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Comment ID" + "page": { + "type": "string" }, - "content": { - "type": "string", - "description": "Comment content" + "limit": { + "type": "string" }, - "author": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" - } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ], - "description": "User who created the comment" + "search": { + "type": "string" }, - "attachments": { + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "AttachmentListResponse": { + "type": "object", + "properties": { + "items": { "type": "array", "items": { "type": "object", "properties": { "id": { - "type": "string", - "description": "Attachment ID" + "type": "string" }, - "fileName": { - "type": "string", - "description": "Original file name" + "name": { + "type": "string" }, - "fileSize": { - "type": "number", - "description": "Size in bytes" + "description": { + "type": "string" }, - "fileType": { - "type": "string", - "description": "MIME type" + "active": { + "type": "boolean" }, - "url": { + "status": { "type": "string", - "description": "Download URL" + "enum": [ + "draft", + "active", + "archived" + ] }, - "thumbnailUrl": { - "type": "string", - "description": "Thumbnail URL for images" + "createdAt": { + "type": "string" }, - "uploadedAt": { - "type": "string", - "format": "date-time", - "description": "When the file was uploaded" + "updatedAt": { + "type": "string" } }, "required": [ "id", - "fileName", - "fileSize", - "fileType", - "url", - "uploadedAt" + "name", + "active", + "status", + "createdAt", + "updatedAt" ] - }, - "description": "Attached files" + } }, - "mentions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" - } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ] - }, - "description": "Users mentioned in the comment" + "total": { + "type": "number" }, - "likes": { - "type": "number", - "description": "Number of likes" + "page": { + "type": "number" }, - "likedBy": { - "type": "array", - "items": { - "type": "string" - }, - "description": "User IDs who liked the comment" + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "AuditLogEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "replyTo": { - "type": "string", - "description": "Parent comment ID if this is a reply" + "name": { + "type": "string" }, - "replies": { + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "AuditLogIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "AuditLogListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "AuditLogListResponse": { + "type": "object", + "properties": { + "items": { "type": "array", "items": { "type": "object", "properties": { "id": { - "type": "string", - "description": "Comment ID" - }, - "content": { - "type": "string", - "description": "Comment content" - }, - "author": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" - } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ], - "description": "User who created the comment" - }, - "attachments": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Attachment ID" - }, - "fileName": { - "type": "string", - "description": "Original file name" - }, - "fileSize": { - "type": "number", - "description": "Size in bytes" - }, - "fileType": { - "type": "string", - "description": "MIME type" - }, - "url": { - "type": "string", - "description": "Download URL" - }, - "thumbnailUrl": { - "type": "string", - "description": "Thumbnail URL for images" - }, - "uploadedAt": { - "type": "string", - "format": "date-time", - "description": "When the file was uploaded" - } - }, - "required": [ - "id", - "fileName", - "fileSize", - "fileType", - "url", - "uploadedAt" - ] - }, - "description": "Attached files" - }, - "mentions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" - } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ] - }, - "description": "Users mentioned in the comment" - }, - "likes": { - "type": "number", - "description": "Number of likes" - }, - "likedBy": { - "type": "array", - "items": { - "type": "string" - }, - "description": "User IDs who liked the comment" - }, - "replyTo": { - "type": "string", - "description": "Parent comment ID if this is a reply" - }, - "replies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Comment" - }, - "description": "Child comments (if includeReplies=true)" + "type": "string" }, - "createdAt": { - "type": "string", - "format": "date-time", - "description": "Creation timestamp" + "name": { + "type": "string" }, - "updatedAt": { - "type": "string", - "format": "date-time", - "description": "Last update timestamp" + "description": { + "type": "string" }, - "deletedAt": { - "type": "string", - "format": "date-time", - "description": "Soft deletion timestamp" + "active": { + "type": "boolean" } }, "required": [ "id", - "content", - "author", - "attachments", - "mentions", - "likes", - "likedBy", - "createdAt" + "name", + "active" ] - }, - "description": "Child comments (if includeReplies=true)" + } }, - "createdAt": { - "type": "string", - "format": "date-time", - "description": "Creation timestamp" + "total": { + "type": "number" }, - "updatedAt": { - "type": "string", - "format": "date-time", - "description": "Last update timestamp" + "page": { + "type": "number" }, - "deletedAt": { - "type": "string", - "format": "date-time", - "description": "Soft deletion timestamp" + "limit": { + "type": "number" } }, "required": [ - "id", - "content", - "author", - "attachments", - "mentions", - "likes", - "likedBy", - "createdAt" + "items", + "total", + "page", + "limit" ] }, - "CommentPathParams": { + "BillingCookies": { "type": "object", "properties": { - "orgId": { + "session": { "type": "string", - "description": "Organization ID" + "description": "Session token" + } + }, + "required": [ + "session" + ] + }, + "BillingRequestHeaders": { + "type": "object", + "properties": {} + }, + "CatalogItemEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "projectId": { - "type": "string", - "description": "Project ID within the organization" + "name": { + "type": "string" }, - "taskId": { - "type": "string", - "description": "Task ID within the project" + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" } }, "required": [ - "orgId", - "projectId", - "taskId" + "id", + "name", + "active", + "createdAt", + "updatedAt" ] }, - "CommentsQueryParams": { + "CatalogItemIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CatalogItemListQuery": { "type": "object", "properties": { "page": { - "type": "number", - "description": "Page number for pagination" + "type": "string" }, "limit": { - "type": "number", - "description": "Number of comments per page" + "type": "string" }, - "sort": { + "search": { + "type": "string" + }, + "active": { "type": "string", "enum": [ - "newest", - "oldest", - "likes" - ], - "description": "Sort order" + "true", + "false" + ] + } + } + }, + "CatalogItemListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } }, - "includeDeleted": { - "type": "boolean", - "description": "Whether to include soft-deleted comments" + "total": { + "type": "number" }, - "includeReplies": { - "type": "boolean", - "description": "Whether to include replies" + "page": { + "type": "number" }, - "user": { - "type": "string", - "description": "Filter by user ID" + "limit": { + "type": "number" } - } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] }, - "CommentsResponse": { + "Comment": { "type": "object", "properties": { - "task": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Task ID" - }, - "title": { - "type": "string", - "description": "Task title" - } - }, - "required": [ - "id", - "title" - ] + "id": { + "type": "string", + "description": "Comment ID" }, - "project": { + "content": { + "type": "string", + "description": "Comment content" + }, + "author": { "type": "object", "properties": { "id": { "type": "string", - "description": "Project ID" + "description": "User ID" }, "name": { "type": "string", - "description": "Project name" - } - }, - "required": [ - "id", - "name" - ] - }, - "organization": { - "type": "object", - "properties": { - "id": { + "description": "User's full name" + }, + "avatar": { "type": "string", - "description": "Organization ID" + "description": "URL to user's avatar" }, - "name": { + "role": { "type": "string", - "description": "Organization name" + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" } }, "required": [ "id", - "name" - ] + "name", + "avatar", + "role" + ], + "description": "User who created the comment" }, - "comments": { + "attachments": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", - "description": "Comment ID" + "description": "Attachment ID" }, - "content": { + "fileName": { "type": "string", - "description": "Comment content" + "description": "Original file name" }, - "author": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" - } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ], - "description": "User who created the comment" + "fileSize": { + "type": "number", + "description": "Size in bytes" }, - "attachments": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Attachment ID" - }, - "fileName": { + "fileType": { + "type": "string", + "description": "MIME type" + }, + "url": { + "type": "string", + "description": "Download URL" + }, + "thumbnailUrl": { + "type": "string", + "description": "Thumbnail URL for images" + }, + "uploadedAt": { + "type": "string", + "format": "date-time", + "description": "When the file was uploaded" + } + }, + "required": [ + "id", + "fileName", + "fileSize", + "fileType", + "url", + "uploadedAt" + ] + }, + "description": "Attached files" + }, + "mentions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + }, + "required": [ + "id", + "name", + "avatar", + "role" + ] + }, + "description": "Users mentioned in the comment" + }, + "likes": { + "type": "number", + "description": "Number of likes" + }, + "likedBy": { + "type": "array", + "items": { + "type": "string" + }, + "description": "User IDs who liked the comment" + }, + "replyTo": { + "type": "string", + "description": "Parent comment ID if this is a reply" + }, + "replies": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Comment ID" + }, + "content": { + "type": "string", + "description": "Comment content" + }, + "author": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + }, + "required": [ + "id", + "name", + "avatar", + "role" + ], + "description": "User who created the comment" + }, + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Attachment ID" + }, + "fileName": { "type": "string", "description": "Original file name" }, @@ -879,260 +1027,273 @@ "createdAt" ] }, - "description": "List of comments" + "description": "Child comments (if includeReplies=true)" }, - "pagination": { - "type": "object", - "properties": { - "total": { - "type": "number", - "description": "Total number of comments" - }, - "page": { - "type": "number", - "description": "Current page" - }, - "limit": { - "type": "number", - "description": "Items per page" - }, - "pages": { - "type": "number", - "description": "Total number of pages" - } - }, - "required": [ - "total", - "page", - "limit", - "pages" - ], - "description": "List of comments" + "createdAt": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp" }, - "permissions": { - "type": "object", - "properties": { - "canCreate": { - "type": "boolean", - "description": "Whether user can create comments" - }, - "canEdit": { - "type": "boolean", - "description": "Whether user can edit comments" - }, - "canDelete": { - "type": "boolean", - "description": "Whether user can delete comments" - }, - "canModerate": { - "type": "boolean", - "description": "Whether user can moderate comments" - } - }, - "required": [ - "canCreate", - "canEdit", - "canDelete", - "canModerate" - ] + "updatedAt": { + "type": "string", + "format": "date-time", + "description": "Last update timestamp" + }, + "deletedAt": { + "type": "string", + "format": "date-time", + "description": "Soft deletion timestamp" } }, "required": [ - "task", - "project", - "organization", - "comments", - "pagination", - "permissions" + "id", + "content", + "author", + "attachments", + "mentions", + "likes", + "likedBy", + "createdAt" ] }, - "CreateAdminReportBody": { + "CommentEntity": { "type": "object", "properties": { - "kind": { - "type": "string", - "enum": [ - "financial", - "usage", - "audit" - ], - "nullable": false + "id": { + "type": "string" }, - "format": { - "type": "string", - "enum": [ - "csv", - "json", - "parquet" - ], - "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", - "nullable": false + "name": { + "type": "string" }, - "notify": { - "type": "string", - "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", - "nullable": false, - "format": "email", - "maxLength": 320 + "description": { + "type": "string" + }, + "active": { + "type": "boolean" } }, "required": [ - "kind", - "format", - "notify" + "id", + "name", + "active" ] }, - "CreateCommentBody": { + "CommentIdParams": { "type": "object", "properties": { - "content": { - "type": "string", - "description": "Comment content", - "nullable": false + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CommentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" }, - "attachmentIds": { - "type": [ - "array", - "null" - ], - "items": { - "type": "string" - }, - "description": "IDs of previously uploaded attachments" + "limit": { + "type": "string" }, - "mentions": { - "type": [ - "array", - "null" - ], + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "CommentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", "items": { - "type": "string" - }, - "description": "User IDs mentioned in the comment" + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } }, - "replyTo": { - "type": [ - "string", - "null" - ], - "description": "Parent comment ID if this is a reply" + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" } }, "required": [ - "content" + "items", + "total", + "page", + "limit" ] }, - "CreateCommentResponse": { + "CommentPathParams": { "type": "object", "properties": { - "comment": { + "orgId": { + "type": "string", + "description": "Organization ID" + }, + "projectId": { + "type": "string", + "description": "Project ID within the organization" + }, + "taskId": { + "type": "string", + "description": "Task ID within the project" + } + }, + "required": [ + "orgId", + "projectId", + "taskId" + ] + }, + "CommentsQueryParams": { + "type": "object", + "properties": { + "page": { + "type": "number", + "description": "Page number for pagination" + }, + "limit": { + "type": "number", + "description": "Number of comments per page" + }, + "sort": { + "type": "string", + "enum": [ + "newest", + "oldest", + "likes" + ], + "description": "Sort order" + }, + "includeDeleted": { + "type": "boolean", + "description": "Whether to include soft-deleted comments" + }, + "includeReplies": { + "type": "boolean", + "description": "Whether to include replies" + }, + "user": { + "type": "string", + "description": "Filter by user ID" + } + } + }, + "CommentsResponse": { + "type": "object", + "properties": { + "task": { "type": "object", "properties": { "id": { "type": "string", - "description": "Comment ID" + "description": "Task ID" }, - "content": { + "title": { "type": "string", - "description": "Comment content" + "description": "Task title" + } + }, + "required": [ + "id", + "title" + ] + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Project ID" }, - "author": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" - } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ], - "description": "User who created the comment" + "name": { + "type": "string", + "description": "Project name" + } + }, + "required": [ + "id", + "name" + ] + }, + "organization": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Organization ID" }, - "attachments": { - "type": "array", - "items": { + "name": { + "type": "string", + "description": "Organization name" + } + }, + "required": [ + "id", + "name" + ] + }, + "comments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Comment ID" + }, + "content": { + "type": "string", + "description": "Comment content" + }, + "author": { "type": "object", "properties": { "id": { "type": "string", - "description": "Attachment ID" - }, - "fileName": { - "type": "string", - "description": "Original file name" - }, - "fileSize": { - "type": "number", - "description": "Size in bytes" + "description": "User ID" }, - "fileType": { + "name": { "type": "string", - "description": "MIME type" + "description": "User's full name" }, - "url": { + "avatar": { "type": "string", - "description": "Download URL" + "description": "URL to user's avatar" }, - "thumbnailUrl": { - "type": "string", - "description": "Thumbnail URL for images" - }, - "uploadedAt": { - "type": "string", - "format": "date-time", - "description": "When the file was uploaded" - } - }, - "required": [ - "id", - "fileName", - "fileSize", - "fileType", - "url", - "uploadedAt" - ] - }, - "description": "Attached files" - }, - "mentions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { + "role": { "type": "string", "enum": [ "admin", @@ -1147,1700 +1308,11096 @@ "name", "avatar", "role" - ] + ], + "description": "User who created the comment" }, - "description": "Users mentioned in the comment" + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Attachment ID" + }, + "fileName": { + "type": "string", + "description": "Original file name" + }, + "fileSize": { + "type": "number", + "description": "Size in bytes" + }, + "fileType": { + "type": "string", + "description": "MIME type" + }, + "url": { + "type": "string", + "description": "Download URL" + }, + "thumbnailUrl": { + "type": "string", + "description": "Thumbnail URL for images" + }, + "uploadedAt": { + "type": "string", + "format": "date-time", + "description": "When the file was uploaded" + } + }, + "required": [ + "id", + "fileName", + "fileSize", + "fileType", + "url", + "uploadedAt" + ] + }, + "description": "Attached files" + }, + "mentions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + }, + "required": [ + "id", + "name", + "avatar", + "role" + ] + }, + "description": "Users mentioned in the comment" + }, + "likes": { + "type": "number", + "description": "Number of likes" + }, + "likedBy": { + "type": "array", + "items": { + "type": "string" + }, + "description": "User IDs who liked the comment" + }, + "replyTo": { + "type": "string", + "description": "Parent comment ID if this is a reply" + }, + "replies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + }, + "description": "Child comments (if includeReplies=true)" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "description": "Last update timestamp" + }, + "deletedAt": { + "type": "string", + "format": "date-time", + "description": "Soft deletion timestamp" + } }, - "likes": { + "required": [ + "id", + "content", + "author", + "attachments", + "mentions", + "likes", + "likedBy", + "createdAt" + ] + }, + "description": "List of comments" + }, + "pagination": { + "type": "object", + "properties": { + "total": { "type": "number", - "description": "Number of likes" + "description": "Total number of comments" }, - "likedBy": { - "type": "array", - "items": { - "type": "string" - }, - "description": "User IDs who liked the comment" + "page": { + "type": "number", + "description": "Current page" }, - "replyTo": { - "type": "string", - "description": "Parent comment ID if this is a reply" + "limit": { + "type": "number", + "description": "Items per page" }, - "replies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Comment" - }, - "description": "Child comments (if includeReplies=true)" + "pages": { + "type": "number", + "description": "Total number of pages" + } + }, + "required": [ + "total", + "page", + "limit", + "pages" + ], + "description": "List of comments" + }, + "permissions": { + "type": "object", + "properties": { + "canCreate": { + "type": "boolean", + "description": "Whether user can create comments" }, - "createdAt": { - "type": "string", - "format": "date-time", - "description": "Creation timestamp" + "canEdit": { + "type": "boolean", + "description": "Whether user can edit comments" }, - "updatedAt": { - "type": "string", - "format": "date-time", - "description": "Last update timestamp" + "canDelete": { + "type": "boolean", + "description": "Whether user can delete comments" }, - "deletedAt": { - "type": "string", - "format": "date-time", - "description": "Soft deletion timestamp" + "canModerate": { + "type": "boolean", + "description": "Whether user can moderate comments" } }, "required": [ - "id", - "content", - "author", - "attachments", - "mentions", - "likes", - "likedBy", - "createdAt" - ], - "description": "Created comment" - }, - "success": { - "type": "boolean", - "description": "Whether creation was successful" - }, - "message": { - "type": "string", - "description": "Success or error message" + "canCreate", + "canEdit", + "canDelete", + "canModerate" + ] } }, "required": [ - "comment", - "success" + "task", + "project", + "organization", + "comments", + "pagination", + "permissions" ] }, - "CreateInvoiceBody": { - "type": "object", - "properties": {} - }, - "CreateProductApiResponse": { + "CreateAdminReportBody": { "type": "object", "properties": { - "success": { - "type": "boolean" + "kind": { + "type": "string", + "enum": [ + "financial", + "usage", + "audit" + ], + "nullable": false }, - "data": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "productId": { - "type": "string" - } - }, - "required": [ - "success", - "productId" - ] + "format": { + "type": "string", + "enum": [ + "csv", + "json", + "parquet" + ], + "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", + "nullable": false }, - "timestamp": { - "type": "string" + "notify": { + "type": "string", + "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", + "nullable": false, + "format": "email", + "maxLength": 320 } }, "required": [ - "success", - "data", - "timestamp" + "kind", + "format", + "notify" ] }, - "CreateProductData": { + "CreateApiKeyInput": { "type": "object", "properties": { "name": { "type": "string", "nullable": false }, - "price": { - "type": "number", - "nullable": false + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "name", - "price" + "name" ] }, - "CreateProductOptions": { + "CreateAttachmentInput": { "type": "object", "properties": { - "notify": { - "type": "boolean", + "name": { + "type": "string", "nullable": false + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "notify" + "name" ] }, - "CreateProductRequest": { + "CreateAuditLogInput": { "type": "object", "properties": { - "product": { - "type": "object", - "properties": { - "name": { - "type": "string", - "nullable": false - }, - "price": { - "type": "number", - "nullable": false - } - }, - "required": [ - "name", - "price" - ], + "name": { + "type": "string", "nullable": false }, - "options": { + "description": { "type": [ - "object", + "string", "null" - ], - "properties": { - "notify": { - "type": "boolean", - "nullable": false - } - }, - "required": [ - "notify" ] - } - }, - "required": [ - "product" - ] - }, - "CreateProductResponse": { - "type": "object", - "properties": { - "success": { - "type": "boolean" }, - "productId": { - "type": "string" + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "success", - "productId" + "name" ] }, - "CreateReportBody": { + "CreateCatalogItemInput": { "type": "object", "properties": { - "title": { + "name": { "type": "string", "nullable": false }, - "from": { - "type": "string", - "description": "start date (ISO 8601)", - "nullable": false + "description": { + "type": [ + "string", + "null" + ] }, - "to": { - "type": "string", - "description": "end date (ISO 8601)", - "nullable": false + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "title", - "from", - "to" + "name" ] }, - "CsvExportBody": { - "type": "string" - }, - "DeleteCommentResponse": { + "CreateCommentBody": { "type": "object", "properties": { - "success": { - "type": "boolean", - "description": "Whether deletion was successful" - }, - "message": { + "content": { "type": "string", - "description": "Success or error message" + "description": "Comment content", + "nullable": false + }, + "attachmentIds": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "IDs of previously uploaded attachments" + }, + "mentions": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "User IDs mentioned in the comment" + }, + "replyTo": { + "type": [ + "string", + "null" + ], + "description": "Parent comment ID if this is a reply" } }, "required": [ - "success" + "content" ] }, - "EmailNotification": { + "CreateCommentInput": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "email" - ], - "nullable": false - }, - "to": { + "name": { "type": "string", - "description": "Recipient email address", "nullable": false }, - "subject": { - "type": "string", - "description": "Email subject", - "nullable": false + "description": { + "type": [ + "string", + "null" + ] }, - "body": { - "type": "string", - "description": "Email body content", - "nullable": false + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "type", - "to", - "subject", - "body" + "name" ] }, - "Envelope": { + "CreateCommentResponse": { "type": "object", "properties": { - "data": {}, - "meta": {} - }, - "required": [ - "data", - "meta" - ] - }, - "ErrorResponse": { + "comment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Comment ID" + }, + "content": { + "type": "string", + "description": "Comment content" + }, + "author": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + }, + "required": [ + "id", + "name", + "avatar", + "role" + ], + "description": "User who created the comment" + }, + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Attachment ID" + }, + "fileName": { + "type": "string", + "description": "Original file name" + }, + "fileSize": { + "type": "number", + "description": "Size in bytes" + }, + "fileType": { + "type": "string", + "description": "MIME type" + }, + "url": { + "type": "string", + "description": "Download URL" + }, + "thumbnailUrl": { + "type": "string", + "description": "Thumbnail URL for images" + }, + "uploadedAt": { + "type": "string", + "format": "date-time", + "description": "When the file was uploaded" + } + }, + "required": [ + "id", + "fileName", + "fileSize", + "fileType", + "url", + "uploadedAt" + ] + }, + "description": "Attached files" + }, + "mentions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + }, + "required": [ + "id", + "name", + "avatar", + "role" + ] + }, + "description": "Users mentioned in the comment" + }, + "likes": { + "type": "number", + "description": "Number of likes" + }, + "likedBy": { + "type": "array", + "items": { + "type": "string" + }, + "description": "User IDs who liked the comment" + }, + "replyTo": { + "type": "string", + "description": "Parent comment ID if this is a reply" + }, + "replies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + }, + "description": "Child comments (if includeReplies=true)" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "description": "Last update timestamp" + }, + "deletedAt": { + "type": "string", + "format": "date-time", + "description": "Soft deletion timestamp" + } + }, + "required": [ + "id", + "content", + "author", + "attachments", + "mentions", + "likes", + "likedBy", + "createdAt" + ], + "description": "Created comment" + }, + "success": { + "type": "boolean", + "description": "Whether creation was successful" + }, + "message": { + "type": "string", + "description": "Success or error message" + } + }, + "required": [ + "comment", + "success" + ] + }, + "CreateCustomerInput": { "type": "object", "properties": { - "status": { + "name": { "type": "string", - "enum": [ - "error" - ] + "nullable": false }, - "error": { - "type": "string", - "description": "Error message" + "description": { + "type": [ + "string", + "null" + ] }, - "code": { - "type": "number", - "description": "Error code" + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "status", - "error", - "code" + "name" ] }, - "ExportDownloadQuery": { + "CreateDepartmentInput": { "type": "object", "properties": { - "format": { + "name": { "type": "string", - "enum": [ - "csv", - "ndjson" + "nullable": false + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" ] } - } + }, + "required": [ + "name" + ] }, - "ExportIdParam": { + "CreateDocumentInput": { "type": "object", "properties": { - "exportId": { - "type": "string" + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "exportId" + "name" ] }, - "ImmutableInvoice": { + "CreateExportInput": { "type": "object", "properties": { - "id": { + "name": { "type": "string", - "description": "-override { \"format\": \"email\", \"maxLength\": 320 }" + "nullable": false }, - "customerEmail": { - "type": "string", - "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", - "format": "email", - "maxLength": 320 - }, - "amountMinor": { - "type": "integer", - "format": "int64", - "description": "Monetary amount in the smallest currency unit — emitted as `integer` with `format: int64` via `bigint`." - }, - "status": { - "type": "string", - "enum": [ - "draft", - "open", - "paid", - "uncollectible" + "description": { + "type": [ + "string", + "null" ] }, - "createdAt": { - "type": "string" - } - }, - "readOnly": true - }, - "InvoiceIdParams": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Invoice identifier" + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "id" + "name" ] }, - "InvoiceListItem": { + "CreateInvoiceBody": { "type": "object", - "properties": { - "id": { - "type": "string", - "description": "-override { \"format\": \"email\", \"maxLength\": 320 }" - }, - "customerEmail": { - "type": "string", - "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", - "format": "email", - "maxLength": 320 - }, - "amountMinor": { - "type": "integer", - "format": "int64", - "description": "Monetary amount in the smallest currency unit — emitted as `integer` with `format: int64` via `bigint`." - }, - "status": { - "type": "string", - "enum": [ - "draft", - "open", - "paid", - "uncollectible" - ] - }, - "createdAt": { - "type": "string" - } - } + "properties": {} }, - "InvoiceQuery": { + "CreateInvoiceInput": { "type": "object", "properties": { - "status": { + "name": { "type": "string", - "enum": [ - "draft", - "open", - "paid", - "uncollectible" - ] - }, - "from": { - "type": "string" + "nullable": false }, - "to": { - "type": "string" + "description": { + "type": [ + "string", + "null" + ] }, - "cursor": { - "type": "string" + "active": { + "type": [ + "boolean", + "null" + ] } - } + }, + "required": [ + "name" + ] }, - "InvoicesResponse": { + "CreateMemberInput": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "-override { \"format\": \"email\", \"maxLength\": 320 }" - }, - "customerEmail": { - "type": "string", - "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", - "format": "email", - "maxLength": 320 - }, - "amountMinor": { - "type": "integer", - "format": "int64", - "description": "Monetary amount in the smallest currency unit — emitted as `integer` with `format: int64` via `bigint`." - }, - "status": { - "type": "string", - "enum": [ - "draft", - "open", - "paid", - "uncollectible" - ] - }, - "createdAt": { - "type": "string" - } - } - } - }, - "total": { - "type": "number" + "name": { + "type": "string", + "nullable": false }, - "nextCursor": { + "description": { "type": [ "string", "null" ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "data", - "total", - "nextCursor" + "name" ] }, - "LLMSResponse": { + "CreateNotificationInput": { "type": "object", "properties": { - "llms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "provider": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - } - }, - "required": [ - "id", - "name", - "provider", - "isDefault" - ] - } + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "llms" + "name" ] }, - "LoginBody": { + "CreateOrderInput": { "type": "object", "properties": { - "email": { + "name": { "type": "string", - "description": "user email", "nullable": false }, - "password": { - "type": "string", - "description": "user password", - "nullable": false + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "email", - "password" + "name" ] }, - "LoginResponse": { + "CreateOrganizationInput": { "type": "object", "properties": { - "token": { + "name": { "type": "string", - "description": "auth token" + "nullable": false }, - "refresh_token": { - "type": "string", - "description": "refresh token" + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "token", - "refresh_token" + "name" ] }, - "Mutable": { - "type": "object", - "properties": {} - }, - "MyApiSuccessResponseBody": { + "CreatePaymentInput": { "type": "object", "properties": { - "success": { - "type": "boolean", - "enum": [ - true + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": [ + "string", + "null" ] }, - "httpCode": { - "type": "string" + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "success", - "httpCode" + "name" ] }, - "MyApiSuccessResponseBody": { + "CreateProductApiResponse": { "type": "object", "properties": { - "llms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "provider": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - } - }, - "required": [ - "id", - "name", - "provider", - "isDefault" - ] - } - }, "success": { - "type": "boolean", - "enum": [ - true - ] - }, - "httpCode": { - "type": "string" - } - }, - "required": [ - "llms", - "success", - "httpCode" - ] - }, - "Notification": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "email" - ], - "nullable": false - }, - "to": { - "type": "string", - "description": "Recipient email address", - "nullable": false - }, - "subject": { - "type": "string", - "description": "Email subject", - "nullable": false - }, - "body": { - "type": "string", - "description": "Email body content", - "nullable": false - } - }, - "required": [ - "type", - "to", - "subject", - "body" - ] + "type": "boolean" }, - { + "data": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "sms" - ], - "nullable": false - }, - "phoneNumber": { - "type": "string", - "description": "Phone number with country code (e.g., +1234567890)", - "nullable": false + "success": { + "type": "boolean" }, - "message": { - "type": "string", - "description": "SMS message (max 160 characters)", - "nullable": false + "productId": { + "type": "string" } }, "required": [ - "type", - "phoneNumber", - "message" + "success", + "productId" ] }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "push" - ], - "nullable": false - }, - "deviceId": { - "type": "string", - "description": "Device identifier for push notification", - "nullable": false - }, - "title": { - "type": "string", - "description": "Notification title", - "nullable": false - }, - "body": { - "type": "string", - "description": "Notification body", - "nullable": false - } - }, - "required": [ - "type", - "deviceId", - "title", - "body" - ] + "timestamp": { + "type": "string" } + }, + "required": [ + "success", + "data", + "timestamp" ] }, - "PaginatedResponse": { + "CreateProductData": { "type": "object", "properties": { - "data": { - "type": "array", - "items": {} + "name": { + "type": "string" }, - "total": { + "price": { "type": "number" + } + }, + "required": [ + "name", + "price" + ] + }, + "CreateProductInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false }, - "nextCursor": { + "description": { "type": [ "string", "null" ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "data", - "total", - "nextCursor" + "name" ] }, - "Product": { + "CreateProductOptions": { "type": "object", "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, - "description": { - "type": "string" - }, - "inStock": { + "notify": { "type": "boolean" } }, "required": [ - "id", - "name", - "price", - "inStock" + "notify" ] }, - "ProductByIdResponse": { + "CreateProductRequest": { "type": "object", "properties": { "product": { "type": "object", "properties": { - "id": { - "type": "string" - }, "name": { "type": "string" }, "price": { "type": "number" - }, - "description": { - "type": "string" - }, - "inStock": { - "type": "boolean" } }, "required": [ - "id", "name", - "price", - "inStock" - ] + "price" + ], + "nullable": false }, - "fetchedAt": { - "type": "string" + "options": { + "type": [ + "object", + "null" + ], + "properties": { + "notify": { + "type": "boolean" + } + }, + "required": [ + "notify" + ] } }, "required": [ - "product", - "fetchedAt" + "product" ] }, - "ProductIdParam": { + "CreateProductResponse": { "type": "object", "properties": { - "id": { + "success": { + "type": "boolean" + }, + "productId": { "type": "string" } }, "required": [ - "id" + "success", + "productId" ] }, - "ProductSummaryResponse": { + "CreateProjectInput": { "type": "object", "properties": { "name": { - "type": "string" + "type": "string", + "nullable": false }, - "price": { - "type": "number" + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "name", - "price" + "name" ] }, - "PushNotification": { + "CreateRefundInput": { "type": "object", "properties": { - "type": { + "name": { "type": "string", - "enum": [ - "push" - ], "nullable": false }, - "deviceId": { + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "name" + ] + }, + "CreateReportBody": { + "type": "object", + "properties": { + "title": { "type": "string", - "description": "Device identifier for push notification", "nullable": false }, - "title": { + "from": { "type": "string", - "description": "Notification title", + "description": "start date (ISO 8601)", "nullable": false }, - "body": { + "to": { "type": "string", - "description": "Notification body", + "description": "end date (ISO 8601)", "nullable": false } }, "required": [ - "type", - "deviceId", "title", - "body" + "from", + "to" ] }, - "Report": { + "CreateReportInput": { "type": "object", "properties": { - "id": { - "type": "string" + "name": { + "type": "string", + "nullable": false }, - "title": { - "type": "string" + "description": { + "type": [ + "string", + "null" + ] }, - "generatedAt": { - "type": "string" + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "id", - "title", - "generatedAt" - ] - }, - "ReportFormat": { - "type": "string", - "enum": [ - "csv", - "json", - "parquet" + "name" ] }, - "ReportKind": { - "type": "string", - "enum": [ - "financial", - "usage", - "audit" + "CreateSessionInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "name" ] }, - "ReportManifest": { - "type": "object" - }, - "ReportQuery": { + "CreateSubscriptionInput": { "type": "object", "properties": { - "from": { + "name": { "type": "string", - "description": "start date (ISO 8601)" + "nullable": false }, - "to": { - "type": "string", - "description": "end date (ISO 8601)" + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } - } + }, + "required": [ + "name" + ] }, - "ReportsResponse": { + "CreateTaskInput": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "generatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "title", - "generatedAt" - ] - } + "name": { + "type": "string", + "nullable": false }, - "total": { - "type": "number" + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "data", - "total" + "name" ] }, - "SessionActionInput": { + "CreateTeamInput": { "type": "object", "properties": { - "extendMinutes": { + "name": { + "type": "string", + "nullable": false + }, + "description": { "type": [ - "number", + "string", "null" ] }, - "revokeReason": { + "active": { "type": [ - "string", + "boolean", "null" ] } - } + }, + "required": [ + "name" + ] }, - "SessionEnvelope": { + "CreateWebhookInput": { "type": "object", "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "authChannel": { - "type": "string", - "enum": [ - "bearer", - "header", - "cookie" - ] - }, - "device": { - "type": "string" - }, - "ipAddress": { - "type": "string" - }, - "lastSeenAt": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "active", - "revoked" - ] - } - }, - "required": [ - "id", - "userId", - "authChannel", - "device", - "ipAddress", - "lastSeenAt", - "status" + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": [ + "string", + "null" ] }, - "meta": {} + "active": { + "type": [ + "boolean", + "null" + ] + } }, "required": [ - "data", - "meta" + "name" ] }, - "SessionIdParam": { + "CreateWorkspaceInput": { "type": "object", "properties": { - "sessionId": { - "type": "string" + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] } }, "required": [ - "sessionId" + "name" ] }, - "SessionResource": { + "CsvExportBody": { + "type": "string" + }, + "CustomerEntity": { "type": "object", "properties": { "id": { "type": "string" }, - "userId": { + "name": { "type": "string" }, - "authChannel": { - "type": "string", - "enum": [ - "bearer", - "header", - "cookie" - ] - }, - "device": { + "description": { "type": "string" }, - "ipAddress": { - "type": "string" - }, - "lastSeenAt": { - "type": "string" + "active": { + "type": "boolean" }, "status": { "type": "string", "enum": [ + "draft", "active", - "revoked" + "archived" ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" } }, "required": [ "id", - "userId", - "authChannel", - "device", - "ipAddress", - "lastSeenAt", - "status" + "name", + "active", + "status", + "createdAt", + "updatedAt" ] }, - "SmsNotification": { + "CustomerIdParams": { "type": "object", "properties": { - "type": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CustomerListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { "type": "string", "enum": [ - "sms" - ], - "nullable": false + "true", + "false" + ] + } + } + }, + "CustomerListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + } }, - "phoneNumber": { - "type": "string", - "description": "Phone number with country code (e.g., +1234567890)", - "nullable": false + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "DeleteCommentResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "description": "Whether deletion was successful" }, "message": { "type": "string", - "description": "SMS message (max 160 characters)", - "nullable": false + "description": "Success or error message" } }, "required": [ - "type", - "phoneNumber", - "message" + "success" ] }, - "SuccessResponse": { + "DepartmentEntity": { "type": "object", "properties": { - "status": { - "type": "string", - "enum": [ - "success" - ] + "id": { + "type": "string" }, - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier" - }, - "message": { - "type": "string", - "description": "Success message" - } - }, - "required": [ - "id", - "message" - ] + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" } }, "required": [ - "status", - "data" + "id", + "name", + "active", + "createdAt", + "updatedAt" ] }, - "UpdateCommentBody": { + "DepartmentIdParams": { "type": "object", "properties": { - "content": { - "type": [ - "string", - "null" - ], - "description": "Updated comment content" - }, - "addAttachmentIds": { - "type": [ - "array", - "null" - ], - "items": { - "type": "string" - }, - "description": "IDs of attachments to add" + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "DepartmentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" }, - "removeAttachmentIds": { - "type": [ - "array", - "null" - ], - "items": { - "type": "string" - }, - "description": "IDs of attachments to remove" + "limit": { + "type": "string" }, - "addMentions": { - "type": [ - "array", - "null" - ], - "items": { - "type": "string" - }, - "description": "User IDs to add to mentions" + "search": { + "type": "string" }, - "removeMentions": { - "type": [ - "array", - "null" - ], - "items": { - "type": "string" - }, - "description": "User IDs to remove from mentions" + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] } } }, - "UpdateCommentResponse": { + "DepartmentListResponse": { "type": "object", "properties": { - "comment": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Comment ID" - }, - "content": { - "type": "string", - "description": "Comment content" + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } }, - "author": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" - } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ], - "description": "User who created the comment" - }, - "attachments": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Attachment ID" - }, - "fileName": { - "type": "string", - "description": "Original file name" - }, - "fileSize": { - "type": "number", - "description": "Size in bytes" - }, - "fileType": { - "type": "string", - "description": "MIME type" - }, - "url": { - "type": "string", - "description": "Download URL" - }, - "thumbnailUrl": { - "type": "string", - "description": "Thumbnail URL for images" - }, - "uploadedAt": { - "type": "string", - "format": "date-time", - "description": "When the file was uploaded" - } - }, - "required": [ - "id", - "fileName", - "fileSize", - "fileType", - "url", - "uploadedAt" - ] - }, - "description": "Attached files" - }, - "mentions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" - }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" - } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ] - }, - "description": "Users mentioned in the comment" - }, - "likes": { - "type": "number", - "description": "Number of likes" - }, - "likedBy": { - "type": "array", - "items": { - "type": "string" - }, - "description": "User IDs who liked the comment" - }, - "replyTo": { - "type": "string", - "description": "Parent comment ID if this is a reply" - }, - "replies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Comment" - }, - "description": "Child comments (if includeReplies=true)" - }, - "createdAt": { - "type": "string", - "format": "date-time", - "description": "Creation timestamp" - }, - "updatedAt": { - "type": "string", - "format": "date-time", - "description": "Last update timestamp" - }, - "deletedAt": { - "type": "string", - "format": "date-time", - "description": "Soft deletion timestamp" - } - }, - "required": [ - "id", - "content", - "author", - "attachments", - "mentions", - "likes", - "likedBy", - "createdAt" - ], - "description": "Updated comment" + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } }, - "success": { - "type": "boolean", - "description": "Whether update was successful" + "total": { + "type": "number" }, - "message": { - "type": "string", - "description": "Success or error message" + "page": { + "type": "number" + }, + "limit": { + "type": "number" } }, "required": [ - "comment", - "success" + "items", + "total", + "page", + "limit" ] }, - "UpdateStockApiResponse": { + "DocumentEntity": { "type": "object", "properties": { - "success": { - "type": "boolean" + "id": { + "type": "string" }, - "data": { - "type": "object", - "properties": { - "updated": { - "type": "boolean" - }, - "productId": { - "type": "string" - }, - "timestamp": { - "type": "string" - } - }, - "required": [ - "updated", - "productId", - "timestamp" - ] + "name": { + "type": "string" }, - "timestamp": { + "description": { "type": "string" + }, + "active": { + "type": "boolean" } }, "required": [ - "success", - "data", - "timestamp" + "id", + "name", + "active" ] }, - "UpdateStockRequest": { + "DocumentIdParams": { "type": "object", "properties": { - "inStock": { - "type": "boolean", - "nullable": false + "id": { + "type": "string" } }, "required": [ - "inStock" + "id" ] }, - "UpdateStockResponse": { + "DocumentListQuery": { "type": "object", "properties": { - "updated": { - "type": "boolean" + "page": { + "type": "string" }, - "productId": { + "limit": { "type": "string" }, - "timestamp": { + "search": { "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] } - }, - "required": [ - "updated", - "productId", - "timestamp" - ] + } }, - "UploadFormData": { + "DocumentListResponse": { "type": "object", "properties": { - "file": { - "type": "string", - "description": "Image file (PNG/JPG, max 5MB)", - "nullable": false, - "contentMediaType": "application/octet-stream" - }, - "description": { - "type": [ - "string", - "null" - ], - "description": "Image file (PNG/JPG, max 5MB)" - }, - "category": { - "type": "string", - "nullable": false - } - }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, "required": [ - "file", - "category" + "items", + "total", + "page", + "limit" ] }, - "UploadResponse": { + "EmailNotification": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "email" + ], + "nullable": false + }, + "to": { + "type": "string", + "description": "Recipient email address", + "nullable": false + }, + "subject": { + "type": "string", + "description": "Email subject", + "nullable": false + }, + "body": { + "type": "string", + "description": "Email body content", + "nullable": false + } + }, + "required": [ + "type", + "to", + "subject", + "body" + ] + }, + "Envelope": { + "type": "object", + "properties": { + "data": {}, + "meta": {} + }, + "required": [ + "data", + "meta" + ] + }, + "ErrorResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "error" + ] + }, + "error": { + "type": "string", + "description": "Error message" + }, + "code": { + "type": "number", + "description": "Error code" + } + }, + "required": [ + "status", + "error", + "code" + ] + }, + "ExportDownloadQuery": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "csv", + "ndjson" + ] + } + } + }, + "ExportEntity": { "type": "object", "properties": { "id": { "type": "string" }, - "filename": { + "name": { "type": "string" }, - "size": { - "type": "number" + "description": { + "type": "string" }, - "type": { + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ExportIdParam": { + "type": "object", + "properties": { + "exportId": { + "type": "string" + } + }, + "required": [ + "exportId" + ] + }, + "ExportIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ExportListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { "type": "string", - "description": "MIME type" + "enum": [ + "true", + "false" + ] + } + } + }, + "ExportListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } }, - "url": { + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ImmutableInvoice": { + "type": "object", + "properties": { + "id": { "type": "string", - "description": "File access URL" + "description": "-override { \"format\": \"email\", \"maxLength\": 320 }" }, - "category": { + "customerEmail": { "type": "string", - "description": "File category" + "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", + "format": "email", + "maxLength": 320 }, - "description": { + "amountMinor": { + "type": "integer", + "format": "int64", + "description": "Monetary amount in the smallest currency unit — emitted as `integer` with `format: int64` via `bigint`." + }, + "status": { "type": "string", - "description": "File category" + "enum": [ + "draft", + "open", + "paid", + "uncollectible" + ] }, - "uploadedAt": { + "createdAt": { + "type": "string" + } + }, + "readOnly": true + }, + "InvoiceEntity": { + "type": "object", + "properties": { + "id": { "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "InvoiceIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Invoice identifier" + } + }, + "required": [ + "id" + ] + }, + "InvoiceListItem": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "-override { \"format\": \"email\", \"maxLength\": 320 }" + }, + "customerEmail": { + "type": "string", + "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", + "format": "email", + "maxLength": 320 + }, + "amountMinor": { + "type": "integer", + "format": "int64", + "description": "Monetary amount in the smallest currency unit — emitted as `integer` with `format: int64` via `bigint`." + }, + "status": { + "type": "string", + "enum": [ + "draft", + "open", + "paid", + "uncollectible" + ] + }, + "createdAt": { + "type": "string" + } + } + }, + "InvoiceListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "InvoiceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "InvoiceQuery": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "draft", + "open", + "paid", + "uncollectible" + ] + }, + "from": { + "type": "string" + }, + "to": { + "type": "string" + }, + "cursor": { + "type": "string" + } + } + }, + "InvoicesResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "-override { \"format\": \"email\", \"maxLength\": 320 }" + }, + "customerEmail": { + "type": "string", + "description": "-override { \"format\": \"email\", \"maxLength\": 320 }", + "format": "email", + "maxLength": 320 + }, + "amountMinor": { + "type": "integer", + "format": "int64", + "description": "Monetary amount in the smallest currency unit — emitted as `integer` with `format: int64` via `bigint`." + }, + "status": { + "type": "string", + "enum": [ + "draft", + "open", + "paid", + "uncollectible" + ] + }, + "createdAt": { + "type": "string" + } + } + } + }, + "total": { + "type": "number" + }, + "nextCursor": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data", + "total", + "nextCursor" + ] + }, + "LLMSResponse": { + "type": "object", + "properties": { + "llms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "provider", + "isDefault" + ] + } + } + }, + "required": [ + "llms" + ] + }, + "LoginBody": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "user email", + "nullable": false + }, + "password": { + "type": "string", + "description": "user password", + "nullable": false + } + }, + "required": [ + "email", + "password" + ] + }, + "LoginResponse": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "auth token" + }, + "refresh_token": { + "type": "string", + "description": "refresh token" + } + }, + "required": [ + "token", + "refresh_token" + ] + }, + "MemberEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "MemberIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "MemberListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "MemberListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "Mutable": { + "type": "object", + "properties": {} + }, + "MyApiSuccessResponseBody": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "httpCode": { + "type": "string" + } + }, + "required": [ + "success", + "httpCode" + ] + }, + "MyApiSuccessResponseBody": { + "type": "object", + "properties": { + "llms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "provider", + "isDefault" + ] + } + }, + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "httpCode": { + "type": "string" + } + }, + "required": [ + "llms", + "success", + "httpCode" + ] + }, + "Notification": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "email" + ], + "nullable": false + }, + "to": { + "type": "string", + "description": "Recipient email address", + "nullable": false + }, + "subject": { + "type": "string", + "description": "Email subject", + "nullable": false + }, + "body": { + "type": "string", + "description": "Email body content", + "nullable": false + } + }, + "required": [ + "type", + "to", + "subject", + "body" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "sms" + ], + "nullable": false + }, + "phoneNumber": { + "type": "string", + "description": "Phone number with country code (e.g., +1234567890)", + "nullable": false + }, + "message": { + "type": "string", + "description": "SMS message (max 160 characters)", + "nullable": false + } + }, + "required": [ + "type", + "phoneNumber", + "message" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "push" + ], + "nullable": false + }, + "deviceId": { + "type": "string", + "description": "Device identifier for push notification", + "nullable": false + }, + "title": { + "type": "string", + "description": "Notification title", + "nullable": false + }, + "body": { + "type": "string", + "description": "Notification body", + "nullable": false + } + }, + "required": [ + "type", + "deviceId", + "title", + "body" + ] + } + ] + }, + "NotificationEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + }, + "NotificationIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "NotificationListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "NotificationListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "OrderEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "OrderIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "OrderListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "OrderListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "OrganizationEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "OrganizationIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "OrganizationListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "OrganizationListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "PaginatedResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": {} + }, + "total": { + "type": "number" + }, + "nextCursor": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data", + "total", + "nextCursor" + ] + }, + "PaymentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "PaymentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "PaymentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "PaymentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "Product": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "description": { + "type": "string" + }, + "inStock": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "price", + "inStock" + ] + }, + "ProductByIdResponse": { + "type": "object", + "properties": { + "product": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "description": { + "type": "string" + }, + "inStock": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "price", + "inStock" + ] + }, + "fetchedAt": { + "type": "string" + } + }, + "required": [ + "product", + "fetchedAt" + ] + }, + "ProductEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "ProductIdParam": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ProductIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ProductListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ProductListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ProductSummaryResponse": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "price": { + "type": "number" + } + }, + "required": [ + "name", + "price" + ] + }, + "ProjectEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ProjectIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ProjectListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ProjectListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "PushNotification": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "push" + ], + "nullable": false + }, + "deviceId": { + "type": "string", + "description": "Device identifier for push notification", + "nullable": false + }, + "title": { + "type": "string", + "description": "Notification title", + "nullable": false + }, + "body": { + "type": "string", + "description": "Notification body", + "nullable": false + } + }, + "required": [ + "type", + "deviceId", + "title", + "body" + ] + }, + "RefundEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "RefundIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "RefundListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "RefundListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "Report": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "generatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "generatedAt" + ] + }, + "ReportEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ReportFormat": { + "type": "string", + "enum": [ + "csv", + "json", + "parquet" + ] + }, + "ReportIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ReportKind": { + "type": "string", + "enum": [ + "financial", + "usage", + "audit" + ] + }, + "ReportListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ReportListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ReportManifest": { + "type": "object" + }, + "ReportQuery": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "start date (ISO 8601)" + }, + "to": { + "type": "string", + "description": "end date (ISO 8601)" + } + } + }, + "ReportsResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "generatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "generatedAt" + ] + } + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "total" + ] + }, + "SessionActionInput": { + "type": "object", + "properties": { + "extendMinutes": { + "type": [ + "number", + "null" + ] + }, + "revokeReason": { + "type": [ + "string", + "null" + ] + } + } + }, + "SessionEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "SessionEnvelope": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "authChannel": { + "type": "string", + "enum": [ + "bearer", + "header", + "cookie" + ] + }, + "device": { + "type": "string" + }, + "ipAddress": { + "type": "string" + }, + "lastSeenAt": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "active", + "revoked" + ] + } + }, + "required": [ + "id", + "userId", + "authChannel", + "device", + "ipAddress", + "lastSeenAt", + "status" + ] + }, + "meta": {} + }, + "required": [ + "data", + "meta" + ] + }, + "SessionIdParam": { + "type": "object", + "properties": { + "sessionId": { + "type": "string" + } + }, + "required": [ + "sessionId" + ] + }, + "SessionIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "SessionListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "SessionListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "SessionResource": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "authChannel": { + "type": "string", + "enum": [ + "bearer", + "header", + "cookie" + ] + }, + "device": { + "type": "string" + }, + "ipAddress": { + "type": "string" + }, + "lastSeenAt": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "active", + "revoked" + ] + } + }, + "required": [ + "id", + "userId", + "authChannel", + "device", + "ipAddress", + "lastSeenAt", + "status" + ] + }, + "SmsNotification": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "sms" + ], + "nullable": false + }, + "phoneNumber": { + "type": "string", + "description": "Phone number with country code (e.g., +1234567890)", + "nullable": false + }, + "message": { + "type": "string", + "description": "SMS message (max 160 characters)", + "nullable": false + } + }, + "required": [ + "type", + "phoneNumber", + "message" + ] + }, + "SubscriptionEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "SubscriptionIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "SubscriptionListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "SubscriptionListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "SuccessResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "success" + ] + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier" + }, + "message": { + "type": "string", + "description": "Success message" + } + }, + "required": [ + "id", + "message" + ] + } + }, + "required": [ + "status", + "data" + ] + }, + "TaskEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "TaskIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "TaskListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "TaskListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "TeamEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "TeamIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "TeamListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "TeamListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "UpdateApiKeyInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateAttachmentInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateAuditLogInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateCatalogItemInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateCommentBody": { + "type": "object", + "properties": { + "content": { + "type": [ + "string", + "null" + ], + "description": "Updated comment content" + }, + "addAttachmentIds": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "IDs of attachments to add" + }, + "removeAttachmentIds": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "IDs of attachments to remove" + }, + "addMentions": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "User IDs to add to mentions" + }, + "removeMentions": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "User IDs to remove from mentions" + } + } + }, + "UpdateCommentInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateCommentResponse": { + "type": "object", + "properties": { + "comment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Comment ID" + }, + "content": { + "type": "string", + "description": "Comment content" + }, + "author": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + }, + "required": [ + "id", + "name", + "avatar", + "role" + ], + "description": "User who created the comment" + }, + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Attachment ID" + }, + "fileName": { + "type": "string", + "description": "Original file name" + }, + "fileSize": { + "type": "number", + "description": "Size in bytes" + }, + "fileType": { + "type": "string", + "description": "MIME type" + }, + "url": { + "type": "string", + "description": "Download URL" + }, + "thumbnailUrl": { + "type": "string", + "description": "Thumbnail URL for images" + }, + "uploadedAt": { + "type": "string", + "format": "date-time", + "description": "When the file was uploaded" + } + }, + "required": [ + "id", + "fileName", + "fileSize", + "fileType", + "url", + "uploadedAt" + ] + }, + "description": "Attached files" + }, + "mentions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + }, + "required": [ + "id", + "name", + "avatar", + "role" + ] + }, + "description": "Users mentioned in the comment" + }, + "likes": { + "type": "number", + "description": "Number of likes" + }, + "likedBy": { + "type": "array", + "items": { + "type": "string" + }, + "description": "User IDs who liked the comment" + }, + "replyTo": { + "type": "string", + "description": "Parent comment ID if this is a reply" + }, + "replies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + }, + "description": "Child comments (if includeReplies=true)" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "description": "Last update timestamp" + }, + "deletedAt": { + "type": "string", + "format": "date-time", + "description": "Soft deletion timestamp" + } + }, + "required": [ + "id", + "content", + "author", + "attachments", + "mentions", + "likes", + "likedBy", + "createdAt" + ], + "description": "Updated comment" + }, + "success": { + "type": "boolean", + "description": "Whether update was successful" + }, + "message": { + "type": "string", + "description": "Success or error message" + } + }, + "required": [ + "comment", + "success" + ] + }, + "UpdateCustomerInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateDepartmentInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateDocumentInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateExportInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateInvoiceInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateMemberInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateNotificationInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateOrderInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateOrganizationInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdatePaymentInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateProductInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateProjectInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateRefundInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateReportInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateSessionInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateStockApiResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "data": { + "type": "object", + "properties": { + "updated": { + "type": "boolean" + }, + "productId": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "updated", + "productId", + "timestamp" + ] + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "success", + "data", + "timestamp" + ] + }, + "UpdateStockRequest": { + "type": "object", + "properties": { + "inStock": { + "type": "boolean", + "nullable": false + } + }, + "required": [ + "inStock" + ] + }, + "UpdateStockResponse": { + "type": "object", + "properties": { + "updated": { + "type": "boolean" + }, + "productId": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "updated", + "productId", + "timestamp" + ] + }, + "UpdateSubscriptionInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateTaskInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateTeamInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateWebhookInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateWorkspaceInput": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "active": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UploadFormData": { + "type": "object", + "properties": { + "file": { + "type": "string", + "description": "Image file (PNG/JPG, max 5MB)", + "nullable": false, + "contentMediaType": "application/octet-stream" + }, + "description": { + "type": [ + "string", + "null" + ], + "description": "Image file (PNG/JPG, max 5MB)" + }, + "category": { + "type": "string", + "nullable": false + } + }, + "required": [ + "file", + "category" + ] + }, + "UploadResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "size": { + "type": "number" + }, + "type": { + "type": "string", + "description": "MIME type" + }, + "url": { + "type": "string", + "description": "File access URL" + }, + "category": { + "type": "string", + "description": "File category" + }, + "description": { + "type": "string", + "description": "File category" + }, + "uploadedAt": { + "type": "string" + } + }, + "required": [ + "id", + "filename", + "size", + "type", + "url", + "category", + "uploadedAt" + ] + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + }, + "required": [ + "id", + "name", + "avatar", + "role" + ] + }, + "UserIdParam": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User's unique identifier" + } + }, + "required": [ + "id" + ] + }, + "UserResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User's full name" + }, + "avatar": { + "type": "string", + "description": "URL to user's avatar" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member", + "guest" + ], + "description": "User's role in the organization" + } + } + }, + "WebhookEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "WebhookIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "WebhookListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "WebhookListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "WorkspaceEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "WorkspaceIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "WorkspaceListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "WorkspaceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + } + }, + "responses": { + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "examples": [ + false + ] + }, + "error": { + "type": "string", + "examples": [ + "Validation error" + ] + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "examples": [ + false + ] + }, + "error": { + "type": "string", + "examples": [ + "Unathorized" + ] + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "examples": [ + false + ] + }, + "error": { + "type": "string", + "examples": [ + "Something went wrong" + ] + } + } + } + } + } + } + } + }, + "paths": { + "/admin/reports": { + "get": { + "operationId": "tsListAdminReports", + "summary": "List reports", + "description": "Lists every admin-visible report. Demonstrates multi-scheme OR security and `@servers`.", + "tags": [ + "Admin", + "Reports" + ], + "parameters": [], + "security": [ + { + "BearerAuth, ApiKeyAuth": [ + "read" + ] + } + ], + "servers": [ + { + "url": "https://admin.example.com/v1,", + "description": "https://admin-eu.example.com/v1" + } + ], + "externalDocs": { + "url": "https://docs.example.com/admin/reports", + "description": "Admin report runbook" + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AdminReportsResponse" + } + } + }, + "headers": { + "X-Request-Id": { + "description": "Request identifier for tracing", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + }, + "4XX": { + "description": "Any client error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Any server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tsCreateAdminReport", + "summary": "Create report", + "description": "Schedules a new admin report generation.", + "tags": [ + "Admin" + ], + "parameters": [], + "security": [ + { + "BearerAuth, ApiKeyAuth": [ + "write" + ] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAdminReportBody" + } + } + } + }, + "responses": { + "202": { + "description": "Report generation queued", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AdminReport" + } + } + }, + "headers": { + "Location": { + "description": "URL where the generated report will be available", + "schema": { + "type": "string" + } + } + }, + "links": { + "listReports": { + "operationId": "tsListAdminReports" + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/api-keys": { + "get": { + "operationId": "scaleAppListApiKey", + "summary": "List api-keys", + "description": "Returns a paginated list of api-keys", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateApiKey", + "summary": "Create apikey", + "description": "Creates a new apikey", + "tags": [ + "ApiKeys" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateApiKeyInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyEntity" + } + } + } + } + } + } + }, + "/generated/api-keys/{id}": { + "get": { + "operationId": "scaleAppGetApiKey", + "summary": "Get apikey by ID", + "description": "Returns a single apikey by identifier", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateApiKey", + "summary": "Update apikey", + "description": "Updates an existing apikey", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateApiKeyInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteApiKey", + "summary": "Delete apikey", + "description": "Deletes a apikey by identifier", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/attachments": { + "get": { + "operationId": "scaleAppListAttachment", + "summary": "List attachments", + "description": "Returns a paginated list of attachments", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateAttachment", + "summary": "Create attachment", + "description": "Creates a new attachment", + "tags": [ + "Attachments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAttachmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentEntity" + } + } + } + } + } + } + }, + "/generated/attachments/{id}": { + "get": { + "operationId": "scaleAppGetAttachment", + "summary": "Get attachment by ID", + "description": "Returns a single attachment by identifier", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateAttachment", + "summary": "Update attachment", + "description": "Updates an existing attachment", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAttachmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteAttachment", + "summary": "Delete attachment", + "description": "Deletes a attachment by identifier", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/audit-logs": { + "get": { + "operationId": "scaleAppListAuditLog", + "summary": "List audit-logs", + "description": "Returns a paginated list of audit-logs", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateAuditLog", + "summary": "Create auditlog", + "description": "Creates a new auditlog", + "tags": [ + "AuditLogs" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAuditLogInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + } + } + } + }, + "/generated/audit-logs/{id}": { + "get": { + "operationId": "scaleAppGetAuditLog", + "summary": "Get auditlog by ID", + "description": "Returns a single auditlog by identifier", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateAuditLog", + "summary": "Update auditlog", + "description": "Updates an existing auditlog", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAuditLogInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteAuditLog", + "summary": "Delete auditlog", + "description": "Deletes a auditlog by identifier", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/auth/login": { + "post": { + "operationId": "post-auth-login", + "summary": "Authenticate as a user.", + "description": "Login a user", + "tags": [ + "Auth" + ], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/billing/invoices": { + "get": { + "operationId": "tsListInvoices", + "summary": "List invoices", + "description": "Returns a paginated list of invoices. Exercises wildcard responses and `@link`.", + "tags": [ + "Billing", + "Finance" + ], + "parameters": [ + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "string", + "enum": [ + "draft", + "open", + "paid", + "uncollectible" + ] + }, + "example": "example" + }, + { + "in": "query", + "name": "from", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "to", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "cursor", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "cookie", + "name": "session", + "required": true, + "schema": { + "type": "string", + "description": "Session token" + }, + "description": "Session token", + "example": "example" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoicesResponse" + } + } + }, + "headers": { + "Link": { + "description": "RFC 5988 pagination links", + "schema": { + "type": "string" + } + }, + "X-Total-Count": { + "description": "Total invoices matching the query", + "schema": { + "type": "integer" + } + } + }, + "links": { + "getInvoice": { + "operationId": "tsGetInvoice" + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + }, + "4XX": { + "description": "Any client error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "default": { + "description": "Fallback error envelope", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tsCreateInvoice", + "summary": "Create invoice", + "description": "Creates a new draft invoice.", + "tags": [ + "Billing" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInvoiceBody" + } + } + } + }, + "responses": { + "201": { + "description": "Draft invoice created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Invoice" + } + } + }, + "headers": { + "Location": { + "description": "URL of the created invoice", + "schema": { + "type": "string" + } + } + }, + "links": { + "getInvoice": { + "operationId": "tsGetInvoice" + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/billing/invoices/{id}": { + "get": { + "operationId": "tsGetInvoice", + "summary": "Get invoice", + "description": "Fetches a single invoice by identifier. Response properties are all `readonly` to emit `readOnly: true`.", + "tags": [ + "Billing", + "Finance" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Invoice identifier" + }, + "description": "Invoice identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImmutableInvoice" + } + } + }, + "headers": { + "ETag": { + "description": "Strong ETag for optimistic concurrency", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + }, + "4XX": { + "description": "Any client error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/generated/catalog-items": { + "get": { + "operationId": "scaleAppListCatalogItem", + "summary": "List catalog-items", + "description": "Returns a paginated list of catalog-items", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateCatalogItem", + "summary": "Create catalogitem", + "description": "Creates a new catalogitem", + "tags": [ + "Catalog" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCatalogItemInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + } + } + } + }, + "/generated/catalog-items/{id}": { + "get": { + "operationId": "scaleAppGetCatalogItem", + "summary": "Get catalogitem by ID", + "description": "Returns a single catalogitem by identifier", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateCatalogItem", + "summary": "Update catalogitem", + "description": "Updates an existing catalogitem", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCatalogItemInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteCatalogItem", + "summary": "Delete catalogitem", + "description": "Deletes a catalogitem by identifier", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/comments": { + "get": { + "operationId": "scaleAppListComment", + "summary": "List comments", + "description": "Returns a paginated list of comments", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateComment", + "summary": "Create comment", + "description": "Creates a new comment", + "tags": [ + "Comments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + } + } + } + }, + "/generated/comments/{id}": { + "get": { + "operationId": "scaleAppGetComment", + "summary": "Get comment by ID", + "description": "Returns a single comment by identifier", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateComment", + "summary": "Update comment", + "description": "Updates an existing comment", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCommentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteComment", + "summary": "Delete comment", + "description": "Deletes a comment by identifier", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/customers": { + "get": { + "operationId": "scaleAppListCustomer", + "summary": "List customers", + "description": "Returns a paginated list of customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateCustomer", + "summary": "Create customer", + "description": "Creates a new customer", + "tags": [ + "Customers" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCustomerInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + } + } + } + }, + "/generated/customers/{id}": { + "get": { + "operationId": "scaleAppGetCustomer", + "summary": "Get customer by ID", + "description": "Returns a single customer by identifier", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateCustomer", + "summary": "Update customer", + "description": "Updates an existing customer", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCustomerInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteCustomer", + "summary": "Delete customer", + "description": "Deletes a customer by identifier", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/departments": { + "get": { + "operationId": "scaleAppListDepartment", + "summary": "List departments", + "description": "Returns a paginated list of departments", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateDepartment", + "summary": "Create department", + "description": "Creates a new department", + "tags": [ + "Departments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDepartmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + } + } + } + }, + "/generated/departments/{id}": { + "get": { + "operationId": "scaleAppGetDepartment", + "summary": "Get department by ID", + "description": "Returns a single department by identifier", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateDepartment", + "summary": "Update department", + "description": "Updates an existing department", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDepartmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteDepartment", + "summary": "Delete department", + "description": "Deletes a department by identifier", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/documents": { + "get": { + "operationId": "scaleAppListDocument", + "summary": "List documents", + "description": "Returns a paginated list of documents", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateDocument", + "summary": "Create document", + "description": "Creates a new document", + "tags": [ + "Documents" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDocumentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + } + } + } + }, + "/generated/documents/{id}": { + "get": { + "operationId": "scaleAppGetDocument", + "summary": "Get document by ID", + "description": "Returns a single document by identifier", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateDocument", + "summary": "Update document", + "description": "Updates an existing document", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDocumentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteDocument", + "summary": "Delete document", + "description": "Deletes a document by identifier", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/exports/{exportId}": { + "get": { + "operationId": "typescriptDownloadExport", + "summary": "Download an export payload.", + "description": "Returns a CSV export body using an explicit non-JSON media type.", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "query", + "name": "format", + "required": false, + "schema": { + "type": "string", + "enum": [ + "csv", + "ndjson" + ] + }, + "example": "example" + }, + { + "in": "path", + "name": "exportId", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "text/csv": { + "schema": { + "$ref": "#/components/schemas/CsvExportBody" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/exports": { + "get": { + "operationId": "scaleAppListExport", + "summary": "List exports", + "description": "Returns a paginated list of exports", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateExport", + "summary": "Create export", + "description": "Creates a new export", + "tags": [ + "Exports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateExportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + } + } + } + }, + "/exports/{exportId}/latest": { + "get": { + "operationId": "typescriptRedirectLatestExport", + "summary": "Redirect to the latest export artifact.", + "description": "Demonstrates redirect-style transport routes from typed route modules.", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "exportId", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "responses": { + "307": { + "description": "Successful response", + "headers": { + "Location": { + "description": "Redirect target URL", + "schema": { + "type": "string", + "format": "uri" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/exports/{id}": { + "get": { + "operationId": "scaleAppGetExport", + "summary": "Get export by ID", + "description": "Returns a single export by identifier", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateExport", + "summary": "Update export", + "description": "Updates an existing export", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateExportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteExport", + "summary": "Delete export", + "description": "Deletes a export by identifier", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/invoices": { + "get": { + "operationId": "scaleAppListInvoice", + "summary": "List invoices", + "description": "Returns a paginated list of invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateInvoice", + "summary": "Create invoice", + "description": "Creates a new invoice", + "tags": [ + "Invoices" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInvoiceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + } + } + } + }, + "/generated/invoices/{id}": { + "get": { + "operationId": "scaleAppGetInvoice", + "summary": "Get invoice by ID", + "description": "Returns a single invoice by identifier", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Invoice identifier" + }, + "description": "Invoice identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateInvoice", + "summary": "Update invoice", + "description": "Updates an existing invoice", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Invoice identifier" + }, + "description": "Invoice identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateInvoiceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteInvoice", + "summary": "Delete invoice", + "description": "Deletes a invoice by identifier", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Invoice identifier" + }, + "description": "Invoice identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/llms": { + "get": { + "operationId": "get-llms", + "summary": "GET /api/llms", + "description": "Get list of available LLMs", + "tags": [ + "Llms" + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MyApiSuccessResponseBody" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/members": { + "get": { + "operationId": "scaleAppListMember", + "summary": "List members", + "description": "Returns a paginated list of members", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateMember", + "summary": "Create member", + "description": "Creates a new member", + "tags": [ + "Members" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMemberInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + } + } + } + }, + "/generated/members/{id}": { + "get": { + "operationId": "scaleAppGetMember", + "summary": "Get member by ID", + "description": "Returns a single member by identifier", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateMember", + "summary": "Update member", + "description": "Updates an existing member", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMemberInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteMember", + "summary": "Delete member", + "description": "Deletes a member by identifier", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/notifications": { + "get": { + "operationId": "get-notifications", + "summary": "Get notification status", + "description": "Returns success or error response (demonstrates discriminated union types)", + "tags": [ + "Notifications" + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "post-notifications", + "summary": "Send notification", + "description": "Send notification via email, SMS, or push (demonstrates discriminated unions)", + "tags": [ + "Notifications", + "Messaging" + ], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Notification" + } + } + } + }, + "responses": { + "201": { + "description": "Notification sent successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse" + } + } + } + }, + "400": { + "description": "Invalid notification data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse" + } + } + } + }, + "429": { + "description": "Rate limit exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse" + } + } + } + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/notifications": { + "get": { + "operationId": "scaleAppListNotification", + "summary": "List notifications", + "description": "Returns a paginated list of notifications", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateNotification", + "summary": "Create notification", + "description": "Creates a new notification", + "tags": [ + "Notifications" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotificationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + } + } + } + }, + "/generated/notifications/{id}": { + "get": { + "operationId": "scaleAppGetNotification", + "summary": "Get notification by ID", + "description": "Returns a single notification by identifier", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateNotification", + "summary": "Update notification", + "description": "Updates an existing notification", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateNotificationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteNotification", + "summary": "Delete notification", + "description": "Deletes a notification by identifier", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/orders": { + "get": { + "operationId": "scaleAppListOrder", + "summary": "List orders", + "description": "Returns a paginated list of orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateOrder", + "summary": "Create order", + "description": "Creates a new order", + "tags": [ + "Orders" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrderInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + } + } + } + }, + "/generated/orders/{id}": { + "get": { + "operationId": "scaleAppGetOrder", + "summary": "Get order by ID", + "description": "Returns a single order by identifier", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateOrder", + "summary": "Update order", + "description": "Updates an existing order", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteOrder", + "summary": "Delete order", + "description": "Deletes a order by identifier", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/organizations": { + "get": { + "operationId": "scaleAppListOrganization", + "summary": "List organizations", + "description": "Returns a paginated list of organizations", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateOrganization", + "summary": "Create organization", + "description": "Creates a new organization", + "tags": [ + "Organizations" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrganizationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + } + } + } + }, + "/generated/organizations/{id}": { + "get": { + "operationId": "scaleAppGetOrganization", + "summary": "Get organization by ID", + "description": "Returns a single organization by identifier", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateOrganization", + "summary": "Update organization", + "description": "Updates an existing organization", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrganizationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteOrganization", + "summary": "Delete organization", + "description": "Deletes a organization by identifier", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/organizations/{orgId}/projects/{projectId}/tasks/{taskId}/comments": { + "get": { + "operationId": "get-organizations-{orgId}-projects-{projectId}-tasks-{taskId}-comments", + "summary": "Get Task Comments", + "description": "Retrieve comments for a specific task within a project and organization", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "number", + "description": "Page number for pagination" + }, + "description": "Page number for pagination", + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "number", + "description": "Number of comments per page" + }, + "description": "Number of comments per page", + "example": 1 + }, + { + "in": "query", + "name": "sort", + "required": false, + "schema": { + "type": "string", + "enum": [ + "newest", + "oldest", + "likes" + ], + "description": "Sort order" + }, + "description": "Sort order", + "example": "example" + }, + { + "in": "query", + "name": "includeDeleted", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether to include soft-deleted comments" + }, + "description": "Whether to include soft-deleted comments", + "example": true + }, + { + "in": "query", + "name": "includeReplies", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether to include replies" + }, + "description": "Whether to include replies", + "example": true + }, + { + "in": "query", + "name": "user", + "required": false, + "schema": { + "type": "string", + "description": "Filter by user ID" + }, + "description": "Filter by user ID", + "example": "example" + }, + { + "in": "path", + "name": "orgId", + "required": true, + "schema": { + "type": "string", + "description": "Organization ID" + }, + "description": "Organization ID", + "example": "123" + }, + { + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string", + "description": "Project ID within the organization" + }, + "description": "Project ID within the organization", + "example": "123" + }, + { + "in": "path", + "name": "taskId", + "required": true, + "schema": { + "type": "string", + "description": "Task ID within the project" + }, + "description": "Task ID within the project", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentsResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "post-organizations-{orgId}-projects-{projectId}-tasks-{taskId}-comments", + "summary": "Create Task Comment", + "description": "Add a new comment to a specific task", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "orgId", + "required": true, + "schema": { + "type": "string", + "description": "Organization ID" + }, + "description": "Organization ID", + "example": "123" + }, + { + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string", + "description": "Project ID within the organization" + }, + "description": "Project ID within the organization", + "example": "123" + }, + { + "in": "path", + "name": "taskId", + "required": true, + "schema": { + "type": "string", + "description": "Task ID within the project" + }, + "description": "Task ID within the project", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommentBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommentResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "patch-organizations-{orgId}-projects-{projectId}-tasks-{taskId}-comments", + "summary": "Update Task Comment", + "description": "Modify an existing comment on a task", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "query", + "name": "commentId", + "required": false, + "schema": { + "type": "string" + }, + "example": "123" + }, + { + "in": "path", + "name": "orgId", + "required": true, + "schema": { + "type": "string", + "description": "Organization ID" + }, + "description": "Organization ID", + "example": "123" + }, + { + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string", + "description": "Project ID within the organization" + }, + "description": "Project ID within the organization", + "example": "123" + }, + { + "in": "path", + "name": "taskId", + "required": true, + "schema": { + "type": "string", + "description": "Task ID within the project" + }, + "description": "Task ID within the project", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCommentBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCommentResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "delete": { + "operationId": "delete-organizations-{orgId}-projects-{projectId}-tasks-{taskId}-comments", + "summary": "Delete Task Comment", + "description": "Remove a comment from a task (soft delete)", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "query", + "name": "commentId", + "required": false, + "schema": { + "type": "string" + }, + "example": "123" + }, + { + "in": "path", + "name": "orgId", + "required": true, + "schema": { + "type": "string", + "description": "Organization ID" + }, + "description": "Organization ID", + "example": "123" + }, + { + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string", + "description": "Project ID within the organization" + }, + "description": "Project ID within the organization", + "example": "123" + }, + { + "in": "path", + "name": "taskId", + "required": true, + "schema": { + "type": "string", + "description": "Task ID within the project" + }, + "description": "Task ID within the project", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteCommentResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/payments": { + "get": { + "operationId": "scaleAppListPayment", + "summary": "List payments", + "description": "Returns a paginated list of payments", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreatePayment", + "summary": "Create payment", + "description": "Creates a new payment", + "tags": [ + "Payments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePaymentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + } + } + } + }, + "/generated/payments/{id}": { + "get": { + "operationId": "scaleAppGetPayment", + "summary": "Get payment by ID", + "description": "Returns a single payment by identifier", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdatePayment", + "summary": "Update payment", + "description": "Updates an existing payment", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePaymentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeletePayment", + "summary": "Delete payment", + "description": "Deletes a payment by identifier", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/products": { + "post": { + "operationId": "post-products", + "summary": "Create product", + "description": "Demonstrates ReturnType and Parameters utility types", + "tags": [ + "Products", + "Commerce" + ], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProductRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProductApiResponse" + } + } + }, + "headers": { + "X-Request-Id": { + "description": "Trace identifier", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + }, + "4XX": { + "description": "Any client error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Any server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "default": { + "description": "Fallback error envelope", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/generated/products": { + "get": { + "operationId": "scaleAppListProduct", + "summary": "List products", + "description": "Returns a paginated list of products", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateProduct", + "summary": "Create product", + "description": "Creates a new product", + "tags": [ + "Products" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProductInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + } + } + } + }, + "/products/{id}": { + "get": { + "operationId": "get-products-{id}", + "summary": "Get Product by ID", + "description": "Demonstrates Awaited> utility type support", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductByIdResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "patch-products-{id}", + "summary": "Update Product Stock", + "description": "Demonstrates Awaited> with async functions", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateStockRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateStockApiResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/products/{id}": { + "get": { + "operationId": "scaleAppGetProduct", + "summary": "Get product by ID", + "description": "Returns a single product by identifier", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateProduct", + "summary": "Update product", + "description": "Updates an existing product", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProductInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteProduct", + "summary": "Delete product", + "description": "Deletes a product by identifier", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/products/{id}/summary": { + "get": { + "operationId": "get-products-{id}-summary", + "summary": "Get Product Summary", + "description": "Demonstrates simple Awaited> pattern", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductSummaryResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/organizations/{organizationId}/projects": { + "get": { + "operationId": "scaleAppListProject", + "summary": "List projects", + "description": "Returns a paginated list of projects", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateProject", + "summary": "Create project", + "description": "Creates a new project", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProjectInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + } + } + } + }, + "/generated/organizations/{organizationId}/projects/{id}": { + "get": { + "operationId": "scaleAppGetProject", + "summary": "Get project by ID", + "description": "Returns a single project by identifier", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateProject", + "summary": "Update project", + "description": "Updates an existing project", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteProject", + "summary": "Delete project", + "description": "Deletes a project by identifier", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/refunds": { + "get": { + "operationId": "scaleAppListRefund", + "summary": "List refunds", + "description": "Returns a paginated list of refunds", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateRefund", + "summary": "Create refund", + "description": "Creates a new refund", + "tags": [ + "Refunds" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRefundInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + } + } + } + }, + "/generated/refunds/{id}": { + "get": { + "operationId": "scaleAppGetRefund", + "summary": "Get refund by ID", + "description": "Returns a single refund by identifier", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateRefund", + "summary": "Update refund", + "description": "Updates an existing refund", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRefundInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteRefund", + "summary": "Delete refund", + "description": "Deletes a refund by identifier", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/reports": { + "get": { + "operationId": "get-reports", + "summary": "List reports", + "description": "Returns a paginated list of reports. Requires both Bearer token and API key.", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "query", + "name": "from", + "required": false, + "schema": { + "type": "string", + "description": "start date (ISO 8601)" + }, + "description": "start date (ISO 8601)", + "example": "example" + }, + { + "in": "query", + "name": "to", + "required": false, + "schema": { + "type": "string", + "description": "end date (ISO 8601)" + }, + "description": "end date (ISO 8601)", + "example": "example" + } + ], + "security": [ + { + "BearerAuth": [] + }, + { + "ApiKeyAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportsResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "post-reports", + "summary": "Create report", + "description": "Creates a new report. Requires Bearer token and a partner-specific token.", + "tags": [ + "Reports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + }, + { + "PartnerToken": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReportBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Report" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/reports": { + "get": { + "operationId": "scaleAppListReport", + "summary": "List reports", + "description": "Returns a paginated list of reports", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateReport", + "summary": "Create report", + "description": "Creates a new report", + "tags": [ + "Reports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } + } + } + } + }, + "/generated/reports/{id}": { + "get": { + "operationId": "scaleAppGetReport", + "summary": "Get report by ID", + "description": "Returns a single report by identifier", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "scaleAppUpdateReport", + "summary": "Update report", + "description": "Updates an existing report", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateReportInput" + } + } } }, - "required": [ - "id", - "filename", - "size", - "type", - "url", - "category", - "uploadedAt" - ] - }, - "User": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" + "401": { + "$ref": "#/components/responses/401" } - }, - "required": [ - "id", - "name", - "avatar", - "role" - ] + } }, - "UserIdParam": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User's unique identifier" + "delete": { + "operationId": "scaleAppDeleteReport", + "summary": "Delete report", + "description": "Deletes a report by identifier", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" } - }, - "required": [ - "id" - ] - }, - "UserResponse": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "User ID" - }, - "name": { - "type": "string", - "description": "User's full name" - }, - "avatar": { - "type": "string", - "description": "URL to user's avatar" + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" }, - "role": { - "type": "string", - "enum": [ - "admin", - "member", - "guest" - ], - "description": "User's role in the organization" + "401": { + "$ref": "#/components/responses/401" } } } }, - "responses": { - "400": { - "description": "Bad request", - "content": { - "application/json": { + "/generated/sessions": { + "get": { + "operationId": "scaleAppListSession", + "summary": "List sessions", + "description": "Returns a paginated list of sessions", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "examples": [ - false - ] - }, - "error": { - "type": "string", - "examples": [ - "Validation error" - ] + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionListResponse" } } } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "examples": [ - false - ] - }, - "error": { - "type": "string", - "examples": [ - "Unathorized" - ] - } + "post": { + "operationId": "scaleAppCreateSession", + "summary": "Create session", + "description": "Creates a new session", + "tags": [ + "Sessions" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSessionInput" } } } - } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "examples": [ - false - ] - }, - "error": { - "type": "string", - "examples": [ - "Something went wrong" - ] + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionEntity" } } } } } } - } - }, - "paths": { - "/admin/reports": { + }, + "/sessions/{sessionId}": { "get": { - "operationId": "tsListAdminReports", - "summary": "List reports", - "description": "Lists every admin-visible report. Demonstrates multi-scheme OR security and `@servers`.", + "operationId": "typescriptGetSession", + "summary": "Get a session.", + "description": "Demonstrates generic wrapper responses for session resources that can be authenticated by bearer, API key, or a session cookie.", "tags": [ - "Admin", - "Reports" + "Sessions" ], - "parameters": [], - "security": [ + "parameters": [ { - "BearerAuth, ApiKeyAuth": [ - "read" - ] + "in": "path", + "name": "sessionId", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" } ], - "servers": [ + "security": [ + { + "BearerAuth": [] + }, { - "url": "https://admin.example.com/v1,", - "description": "https://admin-eu.example.com/v1" + "ApiKeyAuth": [] } ], - "externalDocs": { - "url": "https://docs.example.com/admin/reports", - "description": "Admin report runbook" - }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdminReportsResponse" - } - } - }, - "headers": { - "X-Request-Id": { - "description": "Request identifier for tracing", - "schema": { - "type": "string" + "$ref": "#/components/schemas/SessionEnvelope" } } } @@ -2850,75 +12407,132 @@ }, "500": { "$ref": "#/components/responses/500" - }, - "4XX": { - "description": "Any client error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "5XX": { - "description": "Any server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } } }, - "post": { - "operationId": "tsCreateAdminReport", - "summary": "Create report", - "description": "Schedules a new admin report generation.", + "patch": { + "operationId": "typescriptUpdateSession", + "summary": "Update a session.", + "description": "Extends or revokes a session while preserving the generic response envelope.", "tags": [ - "Admin" + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "sessionId", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } ], - "parameters": [], "security": [ { - "BearerAuth, ApiKeyAuth": [ - "write" - ] + "BearerAuth": [] + }, + { + "PartnerToken": [] } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateAdminReportBody" + "$ref": "#/components/schemas/SessionActionInput" } } } }, "responses": { - "202": { - "description": "Report generation queued", + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdminReport" + "$ref": "#/components/schemas/SessionEnvelope" } } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "delete": { + "operationId": "typescriptDeleteSession", + "summary": "Delete a session.", + "description": "Demonstrates 204 responses from typed route modules.", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "sessionId", + "required": true, + "schema": { + "type": "string" }, - "headers": { - "Location": { - "description": "URL where the generated report will be available", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/sessions/{id}": { + "get": { + "operationId": "scaleAppGetSession", + "summary": "Get session by ID", + "description": "Returns a single session by identifier", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SessionEntity" } } - }, - "links": { - "listReports": { - "operationId": "tsListAdminReports" - } } }, "400": { @@ -2928,22 +12542,35 @@ "$ref": "#/components/responses/500" } } - } - }, - "/auth/login": { - "post": { - "operationId": "post-auth-login", - "summary": "Authenticate as a user.", - "description": "Login a user", + }, + "patch": { + "operationId": "scaleAppUpdateSession", + "summary": "Update session", + "description": "Updates an existing session", "tags": [ - "Auth" + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginBody" + "$ref": "#/components/schemas/UpdateSessionInput" } } } @@ -2954,82 +12581,97 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginResponse" + "$ref": "#/components/schemas/SessionEntity" } } } }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteSession", + "summary": "Delete session", + "description": "Deletes a session by identifier", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } } }, - "/billing/invoices": { + "/generated/subscriptions": { "get": { - "operationId": "tsListInvoices", - "summary": "List invoices", - "description": "Returns a paginated list of invoices. Exercises wildcard responses and `@link`.", + "operationId": "scaleAppListSubscription", + "summary": "List subscriptions", + "description": "Returns a paginated list of subscriptions", "tags": [ - "Billing", - "Finance" + "Subscriptions" ], "parameters": [ { "in": "query", - "name": "status", + "name": "page", "required": false, "schema": { - "type": "string", - "enum": [ - "draft", - "open", - "paid", - "uncollectible" - ] - } + "type": "string" + }, + "example": 1 }, { "in": "query", - "name": "from", + "name": "limit", "required": false, "schema": { "type": "string" - } + }, + "example": "example" }, { "in": "query", - "name": "to", + "name": "search", "required": false, "schema": { "type": "string" - } + }, + "example": "example" }, { "in": "query", - "name": "cursor", + "name": "active", "required": false, "schema": { - "type": "string" - } - }, - { - "in": "cookie", - "name": "session", - "required": true, - "schema": { - "type": "string", - "description": "Session token" - }, - "description": "Session token" - } - ], - "security": [ - { - "BearerAuth": [] + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" } ], "responses": { @@ -3038,52 +12680,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InvoicesResponse" - } - } - }, - "headers": { - "Link": { - "description": "RFC 5988 pagination links", - "schema": { - "type": "string" - } - }, - "X-Total-Count": { - "description": "Total invoices matching the query", - "schema": { - "type": "integer" - } - } - }, - "links": { - "getInvoice": { - "operationId": "tsGetInvoice" - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" - }, - "4XX": { - "description": "Any client error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "default": { - "description": "Fallback error envelope", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SubscriptionListResponse" } } } @@ -3091,11 +12688,11 @@ } }, "post": { - "operationId": "tsCreateInvoice", - "summary": "Create invoice", - "description": "Creates a new draft invoice.", + "operationId": "scaleAppCreateSubscription", + "summary": "Create subscription", + "description": "Creates a new subscription", "tags": [ - "Billing" + "Subscriptions" ], "parameters": [], "security": [ @@ -3107,52 +12704,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateInvoiceBody" + "$ref": "#/components/schemas/CreateSubscriptionInput" } } } }, "responses": { - "201": { - "description": "Draft invoice created", + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - }, - "headers": { - "Location": { - "description": "URL of the created invoice", - "schema": { - "type": "string" + "$ref": "#/components/schemas/SubscriptionEntity" } } - }, - "links": { - "getInvoice": { - "operationId": "tsGetInvoice" - } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/billing/invoices/{id}": { + "/generated/subscriptions/{id}": { "get": { - "operationId": "tsGetInvoice", - "summary": "Get invoice", - "description": "Fetches a single invoice by identifier. Response properties are all `readonly` to emit `readOnly: true`.", + "operationId": "scaleAppGetSubscription", + "summary": "Get subscription by ID", + "description": "Returns a single subscription by identifier", "tags": [ - "Billing", - "Finance" + "Subscriptions" ], "parameters": [ { @@ -3160,10 +12737,8 @@ "name": "id", "required": true, "schema": { - "type": "string", - "description": "Invoice identifier" + "type": "string" }, - "description": "Invoice identifier", "example": "123" } ], @@ -3178,15 +12753,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImmutableInvoice" - } - } - }, - "headers": { - "ETag": { - "description": "Strong ETag for optimistic concurrency", - "schema": { - "type": "string" + "$ref": "#/components/schemas/SubscriptionEntity" } } } @@ -3196,148 +12763,241 @@ }, "500": { "$ref": "#/components/responses/500" - }, - "4XX": { - "description": "Any client error", + } + } + }, + "patch": { + "operationId": "scaleAppUpdateSubscription", + "summary": "Update subscription", + "description": "Updates an existing subscription", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSubscriptionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SubscriptionEntity" } } } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteSubscription", + "summary": "Delete subscription", + "description": "Deletes a subscription by identifier", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" } } } }, - "/exports/{exportId}": { + "/generated/projects/{projectId}/tasks": { "get": { - "operationId": "typescriptDownloadExport", - "summary": "Download an export payload.", - "description": "Returns a CSV export body using an explicit non-JSON media type.", + "operationId": "scaleAppListTask", + "summary": "List tasks", + "description": "Returns a paginated list of tasks", "tags": [ - "Exports" + "Tasks" ], "parameters": [ { "in": "query", - "name": "format", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", "required": false, "schema": { "type": "string", "enum": [ - "csv", - "ndjson" + "true", + "false" ] - } + }, + "example": "example" }, { + "name": "projectId", "in": "path", - "name": "exportId", "required": true, "schema": { "type": "string" }, - "example": "123" + "example": "123", + "description": "Path parameter: projectId" } ], "responses": { "200": { "description": "Successful response", "content": { - "text/csv": { + "application/json": { "schema": { - "$ref": "#/components/schemas/CsvExportBody" + "$ref": "#/components/schemas/TaskListResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } - } - }, - "/exports/{exportId}/latest": { - "get": { - "operationId": "typescriptRedirectLatestExport", - "summary": "Redirect to the latest export artifact.", - "description": "Demonstrates redirect-style transport routes from typed route modules.", + }, + "post": { + "operationId": "scaleAppCreateTask", + "summary": "Create task", + "description": "Creates a new task", "tags": [ - "Exports" + "Tasks" ], "parameters": [ { + "name": "projectId", "in": "path", - "name": "exportId", "required": true, "schema": { "type": "string" }, - "example": "123" + "example": "123", + "description": "Path parameter: projectId" } ], - "responses": { - "307": { - "description": "Successful response" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" + "security": [ + { + "BearerAuth": [] } - } - } - }, - "/llms": { - "get": { - "operationId": "get-llms", - "summary": "GET /api/llms", - "description": "Get list of available LLMs", - "tags": [ - "Llms" ], - "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTaskInput" + } + } + } + }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MyApiSuccessResponseBody" + "$ref": "#/components/schemas/TaskEntity" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/notifications": { + "/generated/projects/{projectId}/tasks/{id}": { "get": { - "operationId": "get-notifications", - "summary": "Get notification status", - "description": "Returns success or error response (demonstrates discriminated union types)", + "operationId": "scaleAppGetTask", + "summary": "Get task by ID", + "description": "Returns a single task by identifier", "tags": [ - "Notifications" + "Tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiResponse" + "$ref": "#/components/schemas/TaskEntity" } } } @@ -3350,68 +13010,94 @@ } } }, - "post": { - "operationId": "post-notifications", - "summary": "Send notification", - "description": "Send notification via email, SMS, or push (demonstrates discriminated unions)", + "patch": { + "operationId": "scaleAppUpdateTask", + "summary": "Update task", + "description": "Updates an existing task", "tags": [ - "Notifications", - "Messaging" + "Tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Notification" + "$ref": "#/components/schemas/UpdateTaskInput" } } } }, "responses": { - "201": { - "description": "Notification sent successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponse" - } - } - } - }, - "400": { - "description": "Invalid notification data", + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiResponse" + "$ref": "#/components/schemas/TaskEntity" } } } }, - "429": { - "description": "Rate limit exceeded", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponse" - } - } - } + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "scaleAppDeleteTask", + "summary": "Delete task", + "description": "Deletes a task by identifier", + "tags": [ + "Tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } } }, - "/organizations/{orgId}/projects/{projectId}/tasks/{taskId}/comments": { + "/generated/teams": { "get": { - "operationId": "get-organizations-{orgId}-projects-{projectId}-tasks-{taskId}-comments", - "summary": "Get Task Comments", - "description": "Retrieve comments for a specific task within a project and organization", + "operationId": "scaleAppListTeam", + "summary": "List teams", + "description": "Returns a paginated list of teams", "tags": [ - "Organizations" + "Teams" ], "parameters": [ { @@ -3419,97 +13105,107 @@ "name": "page", "required": false, "schema": { - "type": "number", - "description": "Page number for pagination" + "type": "string" }, - "description": "Page number for pagination" + "example": 1 }, { "in": "query", "name": "limit", "required": false, "schema": { - "type": "number", - "description": "Number of comments per page" - }, - "description": "Number of comments per page" - }, - { - "in": "query", - "name": "sort", - "required": false, - "schema": { - "type": "string", - "enum": [ - "newest", - "oldest", - "likes" - ], - "description": "Sort order" - }, - "description": "Sort order" - }, - { - "in": "query", - "name": "includeDeleted", - "required": false, - "schema": { - "type": "boolean", - "description": "Whether to include soft-deleted comments" + "type": "string" }, - "description": "Whether to include soft-deleted comments" + "example": "example" }, { "in": "query", - "name": "includeReplies", + "name": "search", "required": false, "schema": { - "type": "boolean", - "description": "Whether to include replies" + "type": "string" }, - "description": "Whether to include replies" + "example": "example" }, { "in": "query", - "name": "user", + "name": "active", "required": false, "schema": { "type": "string", - "description": "Filter by user ID" - }, - "description": "Filter by user ID" - }, - { - "in": "path", - "name": "orgId", - "required": true, - "schema": { - "type": "string", - "description": "Organization ID" + "enum": [ + "true", + "false" + ] }, - "description": "Organization ID", - "example": "123" - }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "scaleAppCreateTeam", + "summary": "Create team", + "description": "Creates a new team", + "tags": [ + "Teams" + ], + "parameters": [], + "security": [ { - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "type": "string", - "description": "Project ID within the organization" - }, - "description": "Project ID within the organization", - "example": "123" - }, + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTeamInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamEntity" + } + } + } + } + } + } + }, + "/generated/teams/{id}": { + "get": { + "operationId": "scaleAppGetTeam", + "summary": "Get team by ID", + "description": "Returns a single team by identifier", + "tags": [ + "Teams" + ], + "parameters": [ { "in": "path", - "name": "taskId", + "name": "id", "required": true, "schema": { - "type": "string", - "description": "Task ID within the project" + "type": "string" }, - "description": "Task ID within the project", "example": "123" } ], @@ -3524,7 +13220,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentsResponse" + "$ref": "#/components/schemas/TeamEntity" } } } @@ -3537,45 +13233,21 @@ } } }, - "post": { - "operationId": "post-organizations-{orgId}-projects-{projectId}-tasks-{taskId}-comments", - "summary": "Create Task Comment", - "description": "Add a new comment to a specific task", + "patch": { + "operationId": "scaleAppUpdateTeam", + "summary": "Update team", + "description": "Updates an existing team", "tags": [ - "Organizations" + "Teams" ], "parameters": [ { "in": "path", - "name": "orgId", - "required": true, - "schema": { - "type": "string", - "description": "Organization ID" - }, - "description": "Organization ID", - "example": "123" - }, - { - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "type": "string", - "description": "Project ID within the organization" - }, - "description": "Project ID within the organization", - "example": "123" - }, - { - "in": "path", - "name": "taskId", + "name": "id", "required": true, "schema": { - "type": "string", - "description": "Task ID within the project" + "type": "string" }, - "description": "Task ID within the project", "example": "123" } ], @@ -3588,7 +13260,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCommentBody" + "$ref": "#/components/schemas/UpdateTeamInput" } } } @@ -3599,67 +13271,31 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCommentResponse" + "$ref": "#/components/schemas/TeamEntity" } } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } }, - "patch": { - "operationId": "patch-organizations-{orgId}-projects-{projectId}-tasks-{taskId}-comments", - "summary": "Update Task Comment", - "description": "Modify an existing comment on a task", + "delete": { + "operationId": "scaleAppDeleteTeam", + "summary": "Delete team", + "description": "Deletes a team by identifier", "tags": [ - "Organizations" + "Teams" ], "parameters": [ - { - "in": "query", - "name": "commentId", - "required": false, - "schema": { - "type": "string" - }, - "example": "123" - }, - { - "in": "path", - "name": "orgId", - "required": true, - "schema": { - "type": "string", - "description": "Organization ID" - }, - "description": "Organization ID", - "example": "123" - }, - { - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "type": "string", - "description": "Project ID within the organization" - }, - "description": "Project ID within the organization", - "example": "123" - }, { "in": "path", - "name": "taskId", + "name": "id", "required": true, "schema": { - "type": "string", - "description": "Task ID within the project" + "type": "string" }, - "description": "Task ID within the project", "example": "123" } ], @@ -3668,22 +13304,88 @@ "BearerAuth": [] } ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/upload": { + "post": { + "operationId": "post-upload", + "summary": "Upload image file", + "description": "Uploads PNG or JPG image files with validation and metadata", + "tags": [ + "Uploads" + ], + "parameters": [], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/UpdateCommentBody" + "$ref": "#/components/schemas/UploadFormData" + }, + "encoding": { + "file": { + "contentType": "application/octet-stream" + } } } - } + }, + "description": "Multipart form data containing image file (PNG/JPG, max 5MB), optional description and category" }, + "responses": { + "200": { + "description": "Returns upload confirmation with file metadata and access URL", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/users/{id}": { + "get": { + "operationId": "get-users-{id}", + "summary": "Get User by ID", + "description": "Retrieves a user's profile information", + "tags": [ + "Users" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "User's unique identifier" + }, + "description": "User's unique identifier", + "example": "123" + } + ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateCommentResponse" + "$ref": "#/components/schemas/UserResponse" } } } @@ -3695,61 +13397,56 @@ "$ref": "#/components/responses/500" } } - }, - "delete": { - "operationId": "delete-organizations-{orgId}-projects-{projectId}-tasks-{taskId}-comments", - "summary": "Delete Task Comment", - "description": "Remove a comment from a task (soft delete)", + } + }, + "/generated/webhooks": { + "get": { + "operationId": "scaleAppListWebhook", + "summary": "List webhooks", + "description": "Returns a paginated list of webhooks", "tags": [ - "Organizations" + "Webhooks" ], "parameters": [ { "in": "query", - "name": "commentId", + "name": "page", "required": false, "schema": { "type": "string" }, - "example": "123" + "example": 1 }, { - "in": "path", - "name": "orgId", - "required": true, + "in": "query", + "name": "limit", + "required": false, "schema": { - "type": "string", - "description": "Organization ID" + "type": "string" }, - "description": "Organization ID", - "example": "123" + "example": "example" }, { - "in": "path", - "name": "projectId", - "required": true, + "in": "query", + "name": "search", + "required": false, "schema": { - "type": "string", - "description": "Project ID within the organization" + "type": "string" }, - "description": "Project ID within the organization", - "example": "123" + "example": "example" }, { - "in": "path", - "name": "taskId", - "required": true, + "in": "query", + "name": "active", + "required": false, "schema": { "type": "string", - "description": "Task ID within the project" + "enum": [ + "true", + "false" + ] }, - "description": "Task ID within the project", - "example": "123" - } - ], - "security": [ - { - "BearerAuth": [] + "example": "example" } ], "responses": { @@ -3758,35 +13455,31 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteCommentResponse" + "$ref": "#/components/schemas/WebhookListResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } - } - }, - "/products": { + }, "post": { - "operationId": "post-products", - "summary": "Create product", - "description": "Demonstrates ReturnType and Parameters utility types", + "operationId": "scaleAppCreateWebhook", + "summary": "Create webhook", + "description": "Creates a new webhook", "tags": [ - "Products", - "Commerce" + "Webhooks" ], "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateProductRequest" + "$ref": "#/components/schemas/CreateWebhookInput" } } } @@ -3797,51 +13490,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateProductApiResponse" - } - } - }, - "headers": { - "X-Request-Id": { - "description": "Trace identifier", - "schema": { - "type": "string" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" - }, - "4XX": { - "description": "Any client error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "5XX": { - "description": "Any server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "default": { - "description": "Fallback error envelope", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/WebhookEntity" } } } @@ -3849,13 +13498,13 @@ } } }, - "/products/{id}": { + "/generated/webhooks/{id}": { "get": { - "operationId": "get-products-{id}", - "summary": "Get Product by ID", - "description": "Demonstrates Awaited> utility type support", + "operationId": "scaleAppGetWebhook", + "summary": "Get webhook by ID", + "description": "Returns a single webhook by identifier", "tags": [ - "Products" + "Webhooks" ], "parameters": [ { @@ -3868,13 +13517,18 @@ "example": "123" } ], + "security": [ + { + "BearerAuth": [] + } + ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductByIdResponse" + "$ref": "#/components/schemas/WebhookEntity" } } } @@ -3888,11 +13542,11 @@ } }, "patch": { - "operationId": "patch-products-{id}", - "summary": "Update Product Stock", - "description": "Demonstrates Awaited> with async functions", + "operationId": "scaleAppUpdateWebhook", + "summary": "Update webhook", + "description": "Updates an existing webhook", "tags": [ - "Products" + "Webhooks" ], "parameters": [ { @@ -3905,11 +13559,16 @@ "example": "123" } ], + "security": [ + { + "BearerAuth": [] + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateStockRequest" + "$ref": "#/components/schemas/UpdateWebhookInput" } } } @@ -3920,27 +13579,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateStockApiResponse" + "$ref": "#/components/schemas/WebhookEntity" } } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } - } - }, - "/products/{id}/summary": { - "get": { - "operationId": "get-products-{id}-summary", - "summary": "Get Product Summary", - "description": "Demonstrates simple Awaited> pattern", + }, + "delete": { + "operationId": "scaleAppDeleteWebhook", + "summary": "Delete webhook", + "description": "Deletes a webhook by identifier", "tags": [ - "Products" + "Webhooks" ], "parameters": [ { @@ -3953,62 +13607,69 @@ "example": "123" } ], + "security": [ + { + "BearerAuth": [] + } + ], "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProductSummaryResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" + "204": { + "description": "Resource deleted successfully" }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } } }, - "/reports": { + "/generated/workspaces": { "get": { - "operationId": "get-reports", - "summary": "List reports", - "description": "Returns a paginated list of reports. Requires both Bearer token and API key.", + "operationId": "scaleAppListWorkspace", + "summary": "List workspaces", + "description": "Returns a paginated list of workspaces", "tags": [ - "Reports" + "Workspaces" ], "parameters": [ { "in": "query", - "name": "from", + "name": "page", "required": false, "schema": { - "type": "string", - "description": "start date (ISO 8601)" + "type": "string" }, - "description": "start date (ISO 8601)" + "example": 1 }, { "in": "query", - "name": "to", + "name": "limit", "required": false, "schema": { - "type": "string", - "description": "end date (ISO 8601)" + "type": "string" }, - "description": "end date (ISO 8601)" - } - ], - "security": [ + "example": "example" + }, { - "BearerAuth": [] + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" }, { - "ApiKeyAuth": [] + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" } ], "responses": { @@ -4017,40 +13678,31 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportsResponse" + "$ref": "#/components/schemas/WorkspaceListResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } }, "post": { - "operationId": "post-reports", - "summary": "Create report", - "description": "Creates a new report. Requires Bearer token and a partner-specific token.", + "operationId": "scaleAppCreateWorkspace", + "summary": "Create workspace", + "description": "Creates a new workspace", "tags": [ - "Reports" + "Workspaces" ], "parameters": [], "security": [ { "BearerAuth": [] - }, - { - "PartnerToken": [] } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateReportBody" + "$ref": "#/components/schemas/CreateWorkspaceInput" } } } @@ -4061,32 +13713,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Report" + "$ref": "#/components/schemas/WorkspaceEntity" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/sessions/{sessionId}": { + "/generated/workspaces/{id}": { "get": { - "operationId": "typescriptGetSession", - "summary": "Get a session.", - "description": "Demonstrates generic wrapper responses for session resources that can be authenticated by bearer, API key, or a session cookie.", + "operationId": "scaleAppGetWorkspace", + "summary": "Get workspace by ID", + "description": "Returns a single workspace by identifier", "tags": [ - "Sessions" + "Workspaces" ], "parameters": [ { "in": "path", - "name": "sessionId", + "name": "id", "required": true, "schema": { "type": "string" @@ -4097,9 +13743,6 @@ "security": [ { "BearerAuth": [] - }, - { - "ApiKeyAuth": [] } ], "responses": { @@ -4108,7 +13751,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SessionEnvelope" + "$ref": "#/components/schemas/WorkspaceEntity" } } } @@ -4122,16 +13765,16 @@ } }, "patch": { - "operationId": "typescriptUpdateSession", - "summary": "Update a session.", - "description": "Extends or revokes a session while preserving the generic response envelope.", + "operationId": "scaleAppUpdateWorkspace", + "summary": "Update workspace", + "description": "Updates an existing workspace", "tags": [ - "Sessions" + "Workspaces" ], "parameters": [ { "in": "path", - "name": "sessionId", + "name": "id", "required": true, "schema": { "type": "string" @@ -4142,16 +13785,13 @@ "security": [ { "BearerAuth": [] - }, - { - "PartnerToken": [] } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SessionActionInput" + "$ref": "#/components/schemas/UpdateWorkspaceInput" } } } @@ -4162,30 +13802,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SessionEnvelope" + "$ref": "#/components/schemas/WorkspaceEntity" } } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } }, "delete": { - "operationId": "typescriptDeleteSession", - "summary": "Delete a session.", - "description": "Demonstrates 204 responses from typed route modules.", + "operationId": "scaleAppDeleteWorkspace", + "summary": "Delete workspace", + "description": "Deletes a workspace by identifier", "tags": [ - "Sessions" + "Workspaces" ], "parameters": [ { "in": "path", - "name": "sessionId", + "name": "id", "required": true, "schema": { "type": "string" @@ -4200,98 +13837,10 @@ ], "responses": { "204": { - "description": "No Content" + "description": "Resource deleted successfully" }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" - } - } - } - }, - "/upload": { - "post": { - "operationId": "post-upload", - "summary": "Upload image file", - "description": "Uploads PNG or JPG image files with validation and metadata", - "tags": [ - "Uploads" - ], - "parameters": [], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/UploadFormData" - }, - "encoding": { - "file": { - "contentType": "application/octet-stream" - } - } - } - }, - "description": "Multipart form data containing image file (PNG/JPG, max 5MB), optional description and category" - }, - "responses": { - "200": { - "description": "Returns upload confirmation with file metadata and access URL", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UploadResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" - } - } - } - }, - "/users/{id}": { - "get": { - "operationId": "get-users-{id}", - "summary": "Get User by ID", - "description": "Retrieves a user's profile information", - "tags": [ - "Users" - ], - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string", - "description": "User's unique identifier" - }, - "description": "User's unique identifier", - "example": "123" - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } } @@ -4301,38 +13850,95 @@ { "name": "Admin" }, + { + "name": "ApiKeys" + }, + { + "name": "Attachments" + }, + { + "name": "AuditLogs" + }, { "name": "Auth" }, { "name": "Billing" }, + { + "name": "Catalog" + }, + { + "name": "Comments" + }, + { + "name": "Customers" + }, + { + "name": "Departments" + }, + { + "name": "Documents" + }, { "name": "Exports" }, + { + "name": "Invoices" + }, { "name": "Llms" }, + { + "name": "Members" + }, { "name": "Notifications" }, + { + "name": "Orders" + }, { "name": "Organizations" }, + { + "name": "Payments" + }, { "name": "Products" }, + { + "name": "Projects" + }, + { + "name": "Refunds" + }, { "name": "Reports" }, { "name": "Sessions" }, + { + "name": "Subscriptions" + }, + { + "name": "Tasks" + }, + { + "name": "Teams" + }, { "name": "Uploads" }, { "name": "Users" + }, + { + "name": "Webhooks" + }, + { + "name": "Workspaces" } ] } diff --git a/apps/next-app-typescript/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..7996c36b --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId scaleAppGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId scaleAppUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId scaleAppDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/api-keys/route.ts b/apps/next-app-typescript/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..8b721fbb --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId scaleAppListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId scaleAppCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..02b1dccb --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId scaleAppGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId scaleAppUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId scaleAppDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/attachments/route.ts b/apps/next-app-typescript/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..6836b362 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId scaleAppListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId scaleAppCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..604bccc5 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId scaleAppGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId scaleAppUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId scaleAppDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/audit-logs/route.ts b/apps/next-app-typescript/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..3281eb5c --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId scaleAppListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId scaleAppCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..f813dc43 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId scaleAppGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId scaleAppUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId scaleAppDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/catalog-items/route.ts b/apps/next-app-typescript/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..5a47abef --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId scaleAppListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId scaleAppCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..fc940165 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId scaleAppGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId scaleAppUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId scaleAppDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/comments/route.ts b/apps/next-app-typescript/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..d697511f --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId scaleAppListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId scaleAppCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..51cd5370 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId scaleAppGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId scaleAppUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId scaleAppDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/customers/route.ts b/apps/next-app-typescript/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..93d9f21e --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId scaleAppListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId scaleAppCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..878bde3b --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId scaleAppGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId scaleAppUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId scaleAppDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/departments/route.ts b/apps/next-app-typescript/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..68354f7d --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId scaleAppListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId scaleAppCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..f317bb28 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId scaleAppGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId scaleAppUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId scaleAppDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/documents/route.ts b/apps/next-app-typescript/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..24f1baa7 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId scaleAppListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId scaleAppCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..bc891ba3 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId scaleAppGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId scaleAppUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId scaleAppDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/exports/route.ts b/apps/next-app-typescript/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..86e847ff --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId scaleAppListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId scaleAppCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..fe384b87 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId scaleAppGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId scaleAppUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId scaleAppDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/invoices/route.ts b/apps/next-app-typescript/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..111f61d1 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId scaleAppListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId scaleAppCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/members/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..26565265 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId scaleAppGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId scaleAppUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId scaleAppDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/members/route.ts b/apps/next-app-typescript/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..e42e957a --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId scaleAppListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId scaleAppCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..0e02546a --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId scaleAppGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId scaleAppUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId scaleAppDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/notifications/route.ts b/apps/next-app-typescript/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..9c6d2fed --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId scaleAppListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId scaleAppCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..84acee8e --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId scaleAppGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId scaleAppUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId scaleAppDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/orders/route.ts b/apps/next-app-typescript/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..b430de61 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId scaleAppListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId scaleAppCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..dda22838 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId scaleAppGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId scaleAppUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId scaleAppDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..08e99ea9 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId scaleAppListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId scaleAppCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..274e7276 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId scaleAppGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId scaleAppUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId scaleAppDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/organizations/route.ts b/apps/next-app-typescript/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..66092d72 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId scaleAppListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId scaleAppCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..5a882652 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId scaleAppGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId scaleAppUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId scaleAppDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/payments/route.ts b/apps/next-app-typescript/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..bf177a0d --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId scaleAppListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId scaleAppCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/products/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..b131fbb4 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId scaleAppGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId scaleAppUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId scaleAppDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/products/route.ts b/apps/next-app-typescript/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..a1470651 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId scaleAppListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId scaleAppCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..46017738 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId scaleAppGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId scaleAppUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId scaleAppDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-typescript/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..3ee89db9 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId scaleAppListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId scaleAppCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..d2aefe0c --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId scaleAppGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId scaleAppUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId scaleAppDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/refunds/route.ts b/apps/next-app-typescript/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..3eb20d40 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId scaleAppListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId scaleAppCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..b1178a1a --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId scaleAppGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId scaleAppUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId scaleAppDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/reports/route.ts b/apps/next-app-typescript/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..52ef1411 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId scaleAppListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId scaleAppCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..d248a932 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId scaleAppGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId scaleAppUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId scaleAppDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/sessions/route.ts b/apps/next-app-typescript/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..2154465c --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId scaleAppListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId scaleAppCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..4182ffd8 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId scaleAppGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId scaleAppUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId scaleAppDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/subscriptions/route.ts b/apps/next-app-typescript/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..470c22b2 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId scaleAppListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId scaleAppCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..04776d06 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId scaleAppGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId scaleAppUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId scaleAppDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/teams/route.ts b/apps/next-app-typescript/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..723c57fa --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId scaleAppListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId scaleAppCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..9e39c4ed --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId scaleAppGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId scaleAppUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId scaleAppDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/webhooks/route.ts b/apps/next-app-typescript/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..7f2e1f75 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId scaleAppListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId scaleAppCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-typescript/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..4576ed70 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId scaleAppGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId scaleAppUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId scaleAppDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/app/api/generated/workspaces/route.ts b/apps/next-app-typescript/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..59177684 --- /dev/null +++ b/apps/next-app-typescript/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId scaleAppListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId scaleAppCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-typescript/src/types/generated/api-keys-entity.ts b/apps/next-app-typescript/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/api-keys-input.ts b/apps/next-app-typescript/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/attachments-entity.ts b/apps/next-app-typescript/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/attachments-input.ts b/apps/next-app-typescript/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/audit-logs-entity.ts b/apps/next-app-typescript/src/types/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/audit-logs-input.ts b/apps/next-app-typescript/src/types/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/catalog-items-entity.ts b/apps/next-app-typescript/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/catalog-items-input.ts b/apps/next-app-typescript/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/comments-entity.ts b/apps/next-app-typescript/src/types/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/comments-input.ts b/apps/next-app-typescript/src/types/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/customers-entity.ts b/apps/next-app-typescript/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/customers-input.ts b/apps/next-app-typescript/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/departments-entity.ts b/apps/next-app-typescript/src/types/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/departments-input.ts b/apps/next-app-typescript/src/types/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/documents-entity.ts b/apps/next-app-typescript/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/documents-input.ts b/apps/next-app-typescript/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/exports-entity.ts b/apps/next-app-typescript/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/exports-input.ts b/apps/next-app-typescript/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/invoices-entity.ts b/apps/next-app-typescript/src/types/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/invoices-input.ts b/apps/next-app-typescript/src/types/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/members-entity.ts b/apps/next-app-typescript/src/types/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/members-input.ts b/apps/next-app-typescript/src/types/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/notifications-entity.ts b/apps/next-app-typescript/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/notifications-input.ts b/apps/next-app-typescript/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/orders-entity.ts b/apps/next-app-typescript/src/types/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/orders-input.ts b/apps/next-app-typescript/src/types/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/organizations-entity.ts b/apps/next-app-typescript/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/organizations-input.ts b/apps/next-app-typescript/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/payments-entity.ts b/apps/next-app-typescript/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/payments-input.ts b/apps/next-app-typescript/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/products-entity.ts b/apps/next-app-typescript/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/products-input.ts b/apps/next-app-typescript/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/projects-entity.ts b/apps/next-app-typescript/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/projects-input.ts b/apps/next-app-typescript/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/refunds-entity.ts b/apps/next-app-typescript/src/types/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/refunds-input.ts b/apps/next-app-typescript/src/types/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/reports-entity.ts b/apps/next-app-typescript/src/types/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/reports-input.ts b/apps/next-app-typescript/src/types/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/sessions-entity.ts b/apps/next-app-typescript/src/types/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/sessions-input.ts b/apps/next-app-typescript/src/types/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/subscriptions-entity.ts b/apps/next-app-typescript/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/subscriptions-input.ts b/apps/next-app-typescript/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/tasks-entity.ts b/apps/next-app-typescript/src/types/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/tasks-input.ts b/apps/next-app-typescript/src/types/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/teams-entity.ts b/apps/next-app-typescript/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/teams-input.ts b/apps/next-app-typescript/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/webhooks-entity.ts b/apps/next-app-typescript/src/types/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/webhooks-input.ts b/apps/next-app-typescript/src/types/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-typescript/src/types/generated/workspaces-entity.ts b/apps/next-app-typescript/src/types/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/apps/next-app-typescript/src/types/generated/workspaces-input.ts b/apps/next-app-typescript/src/types/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/apps/next-app-typescript/src/types/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-app-zod/public/openapi.json b/apps/next-app-zod/public/openapi.json index 04292b55..5c0364f0 100644 --- a/apps/next-app-zod/public/openapi.json +++ b/apps/next-app-zod/public/openapi.json @@ -94,6 +94,106 @@ "secretKey" ] }, + "ApiKeyIdParams": {}, + "ApiKeyIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "ApiKeyListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ApiKeyListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeySchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ApiKeySchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, "ApiResponseSchema": { "type": "object", "discriminator": { @@ -108,6 +208,206 @@ } ] }, + "AttachmentIdParams": {}, + "AttachmentIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "AttachmentListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "AttachmentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AttachmentSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "AttachmentSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "AuditLogIdParams": {}, + "AuditLogIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "AuditLogListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "AuditLogListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditLogSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "AuditLogSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, "AuthErrorResponse": { "type": "object", "properties": { @@ -252,2664 +552,11196 @@ "total" ] }, - "CreateOrderBody": { + "CatalogItemIdParams": {}, + "CatalogItemIdParamsSchema": { "type": "object", "properties": { - "cartId": { + "id": { "type": "string", - "format": "uuid", - "description": "Cart ID" + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "CatalogItemListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" }, - "shippingAddressId": { - "type": "integer", - "description": "ID of shipping address from user profile" + "limit": { + "type": "string", + "pattern": "^\\d+$" }, - "billingAddressId": { - "type": "integer", - "description": "ID of billing address from user profile" + "search": { + "type": "string", + "maxLength": 120 }, - "shippingAddress": { - "allOf": [ - { - "$ref": "#/components/schemas/Address" - } - ], - "description": "New shipping address" - }, - "billingAddress": { - "allOf": [ - { - "$ref": "#/components/schemas/Address" - } - ], - "description": "New billing address" - }, - "useShippingAsBilling": { - "type": "boolean", - "default": true, - "description": "Use shipping address as billing address" - }, - "paymentMethodId": { - "type": "integer", - "description": "ID of saved payment method" - }, - "paymentMethod": { - "allOf": [ - { - "$ref": "#/components/schemas/PaymentMethodSchema" - } - ], - "description": "New payment method" - }, - "notes": { + "active": { "type": "string", - "description": "Additional order notes" + "enum": [ + "true", + "false" + ] } - }, - "required": [ - "cartId" - ] + } }, - "CreateOrderBodyOutput": { + "CatalogItemListResponse": { "type": "object", "properties": { - "cartId": { - "type": "string", - "format": "uuid", - "description": "Cart ID" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CatalogItemSchema" + } }, - "shippingAddressId": { + "total": { "type": "integer", - "description": "ID of shipping address from user profile" + "minimum": 0 }, - "billingAddressId": { + "page": { "type": "integer", - "description": "ID of billing address from user profile" - }, - "shippingAddress": { - "type": "object", - "description": "New shipping address" - }, - "billingAddress": { - "type": "object", - "description": "New billing address" - }, - "useShippingAsBilling": { - "type": "boolean", - "default": true, - "description": "Use shipping address as billing address" + "exclusiveMinimum": 0 }, - "paymentMethodId": { + "limit": { "type": "integer", - "description": "ID of saved payment method" - }, - "paymentMethod": { - "allOf": [ - { - "$ref": "#/components/schemas/PaymentMethodSchema" - } - ], - "description": "New payment method" - }, - "notes": { - "type": "string", - "description": "Additional order notes" + "exclusiveMinimum": 0 } }, "required": [ - "cartId" + "items", + "total", + "page", + "limit" ] }, - "CreateSessionBody": { + "CatalogItemSchema": { "type": "object", "properties": { - "email": { + "id": { "type": "string", - "format": "email", - "description": "Account email" + "format": "uuid" }, - "password": { + "name": { "type": "string", - "minLength": 12, - "maxLength": 128, - "description": "Account password (min 12 chars)" + "minLength": 1, + "maxLength": 120 }, - "deviceId": { + "description": { "type": "string", - "format": "nanoid", - "description": "Trusted device identifier (nanoid)" + "maxLength": 500 }, - "totp": { + "active": { + "type": "boolean" + }, + "createdAt": { "type": "string", - "pattern": "^\\d{6}$", - "description": "One-time code from authenticator app" + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" } }, "required": [ - "email", - "password" - ], - "additionalProperties": true + "id", + "name", + "active" + ] }, - "CreateSubscriptionBody": { + "CommentIdParams": {}, + "CommentIdParamsSchema": { "type": "object", "properties": { - "callbackUrl": { - "type": "string", - "format": "uri", - "description": "HTTPS URL that will receive events" - }, - "events": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "payment.succeeded", - "payment.failed", - "payment.refunded" - ] - }, - "minItems": 1, - "description": "Event types this subscription receives" - }, - "secret": { + "id": { "type": "string", - "minLength": 32, - "description": "Shared HMAC secret used to sign deliveries" + "format": "uuid" } }, "required": [ - "callbackUrl", - "events", - "secret" - ], - "additionalProperties": false + "id" + ] }, - "CreditCardPaymentSchema": { + "CommentListQuerySchema": { "type": "object", "properties": { - "type": { + "page": { "type": "string", - "enum": [ - "credit_card" - ] + "pattern": "^\\d+$" }, - "cardNumber": { + "limit": { "type": "string", - "description": "Credit card number" + "pattern": "^\\d+$" }, - "expiryDate": { + "search": { "type": "string", - "pattern": "^\\d{2}\\/\\d{2}$", - "description": "Expiry date in MM/YY format" + "maxLength": 120 }, - "cvv": { + "active": { "type": "string", - "minLength": 3, - "maxLength": 3, - "description": "CVV code" + "enum": [ + "true", + "false" + ] + } + } + }, + "CommentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CommentSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 } }, "required": [ - "type", - "cardNumber", - "expiryDate", - "cvv" + "items", + "total", + "page", + "limit" ] }, - "DoubleExtendedSchema": { + "CommentSchema": { "type": "object", "properties": { "id": { "type": "string", - "format": "uuid", - "description": "Identifier" + "format": "uuid" }, "name": { "type": "string", - "description": "Name" + "minLength": 1, + "maxLength": 120 }, - "email": { + "description": { "type": "string", - "format": "email", - "description": "Email address" + "maxLength": 500 }, - "age": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Age in years" + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" } }, "required": [ "id", "name", - "email" + "active" ] }, - "EmailNotificationSchema": { + "CreateApiKeySchema": { "type": "object", "properties": { - "type": { + "name": { "type": "string", - "enum": [ - "email" - ] + "minLength": 1, + "maxLength": 120 }, - "to": { + "description": { "type": "string", - "format": "email", - "description": "Recipient email address" + "maxLength": 500 }, - "subject": { + "active": { + "type": "boolean" + } + }, + "required": [ + "name" + ] + }, + "CreateAttachmentSchema": { + "type": "object", + "properties": { + "name": { "type": "string", "minLength": 1, - "description": "Email subject" + "maxLength": 120 }, - "body": { + "description": { "type": "string", - "description": "Email body content" + "maxLength": 500 + }, + "active": { + "type": "boolean" } }, "required": [ - "type", - "to", - "subject", - "body" + "name" ] }, - "ErrorResponseSchema": { + "CreateAuditLogSchema": { "type": "object", "properties": { - "status": { + "name": { "type": "string", - "enum": [ - "error" - ] + "minLength": 1, + "maxLength": 120 }, - "error": { + "description": { "type": "string", - "description": "Error message" + "maxLength": 500 }, - "code": { - "type": "number", - "description": "Error code" + "active": { + "type": "boolean" } }, "required": [ - "status", - "error", - "code" + "name" ] }, - "EventChunk": { + "CreateCatalogItemSchema": { "type": "object", "properties": { - "id": { + "name": { "type": "string", - "description": "Event identifier" + "minLength": 1, + "maxLength": 120 }, - "product": { + "description": { "type": "string", - "enum": [ - "catalog", - "billing", - "identity" - ], - "description": "Product source" - }, - "sequence": { - "type": "integer", - "description": "Monotonic event sequence number" + "maxLength": 500 }, - "status": { + "active": { + "type": "boolean" + } + }, + "required": [ + "name" + ] + }, + "CreateCommentSchema": { + "type": "object", + "properties": { + "name": { "type": "string", - "enum": [ - "active", - "paused" - ], - "description": "Current stream state" + "minLength": 1, + "maxLength": 120 }, - "emittedAt": { + "description": { "type": "string", - "format": "date-time", - "description": "Emission timestamp" + "maxLength": 500 }, - "payload": { - "type": "object", - "properties": { - "actorId": { - "type": "string", - "description": "Actor or user that caused the event" - }, - "summary": { - "type": "string", - "description": "Short event summary" - } - }, - "required": [ - "actorId", - "summary" - ], - "description": "Structured event payload" + "active": { + "type": "boolean" } }, "required": [ - "id", - "product", - "sequence", - "status", - "emittedAt", - "payload" + "name" ] }, - "EventExportJob": { + "CreateCustomerSchema": { "type": "object", "properties": { - "id": { + "name": { "type": "string", - "description": "Background export job identifier" + "minLength": 1, + "maxLength": 120 }, - "status": { + "description": { "type": "string", - "enum": [ - "queued", - "running" - ], - "description": "Export job status" + "maxLength": 500 }, - "submittedAt": { - "type": "string", - "format": "date-time", - "description": "Submission timestamp" + "active": { + "type": "boolean" } }, "required": [ - "id", - "status", - "submittedAt" + "name" ] }, - "EventIdParams": { + "CreateDepartmentSchema": { "type": "object", "properties": { - "id": { + "name": { "type": "string", - "description": "Event identifier" + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" } }, "required": [ - "id" + "name" ] }, - "EventSearchRequest": { + "CreateDocumentSchema": { "type": "object", "properties": { - "product": { + "name": { "type": "string", - "enum": [ - "catalog", - "billing", - "identity" - ], - "description": "Product event source" - }, - "includeArchived": { - "type": "boolean", - "default": false, - "description": "Include archived events in search results" - }, - "statuses": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "active", - "paused" - ] - }, - "minItems": 1, - "description": "Statuses that should be returned" + "minLength": 1, + "maxLength": 120 }, - "query": { + "description": { "type": "string", - "minLength": 2, - "description": "Free-text search term" + "maxLength": 500 + }, + "active": { + "type": "boolean" } }, "required": [ - "includeArchived", - "query" + "name" ] }, - "EventSearchResponse": { + "CreateExportSchema": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EventChunk" - }, - "description": "Matching events" + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "nextCursor": { - "type": [ - "string", - "null" - ], - "description": "Cursor for the next page of results" + "description": { + "type": "string", + "maxLength": 500 }, - "total": { - "type": "integer", - "minimum": 0, - "description": "Total matching events" + "active": { + "type": "boolean" } }, "required": [ - "data", - "nextCursor", - "total" + "name" ] }, - "EventStreamQuery": { + "CreateInvoiceSchema": { "type": "object", "properties": { - "cursor": { + "name": { "type": "string", - "description": "Opaque cursor for the next event window" - }, - "limit": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Maximum events to stream" + "minLength": 1, + "maxLength": 120 }, - "product": { + "description": { "type": "string", - "enum": [ - "catalog", - "billing", - "identity" - ], - "description": "Product event source" + "maxLength": 500 }, - "status": { - "type": "string", - "enum": [ - "active", - "paused" - ], - "description": "Filter by stream status" + "active": { + "type": "boolean" } - } + }, + "required": [ + "name" + ] }, - "ExtendedSchema": { + "CreateMemberSchema": { "type": "object", "properties": { - "id": { + "name": { "type": "string", - "format": "uuid", - "description": "Identifier" + "minLength": 1, + "maxLength": 120 }, - "name": { + "description": { "type": "string", - "description": "Name" + "maxLength": 500 + }, + "active": { + "type": "boolean" } }, "required": [ - "id", "name" ] }, - "IdempotencyKey": { - "type": "string", - "format": "nanoid" - }, - "LegacyEventCsv": { - "type": "string", - "description": "Legacy CSV export payload" - }, - "LoadingStateSchema": { - "oneOf": [ - { + "CreateNotificationSchema": { + "type": "object", + "properties": { + "name": { "type": "string", - "enum": [ - "loading" - ] + "minLength": 1, + "maxLength": 120 }, - { + "description": { "type": "string", - "enum": [ - "error" - ] + "maxLength": 500 }, - { - "$ref": "#/components/schemas/UserDataSchema" + "active": { + "type": "boolean" } + }, + "required": [ + "name" ] }, - "MetricKey": { - "type": "string", - "enum": [ - "requests_per_second", - "errors_per_second", - "latency_p95_ms", - "latency_p99_ms" - ] - }, - "MetricPoint": { - "type": "array", - "prefixItems": [ - { + "CreateOrderBody": { + "type": "object", + "properties": { + "cartId": { + "type": "string", + "format": "uuid", + "description": "Cart ID" + }, + "shippingAddressId": { "type": "integer", - "description": "Unix epoch milliseconds" + "description": "ID of shipping address from user profile" }, - { - "type": "number", - "description": "Metric value" - } - ], - "items": false, - "minItems": 2, - "maxItems": 2 - }, - "MetricQueryBody": { - "allOf": [ - { + "billingAddressId": { + "type": "integer", + "description": "ID of billing address from user profile" + }, + "shippingAddress": { "allOf": [ { - "$ref": "#/components/schemas/BaseFilter" - }, + "$ref": "#/components/schemas/Address" + } + ], + "description": "New shipping address" + }, + "billingAddress": { + "allOf": [ { - "$ref": "#/components/schemas/WindowFilter" + "$ref": "#/components/schemas/Address" } - ] + ], + "description": "New billing address" }, - { - "type": "object", - "properties": { - "metrics": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MetricKey" - }, - "minItems": 1, - "description": "Metrics to aggregate" - }, - "tagFilters": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "type": "string" - }, - "description": "Free-form tag filters" + "useShippingAsBilling": { + "type": "boolean", + "default": true, + "description": "Use shipping address as billing address" + }, + "paymentMethodId": { + "type": "integer", + "description": "ID of saved payment method" + }, + "paymentMethod": { + "allOf": [ + { + "$ref": "#/components/schemas/PaymentMethodSchema" } - }, - "required": [ - "metrics" - ] + ], + "description": "New payment method" + }, + "notes": { + "type": "string", + "description": "Additional order notes" } + }, + "required": [ + "cartId" ] }, - "MetricQueryResponse": { + "CreateOrderSchema": { "type": "object", "properties": { - "series": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MetricPoint" - } - }, - "propertyNames": { - "$ref": "#/components/schemas/MetricKey" - }, - "description": "Per-metric time series" + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "samples": { - "type": "array", - "items": { - "type": "string", - "format": "ulid" - }, - "uniqueItems": true, - "description": "Deduplicated set of sample ids contributing to the result" + "description": { + "type": "string", + "maxLength": 500 }, - "cardinality": { - "type": "object", - "additionalProperties": { - "type": "integer", - "minimum": 0 - }, - "propertyNames": { - "type": "string" - }, - "description": "Cardinality per tag" + "active": { + "type": "boolean" } }, "required": [ - "series", - "samples", - "cardinality" + "name" ] }, - "MetricSummaryPatch": { + "CreateOrganizationSchema": { "type": "object", "properties": { - "owner": { - "type": "object", - "properties": { - "team": { - "type": "string" - }, - "contactEmail": { - "type": "string", - "format": "email" - } - } + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "windows": { - "type": "object", - "properties": { - "default": { - "type": "string", - "format": "date-time" - }, - "retention": { - "type": "string", - "format": "date-time" - } - } + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" } - } - }, - "MixedArraySchema": { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } - ] - } + }, + "required": [ + "name" + ] }, - "NestedSchema": { + "CreatePaymentSchema": { "type": "object", "properties": { - "foo": { - "$ref": "#/components/schemas/BaseSchema" + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "bar": { - "type": "string" + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" } }, "required": [ - "foo", - "bar" + "name" ] }, - "NotificationSchema": { + "CreateProductSchema": { "type": "object", - "discriminator": { - "propertyName": "type" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/EmailNotificationSchema" + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - { - "$ref": "#/components/schemas/SmsNotificationSchema" + "description": { + "type": "string", + "maxLength": 500 }, - { - "$ref": "#/components/schemas/PushNotificationSchema" + "active": { + "type": "boolean" } + }, + "required": [ + "name" ] }, - "NotificationTypeEnumSchema": { - "type": "string", - "enum": [ - "email", - "sms", - "push" - ] - }, - "NotificationTypeSchema": { - "type": "string", - "enum": [ - "email", - "sms", - "push" - ] - }, - "OptionalMessageAlternativeSchema": { - "type": [ - "string", - "null" - ] - }, - "OptionalMessageSchema": { - "type": [ - "string", - "null" - ] - }, - "OrderIdParams": { + "CreateProjectSchema": { "type": "object", "properties": { - "id": { + "name": { "type": "string", - "format": "uuid", - "description": "Order ID" + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" } }, "required": [ - "id" + "name" ] }, - "OrderSchema": { + "CreateRefundSchema": { "type": "object", "properties": { - "id": { + "name": { "type": "string", - "format": "uuid", - "description": "Order ID" + "minLength": 1, + "maxLength": 120 }, - "userId": { + "description": { "type": "string", - "format": "uuid", - "description": "User ID" + "maxLength": 500 }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CartItemSchema" - }, - "description": "Purchased products" + "active": { + "type": "boolean" + } + }, + "required": [ + "name" + ] + }, + "CreateReportSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "shippingAddress": { - "type": "object" + "description": { + "type": "string", + "maxLength": 500 }, - "billingAddress": { - "type": "object" - }, - "paymentMethod": { - "allOf": [ - { - "$ref": "#/components/schemas/PaymentMethodSchema" - } - ], - "description": "Payment method" - }, - "status": { - "allOf": [ - { - "$ref": "#/components/schemas/OrderStatusSchema" - } - ], - "description": "Order status" - }, - "subtotal": { - "type": "number", - "minimum": 0, - "description": "Subtotal (without discount and shipping)" - }, - "discountAmount": { - "type": "number", - "minimum": 0, - "default": 0, - "description": "Discount amount" - }, - "shippingCost": { - "type": "number", - "minimum": 0, - "description": "Shipping cost" - }, - "tax": { - "type": "number", - "minimum": 0, - "description": "Tax" - }, - "total": { - "type": "number", - "minimum": 0, - "description": "Total amount" - }, - "notes": { + "active": { + "type": "boolean" + } + }, + "required": [ + "name" + ] + }, + "CreateSessionBody": { + "type": "object", + "properties": { + "email": { "type": "string", - "description": "Additional notes" + "format": "email", + "description": "Account email" }, - "createdAt": { + "password": { "type": "string", - "format": "date-time", - "description": "Order creation date" + "minLength": 12, + "maxLength": 128, + "description": "Account password (min 12 chars)" }, - "updatedAt": { + "deviceId": { "type": "string", - "format": "date-time", - "description": "Last update date" + "format": "nanoid", + "description": "Trusted device identifier (nanoid)" }, - "paymentDate": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Payment date" + "totp": { + "type": "string", + "pattern": "^\\d{6}$", + "description": "One-time code from authenticator app" + } + }, + "required": [ + "email", + "password" + ], + "additionalProperties": true + }, + "CreateSessionSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "shippingDate": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Shipping date" + "description": { + "type": "string", + "maxLength": 500 }, - "deliveryDate": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Delivery date" + "active": { + "type": "boolean" } }, "required": [ - "id", - "userId", - "items", - "shippingAddress", - "billingAddress", - "paymentMethod", - "status", - "subtotal", - "discountAmount", - "shippingCost", - "tax", - "total", - "createdAt", - "updatedAt", - "paymentDate", - "shippingDate", - "deliveryDate" + "name" ] }, - "OrderSchemaOutput": { + "CreateSubscriptionBody": { "type": "object", "properties": { - "id": { - "type": "string", - "format": "uuid", - "description": "Order ID" - }, - "userId": { + "callbackUrl": { "type": "string", - "format": "uuid", - "description": "User ID" + "format": "uri", + "description": "HTTPS URL that will receive events" }, - "items": { + "events": { "type": "array", "items": { - "$ref": "#/components/schemas/CartItemSchema" + "type": "string", + "enum": [ + "payment.succeeded", + "payment.failed", + "payment.refunded" + ] }, - "description": "Purchased products" - }, - "shippingAddress": { - "allOf": [ - { - "$ref": "#/components/schemas/Address" - } - ], - "description": "Shipping address" - }, - "billingAddress": { - "allOf": [ - { - "$ref": "#/components/schemas/Address" - } - ], - "description": "Billing address (can be the same as shipping address)" - }, - "paymentMethod": { - "allOf": [ - { - "$ref": "#/components/schemas/PaymentMethodSchema" - } - ], - "description": "Payment method" - }, - "status": { - "allOf": [ - { - "$ref": "#/components/schemas/OrderStatusSchema" - } - ], - "description": "Order status" - }, - "subtotal": { - "type": "number", - "minimum": 0, - "description": "Subtotal (without discount and shipping)" - }, - "discountAmount": { - "type": "number", - "minimum": 0, - "default": 0, - "description": "Discount amount" + "minItems": 1, + "description": "Event types this subscription receives" }, - "shippingCost": { - "type": "number", - "minimum": 0, - "description": "Shipping cost" + "secret": { + "type": "string", + "minLength": 32, + "description": "Shared HMAC secret used to sign deliveries" + } + }, + "required": [ + "callbackUrl", + "events", + "secret" + ], + "additionalProperties": false + }, + "CreateSubscriptionSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "tax": { - "type": "number", - "minimum": 0, - "description": "Tax" + "description": { + "type": "string", + "maxLength": 500 }, - "total": { - "type": "number", - "minimum": 0, - "description": "Total amount" + "active": { + "type": "boolean" + } + }, + "required": [ + "name" + ] + }, + "CreateTaskSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "notes": { + "description": { "type": "string", - "description": "Additional notes" + "maxLength": 500 }, - "createdAt": { + "active": { + "type": "boolean" + } + }, + "required": [ + "name" + ] + }, + "CreateTeamSchema": { + "type": "object", + "properties": { + "name": { "type": "string", - "format": "date-time", - "description": "Order creation date" + "minLength": 1, + "maxLength": 120 }, - "updatedAt": { + "description": { "type": "string", - "format": "date-time", - "description": "Last update date" + "maxLength": 500 }, - "paymentDate": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Payment date" + "active": { + "type": "boolean" + } + }, + "required": [ + "name" + ] + }, + "CreateWebhookSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "shippingDate": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Shipping date" + "description": { + "type": "string", + "maxLength": 500 }, - "deliveryDate": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Delivery date" + "active": { + "type": "boolean" } }, "required": [ - "id", - "userId", - "items", - "shippingAddress", - "billingAddress", - "paymentMethod", - "status", - "subtotal", - "discountAmount", - "shippingCost", - "tax", - "total", - "createdAt", - "updatedAt", - "paymentDate", - "shippingDate", - "deliveryDate" + "name" ] }, - "OrdersQueryParams": { + "CreateWorkspaceSchema": { "type": "object", "properties": { - "page": { - "type": "integer", - "exclusiveMinimum": 0, - "default": 1, - "description": "Page number" + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "limit": { - "type": "integer", - "exclusiveMinimum": 0, - "maximum": 100, - "default": 20, - "description": "Results per page" - }, - "status": { - "allOf": [ - { - "$ref": "#/components/schemas/OrderStatusSchema" - } - ], - "description": "Filter by status" - }, - "dateFrom": { - "type": "string", - "format": "date-time", - "description": "Filter orders from date" - }, - "dateTo": { - "type": "string", - "format": "date-time", - "description": "Filter orders to date" - }, - "sort": { + "description": { "type": "string", - "enum": [ - "date_asc", - "date_desc", - "total_asc", - "total_desc" - ], - "default": "date_desc", - "description": "Sort results" - } - } - }, - "OrdersResponse": { - "type": "object", - "properties": { - "orders": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OrderSchema" - }, - "description": "List of orders" + "maxLength": 500 }, - "pagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "minimum": 0, - "description": "Total number of orders" - }, - "pages": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Total number of pages" - }, - "page": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Current page" - }, - "limit": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Results per page" - } - }, - "required": [ - "total", - "pages", - "page", - "limit" - ], - "description": "Pagination information" + "active": { + "type": "boolean" } }, "required": [ - "orders", - "pagination" + "name" ] }, - "OrdersResponseOutput": { + "CreditCardPaymentSchema": { "type": "object", "properties": { - "orders": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OrderSchemaOutput" - }, - "description": "List of orders" + "type": { + "type": "string", + "enum": [ + "credit_card" + ] }, - "pagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "minimum": 0, - "description": "Total number of orders" - }, - "pages": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Total number of pages" - }, - "page": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Current page" - }, - "limit": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Results per page" - } - }, - "required": [ - "total", - "pages", - "page", - "limit" - ], - "description": "Pagination information" + "cardNumber": { + "type": "string", + "description": "Credit card number" + }, + "expiryDate": { + "type": "string", + "pattern": "^\\d{2}\\/\\d{2}$", + "description": "Expiry date in MM/YY format" + }, + "cvv": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "description": "CVV code" } }, "required": [ - "orders", - "pagination" + "type", + "cardNumber", + "expiryDate", + "cvv" ] }, - "OrderStatusSchema": { - "type": "string", - "enum": [ - "pending", - "payment_processing", - "paid", - "preparing", - "shipped", - "delivered", - "cancelled", - "refunded" - ], - "description": "Order status" - }, - "PaginatedUsersSchema": { + "CustomerIdParams": {}, + "CustomerIdParamsSchema": { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserDetailedSchema" - }, - "description": "Array of items" - }, - "pagination": { - "allOf": [ - { - "$ref": "#/components/schemas/PaginationMeta" - } - ], - "description": "Pagination metadata" + "id": { + "type": "string", + "format": "uuid" } }, "required": [ - "data", - "pagination" + "id" ] }, - "PaginationMeta": { + "CustomerListQuerySchema": { "type": "object", "properties": { - "nextCursor": { - "type": [ - "string", - "null" - ], - "description": "Cursor for the next page" - }, - "hasMore": { - "type": "boolean", - "description": "Whether there are more items after this page" + "page": { + "type": "string", + "pattern": "^\\d+$" }, "limit": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Number of items in this page" + "type": "string", + "pattern": "^\\d+$" }, - "total": { - "type": "integer", - "minimum": 0, - "description": "Total count of items" + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] } - }, - "required": [ - "nextCursor", - "hasMore", - "limit" - ] + } }, - "PaginationSchema": { + "CustomerListResponse": { "type": "object", "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, "page": { "type": "integer", - "minimum": 1 + "exclusiveMinimum": 0 }, "limit": { "type": "integer", - "minimum": 1 + "exclusiveMinimum": 0 } }, "required": [ + "items", + "total", "page", "limit" ] }, - "PaymentCoreSchema": { + "CustomerSchema": { "type": "object", "properties": { - "paymentId": { + "id": { "type": "string", - "format": "ulid", - "description": "Payment identifier" + "format": "uuid" }, - "userId": { - "allOf": [ - { - "$ref": "#/components/schemas/UserId" - } - ], - "description": "User the payment belongs to" + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "amountMinor": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Amount in the smallest currency unit" + "description": { + "type": "string", + "maxLength": 500 }, - "currency": { + "active": { + "type": "boolean" + }, + "createdAt": { "type": "string", - "minLength": 3, - "maxLength": 3, - "pattern": "^[A-Z]{3}$", - "description": "ISO-4217 currency code" + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" } }, "required": [ - "paymentId", - "userId", - "amountMinor", - "currency" + "id", + "name", + "active" ] }, - "PaymentEvent": { + "DepartmentIdParams": {}, + "DepartmentIdParamsSchema": { "type": "object", - "discriminator": { - "propertyName": "type" + "properties": { + "id": { + "type": "string", + "format": "uuid" + } }, - "oneOf": [ - { - "$ref": "#/components/schemas/PaymentSucceededEvent" + "required": [ + "id" + ] + }, + "DepartmentListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" }, - { - "$ref": "#/components/schemas/PaymentFailedEvent" + "limit": { + "type": "string", + "pattern": "^\\d+$" }, - { - "$ref": "#/components/schemas/PaymentRefundedEvent" + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "DepartmentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DepartmentSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 } + }, + "required": [ + "items", + "total", + "page", + "limit" ] }, - "PaymentFailedEvent": { + "DepartmentSchema": { "type": "object", "properties": { "id": { "type": "string", - "format": "ulid", - "readOnly": true, - "description": "Unique event identifier" - }, - "idempotencyKey": { - "allOf": [ - { - "$ref": "#/components/schemas/IdempotencyKey" - } - ], - "description": "Unique key de-duplicating retried deliveries" + "format": "uuid" }, - "deliveredAt": { + "name": { "type": "string", - "format": "date-time", - "description": "Delivery timestamp (ISO string coerced to Date)" + "minLength": 1, + "maxLength": 120 }, - "apiVersion": { + "description": { "type": "string", - "enum": [ - "2026-04-01" - ], - "description": "API version the payload is serialized against" + "maxLength": 500 }, - "metadata": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "type": "string" - }, - "description": "Free-form key/value metadata" + "active": { + "type": "boolean" }, - "type": { + "createdAt": { "type": "string", - "enum": [ - "payment.failed" - ] + "format": "date-time" }, - "failureCode": { + "updatedAt": { "type": "string", - "enum": [ - "card_declined", - "expired_card", - "insufficient_funds", - "unknown" - ], - "description": "Reason the payment failed" - }, - "retriable": { - "type": "boolean", - "description": "Whether a retry is likely to succeed" + "format": "date-time" } }, "required": [ "id", - "idempotencyKey", - "deliveredAt", - "apiVersion", - "type", - "failureCode", - "retriable" + "name", + "active" ] }, - "PaymentMethodSchema": { + "DocumentIdParams": {}, + "DocumentIdParamsSchema": { "type": "object", - "discriminator": { - "propertyName": "type" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/CreditCardPaymentSchema" - }, - { - "$ref": "#/components/schemas/PayPalPaymentSchema" - }, - { - "$ref": "#/components/schemas/BankTransferPaymentSchema" + "properties": { + "id": { + "type": "string", + "format": "uuid" } + }, + "required": [ + "id" ] }, - "PaymentRefundedEvent": { + "DocumentListQuerySchema": { "type": "object", "properties": { - "id": { + "page": { "type": "string", - "format": "ulid", - "readOnly": true, - "description": "Unique event identifier" - }, - "idempotencyKey": { - "allOf": [ - { - "$ref": "#/components/schemas/IdempotencyKey" - } - ], - "description": "Unique key de-duplicating retried deliveries" + "pattern": "^\\d+$" }, - "deliveredAt": { + "limit": { "type": "string", - "format": "date-time", - "description": "Delivery timestamp (ISO string coerced to Date)" + "pattern": "^\\d+$" }, - "apiVersion": { + "search": { "type": "string", - "enum": [ - "2026-04-01" - ], - "description": "API version the payload is serialized against" - }, - "metadata": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "type": "string" - }, - "description": "Free-form key/value metadata" + "maxLength": 120 }, - "type": { + "active": { "type": "string", "enum": [ - "payment.refunded" + "true", + "false" ] + } + } + }, + "DocumentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentSchema" + } }, - "refundedAmountMinor": { + "total": { "type": "integer", - "minimum": 0, - "description": "Refund amount in the smallest currency unit" + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 } }, "required": [ - "id", - "idempotencyKey", - "deliveredAt", - "apiVersion", - "type", - "refundedAmountMinor" + "items", + "total", + "page", + "limit" ] }, - "PaymentSucceededEvent": { + "DocumentSchema": { "type": "object", "properties": { "id": { "type": "string", - "format": "ulid", - "readOnly": true, - "description": "Unique event identifier" - }, - "idempotencyKey": { - "allOf": [ - { - "$ref": "#/components/schemas/IdempotencyKey" - } - ], - "description": "Unique key de-duplicating retried deliveries" + "format": "uuid" }, - "deliveredAt": { + "name": { "type": "string", - "format": "date-time", - "description": "Delivery timestamp (ISO string coerced to Date)" + "minLength": 1, + "maxLength": 120 }, - "apiVersion": { + "description": { "type": "string", - "enum": [ - "2026-04-01" - ], - "description": "API version the payload is serialized against" + "maxLength": 500 }, - "metadata": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "type": "string" - }, - "description": "Free-form key/value metadata" + "active": { + "type": "boolean" }, - "type": { + "createdAt": { "type": "string", - "enum": [ - "payment.succeeded" - ] + "format": "date-time" }, - "receiptUrl": { + "updatedAt": { "type": "string", - "format": "uri", - "description": "Hosted receipt accessible to the customer" + "format": "date-time" } }, "required": [ "id", - "idempotencyKey", - "deliveredAt", - "apiVersion", - "type", - "receiptUrl" + "name", + "active" ] }, - "PayPalPaymentSchema": { + "DoubleExtendedSchema": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "paypal" - ] + "format": "uuid", + "description": "Identifier" + }, + "name": { + "type": "string", + "description": "Name" }, "email": { "type": "string", "format": "email", - "description": "PayPal account email" + "description": "Email address" + }, + "age": { + "type": "integer", + "exclusiveMinimum": 0, + "description": "Age in years" } }, "required": [ - "type", + "id", + "name", "email" ] }, - "PermissionSchema": { - "type": "string", - "enum": [ - "read", - "write", - "admin" - ] - }, - "ProcessingStatusSchema": { - "type": "string", - "enum": [ - "pending", - "processing", - "completed", - "failed" - ] - }, - "ProductCategory": { + "EmailNotificationSchema": { "type": "object", "properties": { - "id": { + "type": { "type": "string", - "format": "uuid", - "description": "Category identifier" + "enum": [ + "email" + ] }, - "name": { + "to": { + "type": "string", + "format": "email", + "description": "Recipient email address" + }, + "subject": { "type": "string", "minLength": 1, - "description": "Category name" + "description": "Email subject" }, - "slug": { + "body": { "type": "string", - "description": "Category slug used in URLs" + "description": "Email body content" } }, "required": [ - "id", - "name", - "slug" + "type", + "to", + "subject", + "body" ] }, - "ProductError": { + "ErrorResponseSchema": { "type": "object", "properties": { - "success": { - "type": "boolean", + "status": { + "type": "string", "enum": [ - false - ], - "description": "Always false for errors" + "error" + ] }, - "message": { + "error": { "type": "string", "description": "Error message" + }, + "code": { + "type": "number", + "description": "Error code" } }, "required": [ - "success", - "message" + "status", + "error", + "code" ] }, - "ProductErrorSchema": { + "EventChunk": { "type": "object", "properties": { - "success": { - "type": "boolean", + "id": { + "type": "string", + "description": "Event identifier" + }, + "product": { + "type": "string", "enum": [ - false + "catalog", + "billing", + "identity" ], - "description": "Always false for errors" + "description": "Product source" }, - "message": { + "sequence": { + "type": "integer", + "description": "Monotonic event sequence number" + }, + "status": { "type": "string", - "description": "Error message" + "enum": [ + "active", + "paused" + ], + "description": "Current stream state" + }, + "emittedAt": { + "type": "string", + "format": "date-time", + "description": "Emission timestamp" + }, + "payload": { + "type": "object", + "properties": { + "actorId": { + "type": "string", + "description": "Actor or user that caused the event" + }, + "summary": { + "type": "string", + "description": "Short event summary" + } + }, + "required": [ + "actorId", + "summary" + ], + "description": "Structured event payload" } }, "required": [ - "success", - "message" + "id", + "product", + "sequence", + "status", + "emittedAt", + "payload" ] }, - "ProductIdParams": { + "EventExportJob": { "type": "object", "properties": { "id": { "type": "string", - "description": "Unique product identifier" + "description": "Background export job identifier" + }, + "status": { + "type": "string", + "enum": [ + "queued", + "running" + ], + "description": "Export job status" + }, + "submittedAt": { + "type": "string", + "format": "date-time", + "description": "Submission timestamp" } }, "required": [ - "id" + "id", + "status", + "submittedAt" ] }, - "ProductQueryParams": { + "EventIdParams": { "type": "object", "properties": { - "include_variants": { - "type": "boolean", - "description": "Whether to include product variants" - }, - "currency": { + "id": { "type": "string", - "enum": [ - "USD", - "EUR", - "PLN" - ], - "default": "USD", - "description": "Currency for prices" + "description": "Event identifier" } }, "required": [ - "currency" + "id" ] }, - "ProductResponseSchema": { + "EventSearchRequest": { "type": "object", "properties": { - "id": { - "type": "string", - "format": "uuid", - "description": "Unique product identifier" - }, - "name": { - "type": "string", - "minLength": 3, - "description": "Product name" - }, - "description": { + "product": { "type": "string", - "description": "Product description" - }, - "price": { - "type": "number", - "exclusiveMinimum": 0, - "description": "Base product price" + "enum": [ + "catalog", + "billing", + "identity" + ], + "description": "Product event source" }, - "image_url": { - "type": "string", - "format": "uri", - "description": "URL to main product image" + "includeArchived": { + "type": "boolean", + "default": false, + "description": "Include archived events in search results" }, - "gallery": { + "statuses": { "type": "array", "items": { "type": "string", - "format": "uri" - }, - "description": "Product image gallery" - }, - "categories": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProductCategory" + "enum": [ + "active", + "paused" + ] }, - "description": "Product categories" + "minItems": 1, + "description": "Statuses that should be returned" }, - "variants": { + "query": { + "type": "string", + "minLength": 2, + "description": "Free-text search term" + } + }, + "required": [ + "includeArchived", + "query" + ] + }, + "EventSearchResponse": { + "type": "object", + "properties": { + "data": { "type": "array", "items": { - "$ref": "#/components/schemas/ProductVariant" + "$ref": "#/components/schemas/EventChunk" }, - "description": "Product variants" + "description": "Matching events" }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Product creation date" + "nextCursor": { + "type": [ + "string", + "null" + ], + "description": "Cursor for the next page of results" }, - "updated_at": { + "total": { + "type": "integer", + "minimum": 0, + "description": "Total matching events" + } + }, + "required": [ + "data", + "nextCursor", + "total" + ] + }, + "EventStreamQuery": { + "type": "object", + "properties": { + "cursor": { "type": "string", - "format": "date-time", - "description": "Product last update date" + "description": "Opaque cursor for the next event window" }, - "status": { + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "description": "Maximum events to stream" + }, + "product": { "type": "string", "enum": [ - "draft", - "published", - "archived" + "catalog", + "billing", + "identity" ], - "description": "Product status" + "description": "Product event source" }, - "average_rating": { - "type": "number", - "minimum": 0, - "maximum": 5, - "description": "Average product rating" + "status": { + "type": "string", + "enum": [ + "active", + "paused" + ], + "description": "Filter by stream status" + } + } + }, + "ExportIdParams": {}, + "ExportIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" } }, "required": [ - "id", - "name", - "price", - "gallery", - "categories", - "created_at", - "updated_at", - "status" + "id" ] }, - "ProductVariant": { + "ExportListQuerySchema": { "type": "object", "properties": { - "id": { + "page": { "type": "string", - "format": "uuid", - "description": "Variant identifier" + "pattern": "^\\d+$" }, - "name": { + "limit": { "type": "string", - "minLength": 1, - "description": "Variant name" + "pattern": "^\\d+$" }, - "sku": { + "search": { "type": "string", - "description": "Variant SKU code" + "maxLength": 120 }, - "price": { - "type": "number", - "exclusiveMinimum": 0, - "description": "Variant price" + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ExportListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExportSchema" + } }, - "stock": { + "total": { "type": "integer", - "minimum": 0, - "description": "Stock quantity" + "minimum": 0 }, - "attributes": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "type": "string" - }, - "description": "Variant attributes (color, size, etc.)" + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 } }, "required": [ - "id", - "name", - "sku", - "price", - "stock", - "attributes" + "items", + "total", + "page", + "limit" ] }, - "PushNotificationSchema": { + "ExportSchema": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "push" - ] + "format": "uuid" }, - "deviceId": { + "name": { "type": "string", - "description": "Device identifier for push notification" + "minLength": 1, + "maxLength": 120 }, - "title": { + "description": { "type": "string", - "description": "Notification title" + "maxLength": 500 }, - "body": { + "active": { + "type": "boolean" + }, + "createdAt": { "type": "string", - "description": "Notification body" + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" } }, "required": [ - "type", - "deviceId", - "title", - "body" + "id", + "name", + "active" ] }, - "SessionCookies": { + "ExtendedSchema": { "type": "object", "properties": { - "session": { + "id": { "type": "string", - "minLength": 1, - "description": "Opaque server-side session identifier" + "format": "uuid", + "description": "Identifier" }, - "locale": { + "name": { "type": "string", - "enum": [ - "en", - "de", - "pl" - ], - "description": "User's preferred locale" + "description": "Name" } }, "required": [ - "session" + "id", + "name" ] }, - "SessionRequestHeaders": { + "IdempotencyKey": { + "type": "string", + "format": "nanoid" + }, + "InvoiceIdParams": {}, + "InvoiceIdParamsSchema": { "type": "object", "properties": { - "X-Api-Key": { - "type": "string", - "minLength": 16, - "description": "API key issued to the caller" - }, - "X-Request-Id": { - "type": "string", - "format": "uuid", - "description": "Client-supplied request id for tracing" - }, - "Authorization": { + "id": { "type": "string", - "format": "jwt", - "description": "Bearer JWT granting access to the session" + "format": "uuid" } }, "required": [ - "X-Api-Key", - "Authorization" + "id" ] }, - "SessionResponse": { + "InvoiceListQuerySchema": { "type": "object", "properties": { - "id": { + "page": { "type": "string", - "format": "ulid", - "description": "Session identifier (ULID)" + "pattern": "^\\d+$" }, - "token": { + "limit": { "type": "string", - "format": "jwt", - "description": "Signed session JWT" + "pattern": "^\\d+$" }, - "refreshToken": { + "search": { "type": "string", - "format": "byte", - "description": "Opaque refresh token (base64 encoded)" - }, - "user": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "description": "User id" - }, - "phone": { - "type": "string", - "format": "e164", - "description": "Contact phone number in E.164 format" - }, - "avatar": { - "type": "string", - "format": "emoji", - "description": "User-chosen emoji avatar" - } - }, - "required": [ - "id" - ] + "maxLength": 120 }, - "ipAddress": { + "active": { "type": "string", - "format": "ipv4", - "description": "Remote IPv4 address of the client" + "enum": [ + "true", + "false" + ] + } + } + }, + "InvoiceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InvoiceSchema" + } }, - "network": { - "type": "string", - "format": "cidrv4", - "description": "CIDR range the client is part of" + "total": { + "type": "integer", + "minimum": 0 }, - "createdAt": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Session creation timestamp" + "page": { + "type": "integer", + "exclusiveMinimum": 0 }, - "expiresAt": { - "type": "string", - "format": "date-time", - "description": "Session expiry timestamp" + "limit": { + "type": "integer", + "exclusiveMinimum": 0 } }, "required": [ - "id", - "token", - "refreshToken", - "user", - "ipAddress", - "createdAt", - "expiresAt" + "items", + "total", + "page", + "limit" ] }, - "SmsNotificationSchema": { + "InvoiceSchema": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "sms" - ] + "format": "uuid" }, - "phoneNumber": { + "name": { "type": "string", - "description": "Phone number with country code (e.g., +1234567890)" + "minLength": 1, + "maxLength": 120 }, - "message": { + "description": { "type": "string", - "maxLength": 160, - "description": "SMS message (max 160 characters)" - } - }, - "required": [ - "type", - "phoneNumber", - "message" - ] - }, - "StringOrNumberSchema": { - "oneOf": [ - { - "type": "string" + "maxLength": 500 }, - { - "type": "number" - } - ] - }, - "SubscriptionResponse": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "ulid", - "description": "Subscription identifier" + "active": { + "type": "boolean" }, - "callbackUrl": { + "createdAt": { "type": "string", - "format": "uri", - "description": "Registered callback URL" + "format": "date-time" }, - "createdAt": { + "updatedAt": { "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Subscription creation time" + "format": "date-time" } }, "required": [ "id", - "callbackUrl", - "createdAt" + "name", + "active" ] }, - "SuccessResponseSchema": { - "type": "object", - "properties": { - "status": { + "LegacyEventCsv": { + "type": "string", + "description": "Legacy CSV export payload" + }, + "LoadingStateSchema": { + "oneOf": [ + { "type": "string", "enum": [ - "success" + "loading" ] }, - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier" - }, - "message": { - "type": "string", - "description": "Success message" - } - }, - "required": [ - "id", - "message" + { + "type": "string", + "enum": [ + "error" ] + }, + { + "$ref": "#/components/schemas/UserDataSchema" } - }, - "required": [ - "status", - "data" ] }, - "UpdateOrderStatusBody": { + "MemberIdParams": {}, + "MemberIdParamsSchema": { "type": "object", "properties": { - "status": { - "allOf": [ - { - "$ref": "#/components/schemas/OrderStatusSchema" - } - ], - "description": "New order status" - }, - "notes": { + "id": { "type": "string", - "description": "Additional notes about the status change" + "format": "uuid" } }, "required": [ - "status" + "id" ] }, - "UpdateProductSchema": { + "MemberListQuerySchema": { "type": "object", "properties": { - "name": { + "page": { "type": "string", - "minLength": 3, - "description": "Product name" + "pattern": "^\\d+$" }, - "description": { + "limit": { "type": "string", - "description": "Product description" - }, - "price": { - "type": "number", - "exclusiveMinimum": 0, - "description": "Base product price" + "pattern": "^\\d+$" }, - "image_url": { + "search": { "type": "string", - "format": "uri", - "description": "URL to main product image" - }, - "gallery": { - "type": "array", - "items": { - "type": "string", - "format": "uri" - }, - "description": "Product image gallery" - }, - "category_ids": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Product category identifiers" + "maxLength": 120 }, - "status": { + "active": { "type": "string", "enum": [ - "draft", - "published", - "archived" - ], - "description": "Product status" + "true", + "false" + ] } } }, - "UpdateUserBody": { + "MemberListResponse": { "type": "object", "properties": { - "name": { - "type": "string", - "minLength": 2, - "maxLength": 100, - "description": "User's full name" - }, - "email": { - "type": "string", - "format": "email", - "description": "User's email address" - }, - "phone": { - "type": "string", - "pattern": "^\\+\\d{1,3} \\d{3} \\d{3} \\d{3}$", - "description": "Phone number (format: +XX XXX XXX XXX)" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MemberSchema" + } }, - "preferences": { - "type": "object", - "properties": { - "language": { - "type": "string", - "enum": [ - "pl", - "en", - "de" - ], - "description": "Preferred language" - }, - "theme": { - "type": "string", - "enum": [ - "light", - "dark", - "system" - ], - "description": "Preferred theme" - }, - "notifications": { - "type": "boolean", - "description": "Whether notifications are enabled" - } - }, - "description": "User preferences" - } - } - }, - "UploadFormDataSchema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "description": "Image file (PNG/JPG, max 5MB)", - "contentMediaType": "application/octet-stream" + "total": { + "type": "integer", + "minimum": 0 }, - "description": { - "type": "string", - "description": "Optional file description" + "page": { + "type": "integer", + "exclusiveMinimum": 0 }, - "category": { - "type": "string", - "minLength": 1, - "description": "File category (required)" + "limit": { + "type": "integer", + "exclusiveMinimum": 0 } }, "required": [ - "file", - "category" + "items", + "total", + "page", + "limit" ] }, - "UploadResponseSchema": { + "MemberSchema": { "type": "object", "properties": { "id": { "type": "string", - "description": "Upload ID" - }, - "filename": { - "type": "string", - "description": "Original filename" - }, - "size": { - "type": "number", - "description": "File size in bytes" + "format": "uuid" }, - "type": { + "name": { "type": "string", - "description": "MIME type" + "minLength": 1, + "maxLength": 120 }, - "url": { + "description": { "type": "string", - "format": "uri", - "description": "File access URL" + "maxLength": 500 }, - "category": { - "type": "string", - "description": "File category" + "active": { + "type": "boolean" }, - "description": { + "createdAt": { "type": "string", - "description": "File description" + "format": "date-time" }, - "uploadedAt": { + "updatedAt": { "type": "string", - "format": "date-time", - "description": "Upload timestamp" + "format": "date-time" } }, "required": [ "id", - "filename", - "size", - "type", - "url", - "category", - "uploadedAt" + "name", + "active" ] }, - "UserBaseSchema": { + "MetricKey": { + "type": "string", + "enum": [ + "requests_per_second", + "errors_per_second", + "latency_p95_ms", + "latency_p99_ms" + ] + }, + "MetricPoint": { + "type": "array", + "prefixItems": [ + { + "type": "integer", + "description": "Unix epoch milliseconds" + }, + { + "type": "number", + "description": "Metric value" + } + ], + "items": false, + "minItems": 2, + "maxItems": 2 + }, + "MetricQueryBody": { + "allOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/BaseFilter" + }, + { + "$ref": "#/components/schemas/WindowFilter" + } + ] + }, + { + "type": "object", + "properties": { + "metrics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetricKey" + }, + "minItems": 1, + "description": "Metrics to aggregate" + }, + "tagFilters": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + }, + "description": "Free-form tag filters" + } + }, + "required": [ + "metrics" + ] + } + ] + }, + "MetricQueryResponse": { "type": "object", "properties": { - "id": { - "type": "string", - "format": "uuid", - "description": "Unique user identifier" - }, - "email": { - "type": "string", - "format": "email", - "description": "User's email address" + "series": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetricPoint" + } + }, + "propertyNames": { + "$ref": "#/components/schemas/MetricKey" + }, + "description": "Per-metric time series" }, - "name": { - "type": "string", - "minLength": 2, - "maxLength": 100, - "description": "User's full name" + "samples": { + "type": "array", + "items": { + "type": "string", + "format": "ulid" + }, + "uniqueItems": true, + "description": "Deduplicated set of sample ids contributing to the result" }, - "role": { - "type": "string", - "enum": [ - "user", - "admin", - "moderator" - ], - "description": "User's role in the system" + "cardinality": { + "type": "object", + "additionalProperties": { + "type": "integer", + "minimum": 0 + }, + "propertyNames": { + "type": "string" + }, + "description": "Cardinality per tag" } }, "required": [ - "id", - "email", - "name", - "role" + "series", + "samples", + "cardinality" ] }, - "UserDataSchema": { + "MetricSummaryPatch": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "User ID" + "owner": { + "type": "object", + "properties": { + "team": { + "type": "string" + }, + "contactEmail": { + "type": "string", + "format": "email" + } + } }, - "name": { - "type": "string", - "description": "User name" + "windows": { + "type": "object", + "properties": { + "default": { + "type": "string", + "format": "date-time" + }, + "retention": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "MixedArraySchema": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "NestedSchema": { + "type": "object", + "properties": { + "foo": { + "$ref": "#/components/schemas/BaseSchema" }, - "email": { - "type": "string", - "format": "email", - "description": "User email" + "bar": { + "type": "string" } }, "required": [ - "id", - "name", - "email" + "foo", + "bar" ] }, - "UserDetailedSchema": { + "NotificationIdParams": {}, + "NotificationIdParamsSchema": { "type": "object", "properties": { "id": { "type": "string", - "format": "uuid", - "description": "Unique user identifier" - }, - "email": { - "type": "string", - "format": "email", - "description": "User's email address" - }, - "name": { + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "NotificationListQuerySchema": { + "type": "object", + "properties": { + "page": { "type": "string", - "minLength": 2, - "maxLength": 100, - "description": "User's full name" + "pattern": "^\\d+$" }, - "role": { + "limit": { "type": "string", - "enum": [ - "user", - "admin", - "moderator" - ], - "description": "User's role in the system" + "pattern": "^\\d+$" }, - "phone": { + "search": { "type": "string", - "pattern": "^\\+48 \\d{3} \\d{3} \\d{3}$", - "description": "Phone number (format: +48 XXX XXX XXX)" + "maxLength": 120 }, - "birthDate": { + "active": { "type": "string", - "format": "date-time", - "description": "Date of birth" - }, - "addresses": { + "enum": [ + "true", + "false" + ] + } + } + }, + "NotificationListResponse": { + "type": "object", + "properties": { + "items": { "type": "array", "items": { - "$ref": "#/components/schemas/Address" - }, - "description": "List of user addresses" + "$ref": "#/components/schemas/NotificationSchema" + } }, - "primaryAddress": { + "total": { "type": "integer", - "minimum": 0, - "description": "Index of primary address" + "minimum": 0 }, - "preferences": { - "type": "object", - "properties": { - "language": { - "type": "string", - "enum": [ - "pl", - "en", - "de" - ], - "default": "en", - "description": "Preferred language" - }, - "theme": { - "type": "string", - "enum": [ - "light", - "dark", - "system" - ], - "default": "system", - "description": "Preferred theme" - }, - "notifications": { - "type": "boolean", - "default": true, - "description": "Whether notifications are enabled" - } - }, - "required": [ - "language", - "theme", - "notifications" - ], - "description": "User preferences" + "page": { + "type": "integer", + "exclusiveMinimum": 0 }, - "paymentMethods": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PaymentMethodSchema" - }, - "description": "Saved payment methods" + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "NotificationSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" }, "createdAt": { "type": "string", - "format": "date-time", - "description": "Account creation date" + "format": "date-time" }, "updatedAt": { "type": "string", - "format": "date-time", - "description": "Last update date" + "format": "date-time" } }, "required": [ "id", - "email", "name", - "role", - "createdAt", - "updatedAt" + "active" ] }, - "UserFieldsQuery": { - "type": "object", - "properties": { - "fields": { - "type": "string", - "description": "Comma-separated list of fields to include" - } - } + "NotificationTypeEnumSchema": { + "type": "string", + "enum": [ + "email", + "sms", + "push" + ] }, - "UserId": { + "NotificationTypeSchema": { "type": "string", - "format": "uuid" + "enum": [ + "email", + "sms", + "push" + ] }, - "UserIdParams": { + "OptionalMessageAlternativeSchema": { + "type": [ + "string", + "null" + ] + }, + "OptionalMessageSchema": { + "type": [ + "string", + "null" + ] + }, + "OrderIdParams": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", - "description": "User ID" + "description": "Order ID" } }, "required": [ "id" ] }, - "UserListParamsSchema": { + "OrderIdParamsSchema": { "type": "object", "properties": { - "pagination": { - "$ref": "#/components/schemas/PaginationSchema" - }, - "filter": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - }, - "required": [ - "name" - ] + "id": { + "type": "string", + "format": "uuid" } }, "required": [ - "pagination" + "id" ] }, - "UserProfileSchema": { + "OrderListQuerySchema": { "type": "object", "properties": { - "id": { + "page": { "type": "string", - "description": "ID" + "pattern": "^\\d+$" }, - "username": { + "limit": { "type": "string", - "description": "Username" + "pattern": "^\\d+$" }, - "firstName": { - "type": [ - "string", - "null" - ], - "description": "First name" + "search": { + "type": "string", + "maxLength": 120 }, - "middleName": { - "type": [ - "string", - "null" - ], - "description": "Middle name" + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "OrderListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrderSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 } }, "required": [ - "id", - "firstName" + "items", + "total", + "page", + "limit" ] }, - "WebhookEnvelopeSchema": { + "OrderSchema": { "type": "object", "properties": { "id": { "type": "string", - "format": "ulid", - "readOnly": true, - "description": "Unique event identifier" + "format": "uuid" }, - "idempotencyKey": { - "allOf": [ - { - "$ref": "#/components/schemas/IdempotencyKey" - } - ], - "description": "Unique key de-duplicating retried deliveries" + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 }, - "deliveredAt": { + "description": { "type": "string", - "format": "date-time", - "description": "Delivery timestamp (ISO string coerced to Date)" + "maxLength": 500 }, - "apiVersion": { + "active": { + "type": "boolean" + }, + "createdAt": { "type": "string", - "enum": [ - "2026-04-01" - ], - "description": "API version the payload is serialized against" + "format": "date-time" }, - "metadata": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "type": "string" - }, - "description": "Free-form key/value metadata" + "updatedAt": { + "type": "string", + "format": "date-time" } }, "required": [ "id", - "idempotencyKey", - "deliveredAt", - "apiVersion" + "name", + "active" ] }, - "WindowFilter": { + "OrdersQueryParams": { "type": "object", "properties": { - "since": { + "page": { + "type": "integer", + "exclusiveMinimum": 0, + "default": 1, + "description": "Page number" + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0, + "maximum": 100, + "default": 20, + "description": "Results per page" + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/OrderStatusSchema" + } + ], + "description": "Filter by status" + }, + "dateFrom": { "type": "string", "format": "date-time", - "description": "Inclusive window start" + "description": "Filter orders from date" }, - "until": { + "dateTo": { "type": "string", "format": "date-time", - "description": "Exclusive window end" - } - }, - "required": [ - "since", - "until" - ] - } - }, - "responses": { + "description": "Filter orders to date" + }, + "sort": { + "type": "string", + "enum": [ + "date_asc", + "date_desc", + "total_asc", + "total_desc" + ], + "default": "date_desc", + "description": "Sort results" + } + } + }, + "OrdersResponse": { + "type": "object", + "properties": { + "orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrderSchema" + }, + "description": "List of orders" + }, + "pagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "minimum": 0, + "description": "Total number of orders" + }, + "pages": { + "type": "integer", + "exclusiveMinimum": 0, + "description": "Total number of pages" + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0, + "description": "Current page" + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0, + "description": "Results per page" + } + }, + "required": [ + "total", + "pages", + "page", + "limit" + ], + "description": "Pagination information" + } + }, + "required": [ + "orders", + "pagination" + ] + }, + "OrderStatusSchema": { + "type": "string", + "enum": [ + "pending", + "payment_processing", + "paid", + "preparing", + "shipped", + "delivered", + "cancelled", + "refunded" + ], + "description": "Order status" + }, + "OrganizationIdParams": {}, + "OrganizationIdParamsSchema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "organizationId" + ] + }, + "OrganizationListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "OrganizationListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrganizationSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "organizationParamsSchema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "organizationId" + ] + }, + "OrganizationSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "PaginatedUsersSchema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserDetailedSchema" + }, + "description": "Array of items" + }, + "pagination": { + "allOf": [ + { + "$ref": "#/components/schemas/PaginationMeta" + } + ], + "description": "Pagination metadata" + } + }, + "required": [ + "data", + "pagination" + ] + }, + "PaginationMeta": { + "type": "object", + "properties": { + "nextCursor": { + "type": [ + "string", + "null" + ], + "description": "Cursor for the next page" + }, + "hasMore": { + "type": "boolean", + "description": "Whether there are more items after this page" + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0, + "description": "Number of items in this page" + }, + "total": { + "type": "integer", + "minimum": 0, + "description": "Total count of items" + } + }, + "required": [ + "nextCursor", + "hasMore", + "limit" + ] + }, + "PaginationSchema": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "minimum": 1 + }, + "limit": { + "type": "integer", + "minimum": 1 + } + }, + "required": [ + "page", + "limit" + ] + }, + "PaymentCoreSchema": { + "type": "object", + "properties": { + "paymentId": { + "type": "string", + "format": "ulid", + "description": "Payment identifier" + }, + "userId": { + "allOf": [ + { + "$ref": "#/components/schemas/UserId" + } + ], + "description": "User the payment belongs to" + }, + "amountMinor": { + "type": "integer", + "exclusiveMinimum": 0, + "multipleOf": 1, + "description": "Amount in the smallest currency unit" + }, + "currency": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "pattern": "^[A-Z]{3}$", + "description": "ISO-4217 currency code" + } + }, + "required": [ + "paymentId", + "userId", + "amountMinor", + "currency" + ] + }, + "PaymentEvent": { + "type": "object", + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/PaymentSucceededEvent" + }, + { + "$ref": "#/components/schemas/PaymentFailedEvent" + }, + { + "$ref": "#/components/schemas/PaymentRefundedEvent" + } + ] + }, + "PaymentFailedEvent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "readOnly": true, + "description": "Unique event identifier" + }, + "idempotencyKey": { + "allOf": [ + { + "$ref": "#/components/schemas/IdempotencyKey" + } + ], + "description": "Unique key de-duplicating retried deliveries" + }, + "deliveredAt": { + "type": "string", + "format": "date-time", + "description": "Delivery timestamp (ISO string coerced to Date)" + }, + "apiVersion": { + "type": "string", + "enum": [ + "2026-04-01" + ], + "description": "API version the payload is serialized against" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + }, + "description": "Free-form key/value metadata" + }, + "type": { + "type": "string", + "enum": [ + "payment.failed" + ] + }, + "failureCode": { + "type": "string", + "enum": [ + "card_declined", + "expired_card", + "insufficient_funds", + "unknown" + ], + "description": "Reason the payment failed" + }, + "retriable": { + "type": "boolean", + "description": "Whether a retry is likely to succeed" + } + }, + "required": [ + "id", + "idempotencyKey", + "deliveredAt", + "apiVersion", + "type", + "failureCode", + "retriable" + ] + }, + "PaymentIdParams": {}, + "PaymentIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "PaymentListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "PaymentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PaymentSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "PaymentMethodSchema": { + "type": "object", + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/CreditCardPaymentSchema" + }, + { + "$ref": "#/components/schemas/PayPalPaymentSchema" + }, + { + "$ref": "#/components/schemas/BankTransferPaymentSchema" + } + ] + }, + "PaymentRefundedEvent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "readOnly": true, + "description": "Unique event identifier" + }, + "idempotencyKey": { + "allOf": [ + { + "$ref": "#/components/schemas/IdempotencyKey" + } + ], + "description": "Unique key de-duplicating retried deliveries" + }, + "deliveredAt": { + "type": "string", + "format": "date-time", + "description": "Delivery timestamp (ISO string coerced to Date)" + }, + "apiVersion": { + "type": "string", + "enum": [ + "2026-04-01" + ], + "description": "API version the payload is serialized against" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + }, + "description": "Free-form key/value metadata" + }, + "type": { + "type": "string", + "enum": [ + "payment.refunded" + ] + }, + "refundedAmountMinor": { + "type": "integer", + "minimum": 0, + "description": "Refund amount in the smallest currency unit" + } + }, + "required": [ + "id", + "idempotencyKey", + "deliveredAt", + "apiVersion", + "type", + "refundedAmountMinor" + ] + }, + "PaymentSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "PaymentSucceededEvent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "readOnly": true, + "description": "Unique event identifier" + }, + "idempotencyKey": { + "allOf": [ + { + "$ref": "#/components/schemas/IdempotencyKey" + } + ], + "description": "Unique key de-duplicating retried deliveries" + }, + "deliveredAt": { + "type": "string", + "format": "date-time", + "description": "Delivery timestamp (ISO string coerced to Date)" + }, + "apiVersion": { + "type": "string", + "enum": [ + "2026-04-01" + ], + "description": "API version the payload is serialized against" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + }, + "description": "Free-form key/value metadata" + }, + "type": { + "type": "string", + "enum": [ + "payment.succeeded" + ] + }, + "receiptUrl": { + "type": "string", + "format": "uri", + "description": "Hosted receipt accessible to the customer" + } + }, + "required": [ + "id", + "idempotencyKey", + "deliveredAt", + "apiVersion", + "type", + "receiptUrl" + ] + }, + "PayPalPaymentSchema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "paypal" + ] + }, + "email": { + "type": "string", + "format": "email", + "description": "PayPal account email" + } + }, + "required": [ + "type", + "email" + ] + }, + "PermissionSchema": { + "type": "string", + "enum": [ + "read", + "write", + "admin" + ] + }, + "ProcessingStatusSchema": { + "type": "string", + "enum": [ + "pending", + "processing", + "completed", + "failed" + ] + }, + "ProductCategory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Category identifier" + }, + "name": { + "type": "string", + "minLength": 1, + "description": "Category name" + }, + "slug": { + "type": "string", + "description": "Category slug used in URLs" + } + }, + "required": [ + "id", + "name", + "slug" + ] + }, + "ProductError": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + false + ], + "description": "Always false for errors" + }, + "message": { + "type": "string", + "description": "Error message" + } + }, + "required": [ + "success", + "message" + ] + }, + "ProductErrorSchema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + false + ], + "description": "Always false for errors" + }, + "message": { + "type": "string", + "description": "Error message" + } + }, + "required": [ + "success", + "message" + ] + }, + "ProductIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique product identifier" + } + }, + "required": [ + "id" + ] + }, + "ProductIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "ProductListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ProductListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ProductQueryParams": { + "type": "object", + "properties": { + "include_variants": { + "type": "boolean", + "description": "Whether to include product variants" + }, + "currency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "PLN" + ], + "default": "USD", + "description": "Currency for prices" + } + }, + "required": [ + "currency" + ] + }, + "ProductResponseSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Unique product identifier" + }, + "name": { + "type": "string", + "minLength": 3, + "description": "Product name" + }, + "description": { + "type": "string", + "description": "Product description" + }, + "price": { + "type": "number", + "exclusiveMinimum": 0, + "description": "Base product price" + }, + "image_url": { + "type": "string", + "format": "uri", + "description": "URL to main product image" + }, + "gallery": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "description": "Product image gallery" + }, + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductCategory" + }, + "description": "Product categories" + }, + "variants": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductVariant" + }, + "description": "Product variants" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Product creation date" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Product last update date" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "published", + "archived" + ], + "description": "Product status" + }, + "average_rating": { + "type": "number", + "minimum": 0, + "maximum": 5, + "description": "Average product rating" + } + }, + "required": [ + "id", + "name", + "price", + "gallery", + "categories", + "created_at", + "updated_at", + "status" + ] + }, + "ProductSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ProductVariant": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Variant identifier" + }, + "name": { + "type": "string", + "minLength": 1, + "description": "Variant name" + }, + "sku": { + "type": "string", + "description": "Variant SKU code" + }, + "price": { + "type": "number", + "exclusiveMinimum": 0, + "description": "Variant price" + }, + "stock": { + "type": "integer", + "minimum": 0, + "description": "Stock quantity" + }, + "attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + }, + "description": "Variant attributes (color, size, etc.)" + } + }, + "required": [ + "id", + "name", + "sku", + "price", + "stock", + "attributes" + ] + }, + "ProjectCollectionPathParams": {}, + "ProjectCollectionPathParamsSchema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "organizationId" + ] + }, + "ProjectIdParams": {}, + "ProjectIdParamsSchema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "organizationId", + "projectId" + ] + }, + "ProjectListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ProjectListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ProjectSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "PushNotificationSchema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "push" + ] + }, + "deviceId": { + "type": "string", + "description": "Device identifier for push notification" + }, + "title": { + "type": "string", + "description": "Notification title" + }, + "body": { + "type": "string", + "description": "Notification body" + } + }, + "required": [ + "type", + "deviceId", + "title", + "body" + ] + }, + "RefundIdParams": {}, + "RefundIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "RefundListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "RefundListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RefundSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "RefundSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ReportIdParams": {}, + "ReportIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "ReportListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ReportListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ReportSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "SessionCookies": { + "type": "object", + "properties": { + "session": { + "type": "string", + "minLength": 1, + "description": "Opaque server-side session identifier" + }, + "locale": { + "type": "string", + "enum": [ + "en", + "de", + "pl" + ], + "description": "User's preferred locale" + } + }, + "required": [ + "session" + ] + }, + "SessionIdParams": {}, + "SessionIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "SessionListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "SessionListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SessionSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "SessionRequestHeaders": { + "type": "object", + "properties": { + "X-Api-Key": { + "type": "string", + "minLength": 16, + "description": "API key issued to the caller" + }, + "X-Request-Id": { + "type": "string", + "format": "uuid", + "description": "Client-supplied request id for tracing" + }, + "Authorization": { + "type": "string", + "format": "jwt", + "description": "Bearer JWT granting access to the session" + } + }, + "required": [ + "X-Api-Key", + "Authorization" + ] + }, + "SessionResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "Session identifier (ULID)" + }, + "token": { + "type": "string", + "format": "jwt", + "description": "Signed session JWT" + }, + "refreshToken": { + "type": "string", + "format": "byte", + "description": "Opaque refresh token (base64 encoded)" + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "User id" + }, + "phone": { + "type": "string", + "format": "e164", + "description": "Contact phone number in E.164 format" + }, + "avatar": { + "type": "string", + "format": "emoji", + "description": "User-chosen emoji avatar" + } + }, + "required": [ + "id" + ] + }, + "ipAddress": { + "type": "string", + "format": "ipv4", + "description": "Remote IPv4 address of the client" + }, + "network": { + "type": "string", + "format": "cidrv4", + "description": "CIDR range the client is part of" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Session creation timestamp" + }, + "expiresAt": { + "type": "string", + "format": "date-time", + "description": "Session expiry timestamp" + } + }, + "required": [ + "id", + "token", + "refreshToken", + "user", + "ipAddress", + "createdAt", + "expiresAt" + ] + }, + "SessionSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "SmsNotificationSchema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "sms" + ] + }, + "phoneNumber": { + "type": "string", + "description": "Phone number with country code (e.g., +1234567890)" + }, + "message": { + "type": "string", + "maxLength": 160, + "description": "SMS message (max 160 characters)" + } + }, + "required": [ + "type", + "phoneNumber", + "message" + ] + }, + "StringOrNumberSchema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "SubscriptionIdParams": {}, + "SubscriptionIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "SubscriptionListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "SubscriptionListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SubscriptionSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "SubscriptionResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "Subscription identifier" + }, + "callbackUrl": { + "type": "string", + "format": "uri", + "description": "Registered callback URL" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Subscription creation time" + } + }, + "required": [ + "id", + "callbackUrl", + "createdAt" + ] + }, + "SubscriptionSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "SuccessResponseSchema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "success" + ] + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier" + }, + "message": { + "type": "string", + "description": "Success message" + } + }, + "required": [ + "id", + "message" + ] + } + }, + "required": [ + "status", + "data" + ] + }, + "TaskCollectionPathParams": {}, + "TaskCollectionPathParamsSchema": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "projectId" + ] + }, + "TaskIdParams": {}, + "TaskIdParamsSchema": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "projectId", + "id" + ] + }, + "TaskListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "TaskListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "TaskSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "TeamIdParams": {}, + "TeamIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "TeamListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "TeamListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TeamSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "TeamSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "UpdateApiKeySchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateAttachmentSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateAuditLogSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateCatalogItemSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateCommentSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateCustomerSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateDepartmentSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateDocumentSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateExportSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateInvoiceSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateMemberSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateNotificationSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateOrderSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateOrderStatusBody": { + "type": "object", + "properties": { + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/OrderStatusSchema" + } + ], + "description": "New order status" + }, + "notes": { + "type": "string", + "description": "Additional notes about the status change" + } + }, + "required": [ + "status" + ] + }, + "UpdateOrganizationSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdatePaymentSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateProductSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 3, + "description": "Product name" + }, + "description": { + "type": "string", + "description": "Product description" + }, + "price": { + "type": "number", + "exclusiveMinimum": 0, + "description": "Base product price" + }, + "image_url": { + "type": "string", + "format": "uri", + "description": "URL to main product image" + }, + "gallery": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "description": "Product image gallery" + }, + "category_ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Product category identifiers" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "published", + "archived" + ], + "description": "Product status" + } + } + }, + "UpdateProjectSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateRefundSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateReportSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateSessionSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateSubscriptionSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateTaskSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateTeamSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateUserBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 2, + "maxLength": 100, + "description": "User's full name" + }, + "email": { + "type": "string", + "format": "email", + "description": "User's email address" + }, + "phone": { + "type": "string", + "pattern": "^\\+\\d{1,3} \\d{3} \\d{3} \\d{3}$", + "description": "Phone number (format: +XX XXX XXX XXX)" + }, + "preferences": { + "type": "object", + "properties": { + "language": { + "type": "string", + "enum": [ + "pl", + "en", + "de" + ], + "description": "Preferred language" + }, + "theme": { + "type": "string", + "enum": [ + "light", + "dark", + "system" + ], + "description": "Preferred theme" + }, + "notifications": { + "type": "boolean", + "description": "Whether notifications are enabled" + } + }, + "description": "User preferences" + } + } + }, + "UpdateWebhookSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UpdateWorkspaceSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + } + } + }, + "UploadFormDataSchema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "description": "Image file (PNG/JPG, max 5MB)", + "contentMediaType": "application/octet-stream" + }, + "description": { + "type": "string", + "description": "Optional file description" + }, + "category": { + "type": "string", + "minLength": 1, + "description": "File category (required)" + } + }, + "required": [ + "file", + "category" + ] + }, + "UploadResponseSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Upload ID" + }, + "filename": { + "type": "string", + "description": "Original filename" + }, + "size": { + "type": "number", + "description": "File size in bytes" + }, + "type": { + "type": "string", + "description": "MIME type" + }, + "url": { + "type": "string", + "format": "uri", + "description": "File access URL" + }, + "category": { + "type": "string", + "description": "File category" + }, + "description": { + "type": "string", + "description": "File description" + }, + "uploadedAt": { + "type": "string", + "format": "date-time", + "description": "Upload timestamp" + } + }, + "required": [ + "id", + "filename", + "size", + "type", + "url", + "category", + "uploadedAt" + ] + }, + "UserBaseSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Unique user identifier" + }, + "email": { + "type": "string", + "format": "email", + "description": "User's email address" + }, + "name": { + "type": "string", + "minLength": 2, + "maxLength": 100, + "description": "User's full name" + }, + "role": { + "type": "string", + "enum": [ + "user", + "admin", + "moderator" + ], + "description": "User's role in the system" + } + }, + "required": [ + "id", + "email", + "name", + "role" + ] + }, + "UserDataSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "User ID" + }, + "name": { + "type": "string", + "description": "User name" + }, + "email": { + "type": "string", + "format": "email", + "description": "User email" + } + }, + "required": [ + "id", + "name", + "email" + ] + }, + "UserDetailedSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Unique user identifier" + }, + "email": { + "type": "string", + "format": "email", + "description": "User's email address" + }, + "name": { + "type": "string", + "minLength": 2, + "maxLength": 100, + "description": "User's full name" + }, + "role": { + "type": "string", + "enum": [ + "user", + "admin", + "moderator" + ], + "description": "User's role in the system" + }, + "phone": { + "type": "string", + "pattern": "^\\+48 \\d{3} \\d{3} \\d{3}$", + "description": "Phone number (format: +48 XXX XXX XXX)" + }, + "birthDate": { + "type": "string", + "format": "date-time", + "description": "Date of birth" + }, + "addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Address" + }, + "description": "List of user addresses" + }, + "primaryAddress": { + "type": "integer", + "minimum": 0, + "description": "Index of primary address" + }, + "preferences": { + "type": "object", + "properties": { + "language": { + "type": "string", + "enum": [ + "pl", + "en", + "de" + ], + "default": "en", + "description": "Preferred language" + }, + "theme": { + "type": "string", + "enum": [ + "light", + "dark", + "system" + ], + "default": "system", + "description": "Preferred theme" + }, + "notifications": { + "type": "boolean", + "default": true, + "description": "Whether notifications are enabled" + } + }, + "required": [ + "language", + "theme", + "notifications" + ], + "description": "User preferences" + }, + "paymentMethods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PaymentMethodSchema" + }, + "description": "Saved payment methods" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "Account creation date" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "description": "Last update date" + } + }, + "required": [ + "id", + "email", + "name", + "role", + "createdAt", + "updatedAt" + ] + }, + "UserFieldsQuery": { + "type": "object", + "properties": { + "fields": { + "type": "string", + "description": "Comma-separated list of fields to include" + } + } + }, + "UserId": { + "type": "string", + "format": "uuid" + }, + "UserIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "User ID" + } + }, + "required": [ + "id" + ] + }, + "UserListParamsSchema": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/PaginationSchema" + }, + "filter": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + }, + "required": [ + "pagination" + ] + }, + "UserProfileSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID" + }, + "username": { + "type": "string", + "description": "Username" + }, + "firstName": { + "type": [ + "string", + "null" + ], + "description": "First name" + }, + "middleName": { + "type": [ + "string", + "null" + ], + "description": "Middle name" + } + }, + "required": [ + "id", + "firstName" + ] + }, + "WebhookEnvelopeSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "readOnly": true, + "description": "Unique event identifier" + }, + "idempotencyKey": { + "allOf": [ + { + "$ref": "#/components/schemas/IdempotencyKey" + } + ], + "description": "Unique key de-duplicating retried deliveries" + }, + "deliveredAt": { + "type": "string", + "format": "date-time", + "description": "Delivery timestamp (ISO string coerced to Date)" + }, + "apiVersion": { + "type": "string", + "enum": [ + "2026-04-01" + ], + "description": "API version the payload is serialized against" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + }, + "description": "Free-form key/value metadata" + } + }, + "required": [ + "id", + "idempotencyKey", + "deliveredAt", + "apiVersion" + ] + }, + "WebhookIdParams": {}, + "WebhookIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "WebhookListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "WebhookListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebhookSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "WebhookSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "WindowFilter": { + "type": "object", + "properties": { + "since": { + "type": "string", + "format": "date-time", + "description": "Inclusive window start" + }, + "until": { + "type": "string", + "format": "date-time", + "description": "Exclusive window end" + } + }, + "required": [ + "since", + "until" + ] + }, + "WorkspaceIdParams": {}, + "WorkspaceIdParamsSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "WorkspaceListQuerySchema": { + "type": "object", + "properties": { + "page": { + "type": "string", + "pattern": "^\\d+$" + }, + "limit": { + "type": "string", + "pattern": "^\\d+$" + }, + "search": { + "type": "string", + "maxLength": 120 + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "WorkspaceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkspaceSchema" + } + }, + "total": { + "type": "integer", + "minimum": 0 + }, + "page": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "limit": { + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "WorkspaceSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "description": { + "type": "string", + "maxLength": 500 + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "responses": { "400": { "description": "Bad request", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "examples": [ - false - ] - }, - "error": { - "type": "string", - "examples": [ - "Validation error" - ] + "type": "object", + "properties": { + "success": { + "type": "boolean", + "examples": [ + false + ] + }, + "error": { + "type": "string", + "examples": [ + "Validation error" + ] + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "examples": [ + false + ] + }, + "error": { + "type": "string", + "examples": [ + "Unauthorized" + ] + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "examples": [ + false + ] + }, + "error": { + "type": "string", + "examples": [ + "Something went wrong" + ] + } + } + } + } + } + } + } + }, + "paths": { + "/analytics/metrics": { + "post": { + "operationId": "zodQueryMetrics", + "summary": "Aggregate metrics", + "description": "Aggregates time-series samples for the requested metrics and window.", + "tags": [ + "Analytics", + "Platform", + "Observability" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "servers": [ + { + "url": "https://api.example.com/v1" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetricQueryBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetricQueryResponse" + } + } + }, + "headers": { + "X-Cache-Status": { + "description": "Cache hit or miss for this aggregation", + "schema": { + "type": "string" + } + }, + "X-RateLimit-Remaining": { + "description": "Remaining requests in the current window", + "schema": { + "type": "integer" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + }, + "4XX": { + "description": "Authorization or validation error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthErrorResponse" + } + } + } + } + } + }, + "patch": { + "operationId": "zodPatchMetricSummary", + "summary": "Patch dashboard summary", + "description": "Partially updates the metrics dashboard metadata using `.deepPartial()` semantics.", + "tags": [ + "Analytics" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetricSummaryPatch" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetricQueryResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/api-keys": { + "get": { + "operationId": "zodAppScaleListApiKey", + "summary": "List api-keys", + "description": "Returns a paginated list of api-keys", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateApiKey", + "summary": "Create apikey", + "description": "Creates a new apikey", + "tags": [ + "ApiKeys" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateApiKeySchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeySchema" + } + } + } + } + } + } + }, + "/generated/api-keys/{id}": { + "get": { + "operationId": "zodAppScaleGetApiKey", + "summary": "Get apikey by ID", + "description": "Returns a single apikey by identifier", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeySchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateApiKey", + "summary": "Update apikey", + "description": "Updates an existing apikey", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateApiKeySchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeySchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteApiKey", + "summary": "Delete apikey", + "description": "Deletes a apikey by identifier", + "tags": [ + "ApiKeys" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/attachments": { + "get": { + "operationId": "zodAppScaleListAttachment", + "summary": "List attachments", + "description": "Returns a paginated list of attachments", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateAttachment", + "summary": "Create attachment", + "description": "Creates a new attachment", + "tags": [ + "Attachments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAttachmentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentSchema" + } + } + } + } + } + } + }, + "/generated/attachments/{id}": { + "get": { + "operationId": "zodAppScaleGetAttachment", + "summary": "Get attachment by ID", + "description": "Returns a single attachment by identifier", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateAttachment", + "summary": "Update attachment", + "description": "Updates an existing attachment", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAttachmentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteAttachment", + "summary": "Delete attachment", + "description": "Deletes a attachment by identifier", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/audit-logs": { + "get": { + "operationId": "zodAppScaleListAuditLog", + "summary": "List audit-logs", + "description": "Returns a paginated list of audit-logs", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateAuditLog", + "summary": "Create auditlog", + "description": "Creates a new auditlog", + "tags": [ + "AuditLogs" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAuditLogSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogSchema" + } + } + } + } + } + } + }, + "/generated/audit-logs/{id}": { + "get": { + "operationId": "zodAppScaleGetAuditLog", + "summary": "Get auditlog by ID", + "description": "Returns a single auditlog by identifier", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateAuditLog", + "summary": "Update auditlog", + "description": "Updates an existing auditlog", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAuditLogSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteAuditLog", + "summary": "Delete auditlog", + "description": "Deletes a auditlog by identifier", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/catalog-items": { + "get": { + "operationId": "zodAppScaleListCatalogItem", + "summary": "List catalog-items", + "description": "Returns a paginated list of catalog-items", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateCatalogItem", + "summary": "Create catalogitem", + "description": "Creates a new catalogitem", + "tags": [ + "Catalog" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCatalogItemSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemSchema" + } + } + } + } + } + } + }, + "/generated/catalog-items/{id}": { + "get": { + "operationId": "zodAppScaleGetCatalogItem", + "summary": "Get catalogitem by ID", + "description": "Returns a single catalogitem by identifier", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateCatalogItem", + "summary": "Update catalogitem", + "description": "Updates an existing catalogitem", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCatalogItemSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteCatalogItem", + "summary": "Delete catalogitem", + "description": "Deletes a catalogitem by identifier", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/comments": { + "get": { + "operationId": "zodAppScaleListComment", + "summary": "List comments", + "description": "Returns a paginated list of comments", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateComment", + "summary": "Create comment", + "description": "Creates a new comment", + "tags": [ + "Comments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentSchema" + } + } + } + } + } + } + }, + "/generated/comments/{id}": { + "get": { + "operationId": "zodAppScaleGetComment", + "summary": "Get comment by ID", + "description": "Returns a single comment by identifier", + "tags": [ + "Comments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateComment", + "summary": "Update comment", + "description": "Updates an existing comment", + "tags": [ + "Comments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCommentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteComment", + "summary": "Delete comment", + "description": "Deletes a comment by identifier", + "tags": [ + "Comments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/customers": { + "get": { + "operationId": "zodAppScaleListCustomer", + "summary": "List customers", + "description": "Returns a paginated list of customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateCustomer", + "summary": "Create customer", + "description": "Creates a new customer", + "tags": [ + "Customers" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCustomerSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerSchema" + } + } + } + } + } + } + }, + "/generated/customers/{id}": { + "get": { + "operationId": "zodAppScaleGetCustomer", + "summary": "Get customer by ID", + "description": "Returns a single customer by identifier", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateCustomer", + "summary": "Update customer", + "description": "Updates an existing customer", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCustomerSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteCustomer", + "summary": "Delete customer", + "description": "Deletes a customer by identifier", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/departments": { + "get": { + "operationId": "zodAppScaleListDepartment", + "summary": "List departments", + "description": "Returns a paginated list of departments", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateDepartment", + "summary": "Create department", + "description": "Creates a new department", + "tags": [ + "Departments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDepartmentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentSchema" + } + } + } + } + } + } + }, + "/generated/departments/{id}": { + "get": { + "operationId": "zodAppScaleGetDepartment", + "summary": "Get department by ID", + "description": "Returns a single department by identifier", + "tags": [ + "Departments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateDepartment", + "summary": "Update department", + "description": "Updates an existing department", + "tags": [ + "Departments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDepartmentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteDepartment", + "summary": "Delete department", + "description": "Deletes a department by identifier", + "tags": [ + "Departments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/documents": { + "get": { + "operationId": "zodAppScaleListDocument", + "summary": "List documents", + "description": "Returns a paginated list of documents", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateDocument", + "summary": "Create document", + "description": "Creates a new document", + "tags": [ + "Documents" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDocumentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentSchema" + } + } + } + } + } + } + }, + "/generated/documents/{id}": { + "get": { + "operationId": "zodAppScaleGetDocument", + "summary": "Get document by ID", + "description": "Returns a single document by identifier", + "tags": [ + "Documents" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateDocument", + "summary": "Update document", + "description": "Updates an existing document", + "tags": [ + "Documents" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDocumentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteDocument", + "summary": "Delete document", + "description": "Deletes a document by identifier", + "tags": [ + "Documents" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/events": { + "get": { + "operationId": "zodStreamPlatformEvents", + "summary": "Event stream", + "description": "Streams event records with first-class OpenAPI 3.2 querystring and sequential media metadata.", + "tags": [ + "Events", + "Platform", + "Observability" + ], + "parameters": [ + { + "in": "query", + "name": "cursor", + "required": false, + "schema": { + "type": "string", + "description": "Opaque cursor for the next event window" + }, + "description": "Opaque cursor for the next event window", + "example": "example" + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "description": "Maximum events to stream" + }, + "description": "Maximum events to stream", + "example": 1 + }, + { + "in": "query", + "name": "product", + "required": false, + "schema": { + "type": "string", + "enum": [ + "catalog", + "billing", + "identity" + ], + "description": "Product event source" + }, + "description": "Product event source", + "example": "example" + }, + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "string", + "enum": [ + "active", + "paused" + ], + "description": "Filter by stream status" + }, + "description": "Filter by stream status", + "example": "example" + }, + { + "in": "querystring", + "name": "advancedQuery", + "required": false, + "content": { + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/EventStreamQuery" + }, + "examples": { + "catalog-feed": { + "value": { + "limit": 10, + "product": "catalog", + "status": "active" + } + } + } + } + } + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "servers": [ + { + "url": "https://api.example.com/v1,", + "description": "https://staging.example.com/v1" + } + ], + "externalDocs": { + "url": "https://docs.example.com/events", + "description": "Event streaming guide" + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "text/event-stream": { + "itemSchema": { + "$ref": "#/components/schemas/EventChunk" + }, + "itemEncoding": { + "headers": { + "content-type": "application/json" + } + }, + "prefixEncoding": [ + { + "type": "text", + "text": "event: message\ndata: " + }, + { + "type": "text", + "text": "\n\n" + } + ], + "examples": { + "structured": { + "dataValue": { + "emittedAt": "2026-03-29T12:00:00.000Z", + "id": "evt_001", + "payload": { + "actorId": "user_123", + "summary": "Catalog publish completed" + }, + "product": "catalog", + "sequence": 17, + "status": "active" + } + }, + "wire": { + "serializedValue": "event: message\ndata: {\"id\":\"evt_001\",\"product\":\"catalog\",\"sequence\":17,\"status\":\"active\",\"emittedAt\":\"2026-03-29T12:00:00.000Z\",\"payload\":{\"actorId\":\"user_123\",\"summary\":\"Catalog publish completed\"}}\n\n" + }, + "external": { + "externalValue": "https://example.com/openapi/events/catalog-stream.txt" + } + } + } + }, + "headers": { + "X-Stream-Id": { + "description": "Opaque stream identifier for reconnects", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "zodSearchPlatformEvents", + "summary": "Search platform events", + "description": "Searches the retained event log and can schedule an async export job for larger result sets.", + "tags": [ + "Events" + ], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSearchRequest" + }, + "examples": { + "identity-search": { + "value": { + "includeArchived": false, + "product": "identity", + "query": "session refresh", + "statuses": [ + "active" + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSearchResponse" + } + } + } + }, + "202": { + "description": "Async export job accepted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventExportJob" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/events/{id}": { + "get": { + "operationId": "zodGetEvent", + "summary": "Get event", + "description": "Returns the full record for a previously streamed event.", + "tags": [ + "Events", + "Platform" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Event identifier" + }, + "description": "Event identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventChunk" + } + } + }, + "headers": { + "ETag": { + "description": "Strong ETag for optimistic concurrency", + "schema": { + "type": "string" + } + }, + "Cache-Control": { + "description": "Caching hint for intermediaries", + "schema": { + "type": "string" + } + } + }, + "links": { + "searchEvents": { + "operationId": "zodSearchPlatformEvents" + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/events/legacy": { + "get": { + "operationId": "zodDownloadLegacyEvents", + "summary": "Download legacy event export", + "description": "Deprecated CSV export kept to demonstrate migration guidance and versioned tags.\n\nDeprecated: Use GET /api/events with Accept: text/csv; scheduled for removal 2026-12-01.", + "tags": [ + "Events v1" + ], + "parameters": [], + "deprecated": true, + "responses": { + "200": { + "description": "Successful response", + "content": { + "text/csv": { + "schema": { + "$ref": "#/components/schemas/LegacyEventCsv" + }, + "examples": { + "csv-preview": { + "serializedValue": "id,product,status,sequence,emittedAt\nevt_001,catalog,active,17,2026-03-29T12:00:00.000Z\n" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/exports": { + "get": { + "operationId": "zodAppScaleListExport", + "summary": "List exports", + "description": "Returns a paginated list of exports", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateExport", + "summary": "Create export", + "description": "Creates a new export", + "tags": [ + "Exports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateExportSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportSchema" + } + } + } + } + } + } + }, + "/generated/exports/{id}": { + "get": { + "operationId": "zodAppScaleGetExport", + "summary": "Get export by ID", + "description": "Returns a single export by identifier", + "tags": [ + "Exports" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateExport", + "summary": "Update export", + "description": "Updates an existing export", + "tags": [ + "Exports" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateExportSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteExport", + "summary": "Delete export", + "description": "Deletes a export by identifier", + "tags": [ + "Exports" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/extended": { + "get": { + "operationId": "get-extended", + "summary": "Get nested schema example", + "description": "Retrieve nested schema data to test $ref generation", + "tags": [ + "Extended" + ], + "parameters": [], + "responses": { + "200": { + "description": "Returns nested schema with base schema reference", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NestedSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "post-extended", + "summary": "Create extended schema", + "description": "Create a new item with extended schema to test .extend() functionality", + "tags": [ + "Extended" + ], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExtendedSchema" + } + } + }, + "description": "Extended schema with base and additional properties" + }, + "responses": { + "200": { + "description": "Returns the created extended schema", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExtendedSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "put": { + "operationId": "put-extended", + "summary": "Update double extended schema", + "description": "Update with double extended schema to test deep inheritance", + "tags": [ + "Extended" + ], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DoubleExtendedSchema" + } + } + }, + "description": "Double extended schema with multiple levels of inheritance" + }, + "responses": { + "200": { + "description": "Returns the updated double extended schema", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DoubleExtendedSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/integrations/subscribe": { + "post": { + "operationId": "zodCreateSubscription", + "summary": "Create subscription", + "description": "Registers a callback URL that will receive signed payment events.", + "tags": [ + "Integrations", + "Webhooks" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "servers": [ + { + "url": "https://api.example.com/v1,", + "description": "https://api-eu.example.com/v1" + } + ], + "externalDocs": { + "url": "https://docs.example.com/integrations/webhooks", + "description": "Webhook signing guide" + }, + "callbacks": { + "paymentEvent": { + "{$request.body#/callbackUrl}": { + "$ref": "#/components/callbacks/SubscriptionEventPayload" + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSubscriptionBody" + } + } + }, + "description": "Subscription registration payload" + }, + "responses": { + "201": { + "description": "Subscription created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionResponse" + } + } + }, + "headers": { + "Location": { + "description": "URL of the created subscription", + "schema": { + "type": "string" + } + } + }, + "links": { + "getSubscription": { + "operationId": "zodGetSubscription" + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/invoices": { + "get": { + "operationId": "zodAppScaleListInvoice", + "summary": "List invoices", + "description": "Returns a paginated list of invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateInvoice", + "summary": "Create invoice", + "description": "Creates a new invoice", + "tags": [ + "Invoices" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInvoiceSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceSchema" + } + } + } + } + } + } + }, + "/generated/invoices/{id}": { + "get": { + "operationId": "zodAppScaleGetInvoice", + "summary": "Get invoice by ID", + "description": "Returns a single invoice by identifier", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateInvoice", + "summary": "Update invoice", + "description": "Updates an existing invoice", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateInvoiceSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteInvoice", + "summary": "Delete invoice", + "description": "Deletes a invoice by identifier", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/members": { + "get": { + "operationId": "zodAppScaleListMember", + "summary": "List members", + "description": "Returns a paginated list of members", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateMember", + "summary": "Create member", + "description": "Creates a new member", + "tags": [ + "Members" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMemberSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberSchema" + } + } + } + } + } + } + }, + "/generated/members/{id}": { + "get": { + "operationId": "zodAppScaleGetMember", + "summary": "Get member by ID", + "description": "Returns a single member by identifier", + "tags": [ + "Members" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateMember", + "summary": "Update member", + "description": "Updates an existing member", + "tags": [ + "Members" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMemberSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteMember", + "summary": "Delete member", + "description": "Deletes a member by identifier", + "tags": [ + "Members" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/notifications": { + "get": { + "operationId": "get-notifications", + "summary": "Get notification status", + "description": "Returns success or error response (demonstrates Zod discriminated union)", + "tags": [ + "Notifications" + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "post-notifications", + "summary": "Send a notification", + "description": "Send notification via email, SMS, or push (demonstrates Zod discriminated unions with validation)", + "tags": [ + "Notifications" + ], + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationSchema" + } + } + } + }, + "responses": { + "201": { + "description": "Notification sent successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseSchema" + } + } + } + }, + "400": { + "description": "Invalid notification data or validation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseSchema" + } + } + } + }, + "429": { + "description": "Rate limit exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseSchema" + } + } + } + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/notifications": { + "get": { + "operationId": "zodAppScaleListNotification", + "summary": "List notifications", + "description": "Returns a paginated list of notifications", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateNotification", + "summary": "Create notification", + "description": "Creates a new notification", + "tags": [ + "Notifications" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotificationSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationSchema" + } + } + } + } + } + } + }, + "/generated/notifications/{id}": { + "get": { + "operationId": "zodAppScaleGetNotification", + "summary": "Get notification by ID", + "description": "Returns a single notification by identifier", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateNotification", + "summary": "Update notification", + "description": "Updates an existing notification", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateNotificationSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteNotification", + "summary": "Delete notification", + "description": "Deletes a notification by identifier", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/orders": { + "get": { + "operationId": "getOrdersList", + "summary": "List orders", + "description": "Retrieves a paginated list of orders with filtering and sorting options", + "tags": [ + "Orders", + "Commerce" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "integer", + "exclusiveMinimum": 0, + "default": 1, + "description": "Page number" + }, + "description": "Page number", + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer", + "exclusiveMinimum": 0, + "maximum": 100, + "default": 20, + "description": "Results per page" + }, + "description": "Results per page", + "example": 1 + }, + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/OrderStatusSchema" + } + ], + "description": "Filter by status" + }, + "description": "Filter by status", + "example": "example" + }, + { + "in": "query", + "name": "dateFrom", + "required": false, + "schema": { + "type": "string", + "format": "date-time", + "description": "Filter orders from date" + }, + "description": "Filter orders from date", + "example": "example" + }, + { + "in": "query", + "name": "dateTo", + "required": false, + "schema": { + "type": "string", + "format": "date-time", + "description": "Filter orders to date" + }, + "description": "Filter orders to date", + "example": "example" + }, + { + "in": "query", + "name": "sort", + "required": false, + "schema": { + "type": "string", + "enum": [ + "date_asc", + "date_desc", + "total_asc", + "total_desc" + ], + "default": "date_desc", + "description": "Sort results" + }, + "description": "Sort results", + "example": "example" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrdersResponse" + } + } + }, + "headers": { + "X-Total-Count": { + "description": "Total orders matching the query", + "schema": { + "type": "integer" + } + }, + "Link": { + "description": "RFC 5988 pagination links", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + }, + "4XX": { + "description": "Any client error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthErrorResponse" + } + } + } + }, + "5XX": { + "description": "Any server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthErrorResponse" + } + } + } + }, + "default": { + "description": "Fallback error envelope", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthErrorResponse" + } + } + } + } + } + }, + "post": { + "operationId": "createOrder", + "summary": "Create order", + "description": "Creates a new order from cart", + "tags": [ + "Orders" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrderBody" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/orders": { + "get": { + "operationId": "zodAppScaleListOrder", + "summary": "List orders", + "description": "Returns a paginated list of orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateOrder", + "summary": "Create order", + "description": "Creates a new order", + "tags": [ + "Orders" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrderSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderSchema" + } + } + } + } + } + } + }, + "/orders/{id}": { + "get": { + "operationId": "get-orders-{id}", + "summary": "Get order by ID", + "description": "Retrieves detailed order information", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Order ID" + }, + "description": "Order ID", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "patch-orders-{id}", + "summary": "Update order status", + "description": "Updates the status of an order", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Order ID" + }, + "description": "Order ID", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderStatusBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "delete": { + "operationId": "delete-orders-{id}", + "summary": "Cancel order", + "description": "Cancels an order if it's not already delivered", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Order ID" + }, + "description": "Order ID", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/orders/{id}": { + "get": { + "operationId": "zodAppScaleGetOrder", + "summary": "Get order by ID", + "description": "Returns a single order by identifier", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Order ID" + }, + "description": "Order ID", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateOrder", + "summary": "Update order", + "description": "Updates an existing order", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Order ID" + }, + "description": "Order ID", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteOrder", + "summary": "Delete order", + "description": "Deletes a order by identifier", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "description": "Order ID" + }, + "description": "Order ID", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/organizations": { + "get": { + "operationId": "zodAppScaleListOrganization", + "summary": "List organizations", + "description": "Returns a paginated list of organizations", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateOrganization", + "summary": "Create organization", + "description": "Creates a new organization", + "tags": [ + "Organizations" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrganizationSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationSchema" + } + } + } + } + } + } + }, + "/organizations/{organizationId}": { + "get": { + "operationId": "get-organizations-{organizationId}", + "summary": "Get organization", + "description": "", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + }, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDetailedSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/organizations/{organizationId}": { + "get": { + "operationId": "zodAppScaleGetOrganization", + "summary": "Get organization by ID", + "description": "Returns a single organization by identifier", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateOrganization", + "summary": "Update organization", + "description": "Updates an existing organization", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrganizationSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteOrganization", + "summary": "Delete organization", + "description": "Deletes a organization by identifier", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/payments": { + "get": { + "operationId": "zodAppScaleListPayment", + "summary": "List payments", + "description": "Returns a paginated list of payments", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreatePayment", + "summary": "Create payment", + "description": "Creates a new payment", + "tags": [ + "Payments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePaymentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentSchema" + } + } + } + } + } + } + }, + "/generated/payments/{id}": { + "get": { + "operationId": "zodAppScaleGetPayment", + "summary": "Get payment by ID", + "description": "Returns a single payment by identifier", + "tags": [ + "Payments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdatePayment", + "summary": "Update payment", + "description": "Updates an existing payment", + "tags": [ + "Payments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePaymentSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeletePayment", + "summary": "Delete payment", + "description": "Deletes a payment by identifier", + "tags": [ + "Payments" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/private/admin": { + "get": { + "operationId": "get-private-admin", + "summary": "Admin stats – private, not documented in the public API", + "description": "", + "tags": [ + "Private" + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AdminStatsSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/products": { + "get": { + "operationId": "zodAppScaleListProduct", + "summary": "List products", + "description": "Returns a paginated list of products", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateProduct", + "summary": "Create product", + "description": "Creates a new product", + "tags": [ + "Products" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProductSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductSchema" + } + } + } + } + } + } + }, + "/products/{id}": { + "get": { + "operationId": "get-products-{id}", + "summary": "Get product", + "description": "Retrieves detailed product information by ID", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "query", + "name": "include_variants", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether to include product variants" + }, + "description": "Whether to include product variants", + "example": true + }, + { + "in": "query", + "name": "currency", + "required": true, + "schema": { + "type": "string", + "enum": [ + "USD", + "EUR", + "PLN" + ], + "default": "USD", + "description": "Currency for prices" + }, + "description": "Currency for prices", + "example": "example" + }, + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Unique product identifier" + }, + "description": "Unique product identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductResponseSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductError" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductError" + } + } + } + } + } + }, + "patch": { + "operationId": "patch-products-{id}", + "summary": "Update product", + "description": "Updates an existing product", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Unique product identifier" + }, + "description": "Unique product identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProductSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductResponseSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "delete": { + "operationId": "delete-products-{id}", + "summary": "Delete product", + "description": "Removes a product from the system", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Unique product identifier" + }, + "description": "Unique product identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/products/{id}": { + "get": { + "operationId": "zodAppScaleGetProduct", + "summary": "Get product by ID", + "description": "Returns a single product by identifier", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Unique product identifier" + }, + "description": "Unique product identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateProduct", + "summary": "Update product", + "description": "Updates an existing product", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Unique product identifier" + }, + "description": "Unique product identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProductSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteProduct", + "summary": "Delete product", + "description": "Deletes a product by identifier", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "description": "Unique product identifier" + }, + "description": "Unique product identifier", + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/organizations/{organizationId}/projects": { + "get": { + "operationId": "zodAppScaleListProject", + "summary": "List projects", + "description": "Returns a paginated list of projects", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateProject", + "summary": "Create project", + "description": "Creates a new project", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProjectSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectSchema" + } + } + } + } + } + } + }, + "/generated/organizations/{organizationId}/projects/{projectId}": { + "get": { + "operationId": "zodAppScaleGetProject", + "summary": "Get project by ID", + "description": "Returns a single project by identifier", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + }, + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateProject", + "summary": "Update project", + "description": "Updates an existing project", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + }, + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteProject", + "summary": "Delete project", + "description": "Deletes a project by identifier", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: organizationId" + }, + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/refunds": { + "get": { + "operationId": "zodAppScaleListRefund", + "summary": "List refunds", + "description": "Returns a paginated list of refunds", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateRefund", + "summary": "Create refund", + "description": "Creates a new refund", + "tags": [ + "Refunds" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRefundSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundSchema" + } + } + } + } + } + } + }, + "/generated/refunds/{id}": { + "get": { + "operationId": "zodAppScaleGetRefund", + "summary": "Get refund by ID", + "description": "Returns a single refund by identifier", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "patch": { + "operationId": "zodAppScaleUpdateRefund", + "summary": "Update refund", + "description": "Updates an existing refund", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRefundSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteRefund", + "summary": "Delete refund", + "description": "Deletes a refund by identifier", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/reports": { + "get": { + "operationId": "zodAppScaleListReport", + "summary": "List reports", + "description": "Returns a paginated list of reports", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportListResponse" } } } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { + "post": { + "operationId": "zodAppScaleCreateReport", + "summary": "Create report", + "description": "Creates a new report", + "tags": [ + "Reports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReportSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportSchema" + } + } + } + } + } + } + }, + "/generated/reports/{id}": { + "get": { + "operationId": "zodAppScaleGetReport", + "summary": "Get report by ID", + "description": "Returns a single report by identifier", + "tags": [ + "Reports" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "examples": [ - false - ] - }, - "error": { - "type": "string", - "examples": [ - "Unauthorized" - ] + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportSchema" } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" } } }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { + "patch": { + "operationId": "zodAppScaleUpdateReport", + "summary": "Update report", + "description": "Updates an existing report", + "tags": [ + "Reports" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateReportSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportSchema" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteReport", + "summary": "Delete report", + "description": "Deletes a report by identifier", + "tags": [ + "Reports" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/auth/session": { + "get": { + "operationId": "zodGetSession", + "summary": "Current session", + "description": "Returns the currently authenticated session based on the session cookie and request headers.", + "tags": [ + "Sessions", + "Auth", + "Platform" + ], + "parameters": [ + { + "in": "header", + "name": "X-Api-Key", + "required": true, + "schema": { + "type": "string", + "minLength": 16, + "description": "API key issued to the caller" + }, + "description": "API key issued to the caller", + "example": "example" + }, + { + "in": "header", + "name": "X-Request-Id", + "required": false, + "schema": { + "type": "string", + "format": "uuid", + "description": "Client-supplied request id for tracing" + }, + "description": "Client-supplied request id for tracing", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + { + "in": "header", + "name": "Authorization", + "required": true, + "schema": { + "type": "string", + "format": "jwt", + "description": "Bearer JWT granting access to the session" + }, + "description": "Bearer JWT granting access to the session", + "example": "example" + }, + { + "in": "cookie", + "name": "session", + "required": true, "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "examples": [ - false - ] - }, - "error": { - "type": "string", - "examples": [ - "Something went wrong" - ] - } - } - } - } - } - } - } - }, - "paths": { - "/analytics/metrics": { - "post": { - "operationId": "zodQueryMetrics", - "summary": "Aggregate metrics", - "description": "Aggregates time-series samples for the requested metrics and window.", - "tags": [ - "Analytics", - "Platform", - "Observability" - ], - "parameters": [], - "security": [ + "type": "string", + "minLength": 1, + "description": "Opaque server-side session identifier" + }, + "description": "Opaque server-side session identifier", + "example": "example" + }, { - "BearerAuth": [] + "in": "cookie", + "name": "locale", + "required": false, + "schema": { + "type": "string", + "enum": [ + "en", + "de", + "pl" + ], + "description": "User's preferred locale" + }, + "description": "User's preferred locale", + "example": "example" } ], - "servers": [ + "security": [ { - "url": "https://api.example.com/v1" + "BearerAuth, ApiKeyAuth": [] } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MetricQueryBody" - } - } - } - }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MetricQueryResponse" + "$ref": "#/components/schemas/SessionResponse" } } }, "headers": { - "X-Cache-Status": { - "description": "Cache hit or miss for this aggregation", + "ETag": { + "description": "Version of the session document", "schema": { "type": "string" } - }, - "X-RateLimit-Remaining": { - "description": "Remaining requests in the current window", - "schema": { - "type": "integer" - } } } }, @@ -2920,7 +11752,17 @@ "$ref": "#/components/responses/500" }, "4XX": { - "description": "Authorization or validation error", + "description": "Any authentication error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthErrorResponse" + } + } + } + }, + "default": { + "description": "Fallback error envelope", "content": { "application/json": { "schema": { @@ -2931,37 +11773,47 @@ } } }, - "patch": { - "operationId": "zodPatchMetricSummary", - "summary": "Patch dashboard summary", - "description": "Partially updates the metrics dashboard metadata using `.deepPartial()` semantics.", + "post": { + "operationId": "zodCreateSession", + "summary": "Sign in", + "description": "Exchanges credentials for a fresh session token. Exercises `@link` for follow-up navigation.", "tags": [ - "Analytics" + "Sessions", + "Auth" ], "parameters": [], - "security": [ - { - "BearerAuth": [] - } - ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MetricSummaryPatch" + "$ref": "#/components/schemas/CreateSessionBody" } } - } + }, + "description": "Credentials plus optional second factor" }, "responses": { - "200": { - "description": "Successful response", + "201": { + "description": "New session created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MetricQueryResponse" + "$ref": "#/components/schemas/SessionResponse" + } + } + }, + "headers": { + "Location": { + "description": "URL of the newly created session", + "schema": { + "type": "string" } } + }, + "links": { + "currentSession": { + "operationId": "zodGetSession" + } } }, "400": { @@ -2969,146 +11821,114 @@ }, "500": { "$ref": "#/components/responses/500" + }, + "4XX": { + "description": "Authentication failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthErrorResponse" + } + } + } + }, + "5XX": { + "description": "Upstream auth provider failure", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthErrorResponse" + } + } + } } } } }, - "/events": { + "/generated/sessions": { "get": { - "operationId": "zodStreamPlatformEvents", - "summary": "Event stream", - "description": "Streams event records with first-class OpenAPI 3.2 querystring and sequential media metadata.", + "operationId": "zodAppScaleListSession", + "summary": "List sessions", + "description": "Returns a paginated list of sessions", "tags": [ - "Events", - "Platform", - "Observability" + "Sessions" ], "parameters": [ { - "in": "querystring", - "name": "advancedQuery", + "in": "query", + "name": "page", "required": false, - "content": { - "application/x-www-form-urlencoded": { - "schema": { - "$ref": "#/components/schemas/EventStreamQuery" - }, - "examples": { - "catalog-feed": { - "value": { - "limit": 10, - "product": "catalog", - "status": "active" - } - } - } - } - } - } - ], - "security": [ + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, { - "BearerAuth": [] - } - ], - "servers": [ + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, { - "url": "https://api.example.com/v1,", - "description": "https://staging.example.com/v1" - } - ], - "externalDocs": { - "url": "https://docs.example.com/events", - "description": "Event streaming guide" - }, - "responses": { - "200": { - "description": "Successful response", - "content": { - "text/event-stream": { - "itemSchema": { - "$ref": "#/components/schemas/EventChunk" - }, - "itemEncoding": { - "headers": { - "content-type": "application/json" - } - }, - "prefixEncoding": [ - { - "type": "text", - "text": "event: message\ndata: " - }, - { - "type": "text", - "text": "\n\n" - } - ], - "examples": { - "structured": { - "dataValue": { - "emittedAt": "2026-03-29T12:00:00.000Z", - "id": "evt_001", - "payload": { - "actorId": "user_123", - "summary": "Catalog publish completed" - }, - "product": "catalog", - "sequence": 17, - "status": "active" - } - }, - "wire": { - "serializedValue": "event: message\ndata: {\"id\":\"evt_001\",\"product\":\"catalog\",\"sequence\":17,\"status\":\"active\",\"emittedAt\":\"2026-03-29T12:00:00.000Z\",\"payload\":{\"actorId\":\"user_123\",\"summary\":\"Catalog publish completed\"}}\n\n" - }, - "external": { - "externalValue": "https://example.com/openapi/events/catalog-stream.txt" - } - } - } + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] }, - "headers": { - "X-Stream-Id": { - "description": "Opaque stream identifier for reconnects", + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SessionListResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } }, "post": { - "operationId": "zodSearchPlatformEvents", - "summary": "Search platform events", - "description": "Searches the retained event log and can schedule an async export job for larger result sets.", + "operationId": "zodAppScaleCreateSession", + "summary": "Create session", + "description": "Creates a new session", "tags": [ - "Events" + "Sessions" ], "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventSearchRequest" - }, - "examples": { - "identity-search": { - "value": { - "includeArchived": false, - "product": "identity", - "query": "session refresh", - "statuses": [ - "active" - ] - } - } + "$ref": "#/components/schemas/CreateSessionSchema" } } } @@ -3119,17 +11939,46 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventSearchResponse" + "$ref": "#/components/schemas/SessionSchema" } } } - }, - "202": { - "description": "Async export job accepted", + } + } + } + }, + "/generated/sessions/{id}": { + "get": { + "operationId": "zodAppScaleGetSession", + "summary": "Get session by ID", + "description": "Returns a single session by identifier", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventExportJob" + "$ref": "#/components/schemas/SessionSchema" } } } @@ -3141,28 +11990,24 @@ "$ref": "#/components/responses/500" } } - } - }, - "/events/{id}": { - "get": { - "operationId": "zodGetEvent", - "summary": "Get event", - "description": "Returns the full record for a previously streamed event.", + }, + "patch": { + "operationId": "zodAppScaleUpdateSession", + "summary": "Update session", + "description": "Updates an existing session", "tags": [ - "Events", - "Platform" + "Sessions" ], "parameters": [ { - "in": "path", "name": "id", + "in": "path", "required": true, "schema": { - "type": "string", - "description": "Event identifier" + "type": "string" }, - "description": "Event identifier", - "example": "123" + "example": "123", + "description": "Path parameter: id" } ], "security": [ @@ -3170,96 +12015,199 @@ "BearerAuth": [] } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSessionSchema" + } + } + } + }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventChunk" - } - } - }, - "headers": { - "ETag": { - "description": "Strong ETag for optimistic concurrency", - "schema": { - "type": "string" - } - }, - "Cache-Control": { - "description": "Caching hint for intermediaries", - "schema": { - "type": "string" + "$ref": "#/components/schemas/SessionSchema" } } - }, - "links": { - "searchEvents": { - "operationId": "zodSearchPlatformEvents" - } } }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteSession", + "summary": "Delete session", + "description": "Deletes a session by identifier", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } } }, - "/events/legacy": { + "/generated/subscriptions": { "get": { - "operationId": "zodDownloadLegacyEvents", - "summary": "Download legacy event export", - "description": "Deprecated CSV export kept to demonstrate migration guidance and versioned tags.\n\nDeprecated: Use GET /api/events with Accept: text/csv; scheduled for removal 2026-12-01.", + "operationId": "zodAppScaleListSubscription", + "summary": "List subscriptions", + "description": "Returns a paginated list of subscriptions", "tags": [ - "Events v1" + "Subscriptions" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "zodAppScaleCreateSubscription", + "summary": "Create subscription", + "description": "Creates a new subscription", + "tags": [ + "Subscriptions" ], "parameters": [], - "deprecated": true, + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSubscriptionSchema" + } + } + } + }, "responses": { "200": { "description": "Successful response", "content": { - "text/csv": { + "application/json": { "schema": { - "$ref": "#/components/schemas/LegacyEventCsv" - }, - "examples": { - "csv-preview": { - "serializedValue": "id,product,status,sequence,emittedAt\nevt_001,catalog,active,17,2026-03-29T12:00:00.000Z\n" - } + "$ref": "#/components/schemas/SubscriptionSchema" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } - } - } - }, - "/extended": { - "get": { - "operationId": "get-extended", - "summary": "Get nested schema example", - "description": "Retrieve nested schema data to test $ref generation", - "tags": [ - "Extended" + } + } + }, + "/generated/subscriptions/{id}": { + "get": { + "operationId": "zodAppScaleGetSubscription", + "summary": "Get subscription by ID", + "description": "Returns a single subscription by identifier", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "responses": { "200": { - "description": "Returns nested schema with base schema reference", + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NestedSchema" + "$ref": "#/components/schemas/SubscriptionSchema" } } } @@ -3272,172 +12220,254 @@ } } }, - "post": { - "operationId": "post-extended", - "summary": "Create extended schema", - "description": "Create a new item with extended schema to test .extend() functionality", + "patch": { + "operationId": "zodAppScaleUpdateSubscription", + "summary": "Update subscription", + "description": "Updates an existing subscription", "tags": [ - "Extended" + "Subscriptions" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExtendedSchema" + "$ref": "#/components/schemas/UpdateSubscriptionSchema" } } - }, - "description": "Extended schema with base and additional properties" + } }, "responses": { "200": { - "description": "Returns the created extended schema", + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExtendedSchema" + "$ref": "#/components/schemas/SubscriptionSchema" } } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } }, - "put": { - "operationId": "put-extended", - "summary": "Update double extended schema", - "description": "Update with double extended schema to test deep inheritance", + "delete": { + "operationId": "zodAppScaleDeleteSubscription", + "summary": "Delete subscription", + "description": "Deletes a subscription by identifier", "tags": [ - "Extended" + "Subscriptions" ], - "parameters": [], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DoubleExtendedSchema" - } - } + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" }, - "description": "Double extended schema with multiple levels of inheritance" - }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/projects/{projectId}/tasks": { + "get": { + "operationId": "zodAppScaleListTask", + "summary": "List tasks", + "description": "Returns a paginated list of tasks", + "tags": [ + "Tasks" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string", + "pattern": "^\\d+$" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + }, + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" + } + ], "responses": { "200": { - "description": "Returns the updated double extended schema", + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DoubleExtendedSchema" + "$ref": "#/components/schemas/TaskListResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } - } - }, - "/integrations/subscribe": { + }, "post": { - "operationId": "zodCreateSubscription", - "summary": "Create subscription", - "description": "Registers a callback URL that will receive signed payment events.", + "operationId": "zodAppScaleCreateTask", + "summary": "Create task", + "description": "Creates a new task", "tags": [ - "Integrations", - "Webhooks" + "Tasks" ], - "parameters": [], - "security": [ + "parameters": [ { - "BearerAuth": [] + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" } ], - "servers": [ + "security": [ { - "url": "https://api.example.com/v1,", - "description": "https://api-eu.example.com/v1" + "BearerAuth": [] } ], - "externalDocs": { - "url": "https://docs.example.com/integrations/webhooks", - "description": "Webhook signing guide" - }, - "callbacks": { - "paymentEvent": { - "{$request.body#/callbackUrl}": { - "$ref": "#/components/callbacks/SubscriptionEventPayload" - } - } - }, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateSubscriptionBody" + "$ref": "#/components/schemas/CreateTaskSchema" } } - }, - "description": "Subscription registration payload" + } }, "responses": { - "201": { - "description": "Subscription created", + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SubscriptionResponse" - } - } - }, - "headers": { - "Location": { - "description": "URL of the created subscription", - "schema": { - "type": "string" + "$ref": "#/components/schemas/TaskSchema" } } - }, - "links": { - "getSubscription": { - "operationId": "zodGetSubscription" - } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/notifications": { + "/generated/projects/{projectId}/tasks/{id}": { "get": { - "operationId": "get-notifications", - "summary": "Get notification status", - "description": "Returns success or error response (demonstrates Zod discriminated union)", + "operationId": "zodAppScaleGetTask", + "summary": "Get task by ID", + "description": "Returns a single task by identifier", "tags": [ - "Notifications" + "Tasks" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" + }, + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiResponseSchema" + "$ref": "#/components/schemas/TaskSchema" } } } @@ -3450,152 +12480,160 @@ } } }, - "post": { - "operationId": "post-notifications", - "summary": "Send a notification", - "description": "Send notification via email, SMS, or push (demonstrates Zod discriminated unions with validation)", + "patch": { + "operationId": "zodAppScaleUpdateTask", + "summary": "Update task", + "description": "Updates an existing task", "tags": [ - "Notifications" + "Tasks" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: projectId" + }, + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationSchema" + "$ref": "#/components/schemas/UpdateTaskSchema" } } } }, "responses": { - "201": { - "description": "Notification sent successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseSchema" - } - } - } - }, - "400": { - "description": "Invalid notification data or validation failed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseSchema" - } - } - } - }, - "429": { - "description": "Rate limit exceeded", + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiResponseSchema" + "$ref": "#/components/schemas/TaskSchema" } } } }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } - } - }, - "/orders": { - "get": { - "operationId": "getOrdersList", - "summary": "List orders", - "description": "Retrieves a paginated list of orders with filtering and sorting options", + }, + "delete": { + "operationId": "zodAppScaleDeleteTask", + "summary": "Delete task", + "description": "Deletes a task by identifier", "tags": [ - "Orders", - "Commerce" + "Tasks" ], "parameters": [ { - "in": "query", - "name": "page", - "required": false, + "name": "projectId", + "in": "path", + "required": true, "schema": { - "type": "integer", - "exclusiveMinimum": 0, - "default": 1, - "description": "Page number" + "type": "string" }, - "description": "Page number" + "example": "123", + "description": "Path parameter: projectId" }, { - "in": "query", - "name": "limit", - "required": false, + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "integer", - "exclusiveMinimum": 0, - "maximum": 100, - "default": 20, - "description": "Results per page" + "type": "string" }, - "description": "Results per page" + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/generated/teams": { + "get": { + "operationId": "zodAppScaleListTeam", + "summary": "List teams", + "description": "Returns a paginated list of teams", + "tags": [ + "Teams" + ], + "parameters": [ { "in": "query", - "name": "status", + "name": "page", "required": false, "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/OrderStatusSchema" - } - ], - "description": "Filter by status" + "type": "string", + "pattern": "^\\d+$" }, - "description": "Filter by status" + "example": 1 }, { "in": "query", - "name": "dateFrom", + "name": "limit", "required": false, "schema": { "type": "string", - "format": "date-time", - "description": "Filter orders from date" + "pattern": "^\\d+$" }, - "description": "Filter orders from date" + "example": "example" }, { "in": "query", - "name": "dateTo", + "name": "search", "required": false, "schema": { "type": "string", - "format": "date-time", - "description": "Filter orders to date" + "maxLength": 120 }, - "description": "Filter orders to date" + "example": "example" }, { "in": "query", - "name": "sort", + "name": "active", "required": false, "schema": { "type": "string", "enum": [ - "date_asc", - "date_desc", - "total_asc", - "total_desc" - ], - "default": "date_desc", - "description": "Sort results" + "true", + "false" + ] }, - "description": "Sort results" - } - ], - "security": [ - { - "BearerAuth": [] + "example": "example" } ], "responses": { @@ -3604,57 +12642,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrdersResponseOutput" - } - } - }, - "headers": { - "X-Total-Count": { - "description": "Total orders matching the query", - "schema": { - "type": "integer" - } - }, - "Link": { - "description": "RFC 5988 pagination links", - "schema": { - "type": "string" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" - }, - "4XX": { - "description": "Any client error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthErrorResponse" - } - } - } - }, - "5XX": { - "description": "Any server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthErrorResponse" - } - } - } - }, - "default": { - "description": "Fallback error envelope", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthErrorResponse" + "$ref": "#/components/schemas/TeamListResponse" } } } @@ -3662,11 +12650,11 @@ } }, "post": { - "operationId": "createOrder", - "summary": "Create order", - "description": "Creates a new order from cart", + "operationId": "zodAppScaleCreateTeam", + "summary": "Create team", + "description": "Creates a new team", "tags": [ - "Orders" + "Teams" ], "parameters": [], "security": [ @@ -3678,11 +12666,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateOrderBody" + "$ref": "#/components/schemas/CreateTeamSchema" } } - }, - "required": true + } }, "responses": { "200": { @@ -3690,40 +12677,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrderSchemaOutput" + "$ref": "#/components/schemas/TeamSchema" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/orders/{id}": { + "/generated/teams/{id}": { "get": { - "operationId": "get-orders-{id}", - "summary": "Get order by ID", - "description": "Retrieves detailed order information", + "operationId": "zodAppScaleGetTeam", + "summary": "Get team by ID", + "description": "Returns a single team by identifier", "tags": [ - "Orders" + "Teams" ], "parameters": [ { - "in": "path", "name": "id", + "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid", - "description": "Order ID" + "type": "string" }, - "description": "Order ID", - "example": "123" + "example": "123", + "description": "Path parameter: id" } ], "security": [ @@ -3737,7 +12716,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrderSchemaOutput" + "$ref": "#/components/schemas/TeamSchema" } } } @@ -3751,24 +12730,22 @@ } }, "patch": { - "operationId": "patch-orders-{id}", - "summary": "Update order status", - "description": "Updates the status of an order", + "operationId": "zodAppScaleUpdateTeam", + "summary": "Update team", + "description": "Updates an existing team", "tags": [ - "Orders" + "Teams" ], "parameters": [ { - "in": "path", "name": "id", + "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid", - "description": "Order ID" + "type": "string" }, - "description": "Order ID", - "example": "123" + "example": "123", + "description": "Path parameter: id" } ], "security": [ @@ -3780,7 +12757,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderStatusBody" + "$ref": "#/components/schemas/UpdateTeamSchema" } } } @@ -3791,38 +12768,33 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrderSchemaOutput" + "$ref": "#/components/schemas/TeamSchema" } } } }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } }, "delete": { - "operationId": "delete-orders-{id}", - "summary": "Cancel order", - "description": "Cancels an order if it's not already delivered", + "operationId": "zodAppScaleDeleteTeam", + "summary": "Delete team", + "description": "Deletes a team by identifier", "tags": [ - "Orders" + "Teams" ], "parameters": [ { - "in": "path", "name": "id", + "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid", - "description": "Order ID" + "type": "string" }, - "description": "Order ID", - "example": "123" + "example": "123", + "description": "Path parameter: id" } ], "security": [ @@ -3830,13 +12802,47 @@ "BearerAuth": [] } ], + "responses": { + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/upload": { + "post": { + "operationId": "post-upload", + "summary": "Upload image file", + "description": "Uploads PNG or JPG image files with validation and metadata", + "tags": [ + "Uploads" + ], + "parameters": [], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/UploadFormDataSchema" + }, + "encoding": { + "file": { + "contentType": "application/octet-stream" + } + } + } + }, + "description": "Multipart form data containing image file (PNG/JPG, max 5MB), optional description and category" + }, "responses": { "200": { - "description": "Successful response", + "description": "Returns upload confirmation with file metadata and access URL", "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/UploadResponseSchema" } } } @@ -3850,22 +12856,48 @@ } } }, - "/private/admin": { + "/users": { "get": { - "operationId": "get-private-admin", - "summary": "Admin stats – private, not documented in the public API", - "description": "", + "operationId": "get-users", + "summary": "Get users", + "description": "Retrieve users", "tags": [ - "Private" + "Users" + ], + "parameters": [ + { + "in": "query", + "name": "pagination", + "required": true, + "schema": { + "$ref": "#/components/schemas/PaginationSchema" + }, + "example": "example" + }, + { + "in": "query", + "name": "filter", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "style": "deepObject", + "explode": true, + "example": "example" + } ], - "parameters": [], "responses": { "200": { - "description": "Successful response", + "description": "Response users list", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdminStatsSchema" + "$ref": "#/components/schemas/UserDetailedSchema" } } } @@ -3873,46 +12905,35 @@ "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, "500": { "$ref": "#/components/responses/500" } } } }, - "/products/{id}": { + "/users/{id}": { "get": { - "operationId": "get-products-{id}", - "summary": "Get product", - "description": "Retrieves detailed product information by ID", + "operationId": "get-users-{id}", + "summary": "Get user", + "description": "Retrieves detailed user information", "tags": [ - "Products" + "Users", + "Platform" ], "parameters": [ { "in": "query", - "name": "include_variants", + "name": "fields", "required": false, - "schema": { - "type": "boolean", - "description": "Whether to include product variants" - }, - "description": "Whether to include product variants" - }, - { - "in": "query", - "name": "currency", - "required": true, "schema": { "type": "string", - "enum": [ - "USD", - "EUR", - "PLN" - ], - "default": "USD", - "description": "Currency for prices" + "description": "Comma-separated list of fields to include" }, - "description": "Currency for prices" + "description": "Comma-separated list of fields to include", + "example": "example" }, { "in": "path", @@ -3920,59 +12941,54 @@ "required": true, "schema": { "type": "string", - "description": "Unique product identifier" + "format": "uuid", + "description": "User ID" }, - "description": "Unique product identifier", - "example": "123" - } - ], - "security": [ - { - "BearerAuth": [] + "description": "User ID", + "example": "123e4567-e89b-12d3-a456-426614174000" } ], "responses": { "200": { - "description": "Successful response", + "description": "Return user details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductResponseSchema" + "$ref": "#/components/schemas/UserDetailedSchema" } } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { + }, + "headers": { + "ETag": { + "description": "Strong ETag for optimistic concurrency", "schema": { - "$ref": "#/components/schemas/ProductError" + "type": "string" } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { + }, + "Cache-Control": { + "description": "Caching hint for intermediaries", "schema": { - "$ref": "#/components/schemas/ProductError" + "type": "string" } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" } - } + }, + "x-rate-limit": 1000, + "x-internal": false }, "patch": { - "operationId": "patch-products-{id}", - "summary": "Update product", - "description": "Updates an existing product", + "operationId": "patch-users-{id}", + "summary": "Update user", + "description": "Updates user information", "tags": [ - "Products" + "Users" ], "parameters": [ { @@ -3981,10 +12997,11 @@ "required": true, "schema": { "type": "string", - "description": "Unique product identifier" + "format": "uuid", + "description": "User ID" }, - "description": "Unique product identifier", - "example": "123" + "description": "User ID", + "example": "123e4567-e89b-12d3-a456-426614174000" } ], "security": [ @@ -3996,18 +13013,18 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProductSchema" + "$ref": "#/components/schemas/UpdateUserBody" } } } }, "responses": { "200": { - "description": "Successful response", + "description": "Update user info", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductResponseSchema" + "$ref": "#/components/schemas/UserDetailedSchema" } } } @@ -4021,11 +13038,11 @@ } }, "delete": { - "operationId": "delete-products-{id}", - "summary": "Delete product", - "description": "Removes a product from the system", + "operationId": "delete-users-{id}", + "summary": "Delete user", + "description": "Deletes a user account", "tags": [ - "Products" + "Users" ], "parameters": [ { @@ -4034,10 +13051,11 @@ "required": true, "schema": { "type": "string", - "description": "Unique product identifier" + "format": "uuid", + "description": "User ID" }, - "description": "Unique product identifier", - "example": "123" + "description": "User ID", + "example": "123e4567-e89b-12d3-a456-426614174000" } ], "security": [ @@ -4046,6 +13064,16 @@ } ], "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, "400": { "$ref": "#/components/responses/400" }, @@ -4055,80 +13083,136 @@ } } }, - "/auth/session": { + "/users-paginated": { "get": { - "operationId": "zodGetSession", - "summary": "Current session", - "description": "Returns the currently authenticated session based on the session cookie and request headers.", + "operationId": "get-users-paginated", + "summary": "Get paginated users", + "description": "Retrieve users with cursor-based pagination using factory-generated schema", "tags": [ - "Sessions", - "Auth", - "Platform" + "Users-paginated" ], "parameters": [ { - "in": "header", - "name": "X-Api-Key", + "in": "query", + "name": "nextCursor", "required": true, "schema": { - "type": "string", - "minLength": 16, - "description": "API key issued to the caller" + "type": [ + "string", + "null" + ], + "description": "Cursor for the next page" }, - "description": "API key issued to the caller" + "description": "Cursor for the next page", + "example": "example" + }, + { + "in": "query", + "name": "hasMore", + "required": true, + "schema": { + "type": "boolean", + "description": "Whether there are more items after this page" + }, + "description": "Whether there are more items after this page", + "example": true + }, + { + "in": "query", + "name": "limit", + "required": true, + "schema": { + "type": "integer", + "exclusiveMinimum": 0, + "description": "Number of items in this page" + }, + "description": "Number of items in this page", + "example": 1 + }, + { + "in": "query", + "name": "total", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "description": "Total count of items" + }, + "description": "Total count of items", + "example": 1 + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedUsersSchema" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/webhooks": { + "get": { + "operationId": "zodAppScaleListWebhook", + "summary": "List webhooks", + "description": "Returns a paginated list of webhooks", + "tags": [ + "Webhooks" + ], + "parameters": [ { - "in": "header", - "name": "X-Request-Id", + "in": "query", + "name": "page", "required": false, "schema": { "type": "string", - "format": "uuid", - "description": "Client-supplied request id for tracing" + "pattern": "^\\d+$" }, - "description": "Client-supplied request id for tracing" + "example": 1 }, { - "in": "header", - "name": "Authorization", - "required": true, + "in": "query", + "name": "limit", + "required": false, "schema": { "type": "string", - "format": "jwt", - "description": "Bearer JWT granting access to the session" + "pattern": "^\\d+$" }, - "description": "Bearer JWT granting access to the session" + "example": "example" }, { - "in": "cookie", - "name": "session", - "required": true, + "in": "query", + "name": "search", + "required": false, "schema": { "type": "string", - "minLength": 1, - "description": "Opaque server-side session identifier" + "maxLength": 120 }, - "description": "Opaque server-side session identifier" + "example": "example" }, { - "in": "cookie", - "name": "locale", + "in": "query", + "name": "active", "required": false, "schema": { "type": "string", "enum": [ - "en", - "de", - "pl" - ], - "description": "User's preferred locale" + "true", + "false" + ] }, - "description": "User's preferred locale" - } - ], - "security": [ - { - "BearerAuth, ApiKeyAuth": [] + "example": "example" } ], "responses": { @@ -4137,41 +13221,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SessionResponse" - } - } - }, - "headers": { - "ETag": { - "description": "Version of the session document", - "schema": { - "type": "string" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" - }, - "4XX": { - "description": "Any authentication error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthErrorResponse" - } - } - } - }, - "default": { - "description": "Fallback error envelope", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthErrorResponse" + "$ref": "#/components/schemas/WebhookListResponse" } } } @@ -4179,70 +13229,34 @@ } }, "post": { - "operationId": "zodCreateSession", - "summary": "Sign in", - "description": "Exchanges credentials for a fresh session token. Exercises `@link` for follow-up navigation.", + "operationId": "zodAppScaleCreateWebhook", + "summary": "Create webhook", + "description": "Creates a new webhook", "tags": [ - "Sessions", - "Auth" + "Webhooks" ], "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateSessionBody" + "$ref": "#/components/schemas/CreateWebhookSchema" } } - }, - "description": "Credentials plus optional second factor" + } }, "responses": { - "201": { - "description": "New session created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SessionResponse" - } - } - }, - "headers": { - "Location": { - "description": "URL of the newly created session", - "schema": { - "type": "string" - } - } - }, - "links": { - "currentSession": { - "operationId": "zodGetSession" - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" - }, - "4XX": { - "description": "Authentication failed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthErrorResponse" - } - } - } - }, - "5XX": { - "description": "Upstream auth provider failure", + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AuthErrorResponse" + "$ref": "#/components/schemas/WebhookSchema" } } } @@ -4250,37 +13264,38 @@ } } }, - "/upload": { - "post": { - "operationId": "post-upload", - "summary": "Upload image file", - "description": "Uploads PNG or JPG image files with validation and metadata", + "/generated/webhooks/{id}": { + "get": { + "operationId": "zodAppScaleGetWebhook", + "summary": "Get webhook by ID", + "description": "Returns a single webhook by identifier", "tags": [ - "Uploads" + "Webhooks" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/UploadFormDataSchema" - }, - "encoding": { - "file": { - "contentType": "application/octet-stream" - } - } - } - }, - "description": "Multipart form data containing image file (PNG/JPG, max 5MB), optional description and category" - }, "responses": { "200": { - "description": "Returns upload confirmation with file metadata and access URL", + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadResponseSchema" + "$ref": "#/components/schemas/WebhookSchema" } } } @@ -4292,153 +13307,164 @@ "$ref": "#/components/responses/500" } } - } - }, - "/users": { - "get": { - "operationId": "get-users", - "summary": "Get users", - "description": "Retrieve users", + }, + "patch": { + "operationId": "zodAppScaleUpdateWebhook", + "summary": "Update webhook", + "description": "Updates an existing webhook", "tags": [ - "Users" + "Webhooks" ], "parameters": [ { - "in": "query", - "name": "pagination", - "required": true, - "schema": { - "$ref": "#/components/schemas/PaginationSchema" - } - }, - { - "in": "query", - "name": "filter", + "name": "id", + "in": "path", "required": true, "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } + "type": "string" }, - "style": "deepObject", - "explode": true + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWebhookSchema" + } + } + } + }, "responses": { "200": { - "description": "Response users list", + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserDetailedSchema" + "$ref": "#/components/schemas/WebhookSchema" } } } }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteWebhook", + "summary": "Delete webhook", + "description": "Deletes a webhook by identifier", + "tags": [ + "Webhooks" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" }, "401": { "$ref": "#/components/responses/401" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/users/{id}": { + "/generated/workspaces": { "get": { - "operationId": "get-users-{id}", - "summary": "Get user", - "description": "Retrieves detailed user information", + "operationId": "zodAppScaleListWorkspace", + "summary": "List workspaces", + "description": "Returns a paginated list of workspaces", "tags": [ - "Users", - "Platform" + "Workspaces" ], "parameters": [ { "in": "query", - "name": "fields", + "name": "page", "required": false, "schema": { "type": "string", - "description": "Comma-separated list of fields to include" + "pattern": "^\\d+$" }, - "description": "Comma-separated list of fields to include" + "example": 1 }, { - "in": "path", - "name": "id", - "required": true, + "in": "query", + "name": "limit", + "required": false, "schema": { "type": "string", - "format": "uuid", - "description": "User ID" + "pattern": "^\\d+$" }, - "description": "User ID", - "example": "123" + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string", + "maxLength": 120 + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" } ], "responses": { "200": { - "description": "Return user details", + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserDetailedSchema" - } - } - }, - "headers": { - "ETag": { - "description": "Strong ETag for optimistic concurrency", - "schema": { - "type": "string" - } - }, - "Cache-Control": { - "description": "Caching hint for intermediaries", - "schema": { - "type": "string" + "$ref": "#/components/schemas/WorkspaceListResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } - }, - "x-rate-limit": 1000, - "x-internal": false + } }, - "patch": { - "operationId": "patch-users-{id}", - "summary": "Update user", - "description": "Updates user information", + "post": { + "operationId": "zodAppScaleCreateWorkspace", + "summary": "Create workspace", + "description": "Creates a new workspace", "tags": [ - "Users" - ], - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "description": "User ID" - }, - "description": "User ID", - "example": "123" - } + "Workspaces" ], + "parameters": [], "security": [ { "BearerAuth": [] @@ -4448,49 +13474,43 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateUserBody" + "$ref": "#/components/schemas/CreateWorkspaceSchema" } } } }, "responses": { "200": { - "description": "Update user info", + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserDetailedSchema" + "$ref": "#/components/schemas/WorkspaceSchema" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } - }, - "delete": { - "operationId": "delete-users-{id}", - "summary": "Delete user", - "description": "Deletes a user account", + } + }, + "/generated/workspaces/{id}": { + "get": { + "operationId": "zodAppScaleGetWorkspace", + "summary": "Get workspace by ID", + "description": "Returns a single workspace by identifier", "tags": [ - "Users" + "Workspaces" ], "parameters": [ { - "in": "path", "name": "id", + "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid", - "description": "User ID" + "type": "string" }, - "description": "User ID", - "example": "123" + "example": "123", + "description": "Path parameter: id" } ], "security": [ @@ -4504,7 +13524,7 @@ "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/WorkspaceSchema" } } } @@ -4516,84 +13536,93 @@ "$ref": "#/components/responses/500" } } - } - }, - "/users-paginated": { - "get": { - "operationId": "get-users-paginated", - "summary": "Get paginated users", - "description": "Retrieve users with cursor-based pagination using factory-generated schema", + }, + "patch": { + "operationId": "zodAppScaleUpdateWorkspace", + "summary": "Update workspace", + "description": "Updates an existing workspace", "tags": [ - "Users-paginated" + "Workspaces" ], "parameters": [ { - "in": "query", - "name": "nextCursor", - "required": true, - "schema": { - "type": [ - "string", - "null" - ], - "description": "Cursor for the next page" - }, - "description": "Cursor for the next page" - }, - { - "in": "query", - "name": "hasMore", - "required": true, - "schema": { - "type": "boolean", - "description": "Whether there are more items after this page" - }, - "description": "Whether there are more items after this page" - }, - { - "in": "query", - "name": "limit", + "name": "id", + "in": "path", "required": true, "schema": { - "type": "integer", - "exclusiveMinimum": 0, - "description": "Number of items in this page" + "type": "string" }, - "description": "Number of items in this page" - }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ { - "in": "query", - "name": "total", - "required": false, - "schema": { - "type": "integer", - "minimum": 0, - "description": "Total count of items" - }, - "description": "Total count of items" + "BearerAuth": [] } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWorkspaceSchema" + } + } + } + }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PaginatedUsersSchema" + "$ref": "#/components/schemas/WorkspaceSchema" } } } }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" + } + } + }, + "delete": { + "operationId": "zodAppScaleDeleteWorkspace", + "summary": "Delete workspace", + "description": "Deletes a workspace by identifier", + "tags": [ + "Workspaces" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "123", + "description": "Path parameter: id" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "204": { + "description": "Resource deleted successfully" }, - "500": { - "$ref": "#/components/responses/500" + "401": { + "$ref": "#/components/responses/401" } } } - }, - "/webhooks/payment": { + } + }, + "webhooks": { + "paymentEvent": { "post": { "operationId": "zodReceivePaymentEvent", "summary": "Payment webhook", @@ -4655,6 +13684,30 @@ { "name": "Analytics" }, + { + "name": "ApiKeys" + }, + { + "name": "Attachments" + }, + { + "name": "AuditLogs" + }, + { + "name": "Catalog" + }, + { + "name": "Comments" + }, + { + "name": "Customers" + }, + { + "name": "Departments" + }, + { + "name": "Documents" + }, { "name": "Events", "summary": "Event navigation", @@ -4667,27 +13720,60 @@ "kind": "maintenance", "parent": "Platform" }, + { + "name": "Exports" + }, { "name": "Extended" }, { "name": "Integrations" }, + { + "name": "Invoices" + }, + { + "name": "Members" + }, { "name": "Notifications" }, { "name": "Orders" }, + { + "name": "Organizations" + }, + { + "name": "Payments" + }, { "name": "Private" }, { "name": "Products" }, + { + "name": "Projects" + }, + { + "name": "Refunds" + }, + { + "name": "Reports" + }, { "name": "Sessions" }, + { + "name": "Subscriptions" + }, + { + "name": "Tasks" + }, + { + "name": "Teams" + }, { "name": "Uploads" }, @@ -4699,6 +13785,9 @@ }, { "name": "Webhooks" + }, + { + "name": "Workspaces" } ] } diff --git a/apps/next-app-zod/src/app/api/generated/api-keys/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..d86aac7e --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId zodAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeySchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId zodAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId zodAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/api-keys/route.ts b/apps/next-app-zod/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..73a766d8 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId zodAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuerySchema + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId zodAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/attachments/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..485ab7c4 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId zodAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId zodAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId zodAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/attachments/route.ts b/apps/next-app-zod/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..d998c0cb --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId zodAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuerySchema + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId zodAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/audit-logs/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..01432be1 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId zodAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId zodAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId zodAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/audit-logs/route.ts b/apps/next-app-zod/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..28e3a7f0 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId zodAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId zodAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/catalog-items/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..c2b9bc0c --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId zodAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId zodAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId zodAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/catalog-items/route.ts b/apps/next-app-zod/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..c8b39c38 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId zodAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuerySchema + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId zodAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/comments/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..b0f976ed --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId zodAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId zodAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId zodAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/comments/route.ts b/apps/next-app-zod/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..a5d7e6db --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId zodAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId zodAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/customers/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..27931410 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId zodAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId zodAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId zodAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/customers/route.ts b/apps/next-app-zod/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..20666328 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId zodAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuerySchema + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId zodAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/departments/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..b6d7e8eb --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId zodAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId zodAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId zodAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/departments/route.ts b/apps/next-app-zod/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..7e883bb6 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId zodAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId zodAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/documents/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..89a348b3 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId zodAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId zodAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId zodAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/documents/route.ts b/apps/next-app-zod/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..e4efcf13 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId zodAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuerySchema + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId zodAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/exports/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..6cdaa9bb --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId zodAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId zodAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportSchema + * @response ExportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId zodAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/exports/route.ts b/apps/next-app-zod/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..8f476387 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId zodAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuerySchema + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId zodAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportSchema + * @response ExportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/invoices/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..2fdb3a46 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId zodAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId zodAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId zodAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/invoices/route.ts b/apps/next-app-zod/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..f5f10b6a --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId zodAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId zodAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/members/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..b50210b9 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId zodAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId zodAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId zodAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/members/route.ts b/apps/next-app-zod/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..9e7ba33f --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId zodAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId zodAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/notifications/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..d9c56415 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId zodAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId zodAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId zodAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/notifications/route.ts b/apps/next-app-zod/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..e2eb9eb2 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId zodAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuerySchema + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId zodAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/orders/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..327e9549 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId zodAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId zodAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId zodAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/orders/route.ts b/apps/next-app-zod/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..317c43ad --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId zodAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId zodAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..6ada3c8f --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId zodAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId zodAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId zodAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..32c80c0f --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId zodAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuerySchema + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId zodAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/route.ts b/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..a9f96174 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId zodAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId zodAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId zodAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/organizations/route.ts b/apps/next-app-zod/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..1341108b --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId zodAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuerySchema + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId zodAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/payments/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..6204e64c --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId zodAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId zodAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId zodAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/payments/route.ts b/apps/next-app-zod/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..e6282c02 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId zodAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuerySchema + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId zodAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/products/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..3d667861 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId zodAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId zodAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductSchema + * @response ProductSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId zodAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/products/route.ts b/apps/next-app-zod/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..a02736a6 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId zodAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuerySchema + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId zodAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductSchema + * @response ProductSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..e02b74fc --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId zodAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId zodAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId zodAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/projects/[projectId]/tasks/route.ts b/apps/next-app-zod/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..e95b320f --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId zodAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId zodAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/refunds/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..4df7a4cd --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId zodAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId zodAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId zodAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/refunds/route.ts b/apps/next-app-zod/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..4b6d1a27 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId zodAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId zodAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/reports/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..56351d23 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId zodAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId zodAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId zodAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/reports/route.ts b/apps/next-app-zod/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..5ccd8183 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId zodAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId zodAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/sessions/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..60ae6ace --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId zodAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId zodAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId zodAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/sessions/route.ts b/apps/next-app-zod/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..c5755931 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId zodAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId zodAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/subscriptions/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..6674e150 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId zodAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId zodAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId zodAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/subscriptions/route.ts b/apps/next-app-zod/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..34482f5b --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId zodAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuerySchema + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId zodAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/teams/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..e4a44709 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId zodAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId zodAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId zodAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/teams/route.ts b/apps/next-app-zod/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..912c70c4 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId zodAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuerySchema + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId zodAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/webhooks/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..313c35a8 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId zodAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId zodAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId zodAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/webhooks/route.ts b/apps/next-app-zod/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..70bbd6a7 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId zodAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId zodAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/workspaces/[id]/route.ts b/apps/next-app-zod/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..a74ec6f7 --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId zodAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId zodAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId zodAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/generated/workspaces/route.ts b/apps/next-app-zod/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..98f84f4e --- /dev/null +++ b/apps/next-app-zod/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId zodAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId zodAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/apps/next-app-zod/src/app/api/organizations/[organizationId]/route.ts b/apps/next-app-zod/src/app/api/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..32023f45 --- /dev/null +++ b/apps/next-app-zod/src/app/api/organizations/[organizationId]/route.ts @@ -0,0 +1,22 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +export const organizationParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); + +type RouteContext = { + params: Promise<{ organizationId: string }>; +}; + +/** + * Get organization + * @summary Get organization + * @tag Organizations + * @response UserDetailedSchema + * @openapi + */ +export async function GET(_request: Request, context: RouteContext) { + organizationParamsSchema.parse(await context.params); + return NextResponse.json({ id: "00000000-0000-0000-0000-000000000001" }); +} diff --git a/apps/next-app-zod/src/app/api/users/mini/route.ts b/apps/next-app-zod/src/app/api/users/mini/route.ts new file mode 100644 index 00000000..cea3a88e --- /dev/null +++ b/apps/next-app-zod/src/app/api/users/mini/route.ts @@ -0,0 +1,19 @@ +import { MiniUserSchema } from "@/schemas/mini-user"; +import { NextResponse } from "next/server"; + +/** + * Get a sample user defined with Zod Mini functional APIs + * @description Demonstrates zod/mini extend, optional, nullable, and .check() refinements + * @response MiniUserSchema + * @openapi + */ +export async function GET() { + const user = MiniUserSchema.parse({ + id: "550e8400-e29b-41d4-a716-446655440000", + email: "mini@example.com", + displayName: "Mini User", + bio: null, + }); + + return NextResponse.json(user); +} diff --git a/apps/next-app-zod/src/schemas/generated/api-keys-entity.ts b/apps/next-app-zod/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..e16eeeeb --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeySchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ApiKeyListResponse = z.object({ + items: z.array(ApiKeySchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ApiKeyIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/api-keys-input.ts b/apps/next-app-zod/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..12b4864a --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeyListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateApiKeySchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateApiKeySchema = CreateApiKeySchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/attachments-entity.ts b/apps/next-app-zod/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..d67ef024 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AttachmentListResponse = z.object({ + items: z.array(AttachmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AttachmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/attachments-input.ts b/apps/next-app-zod/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..845843f3 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/attachments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAttachmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAttachmentSchema = CreateAttachmentSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/audit-logs-entity.ts b/apps/next-app-zod/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..bd9b8931 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/audit-logs-input.ts b/apps/next-app-zod/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..34e13d87 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAuditLogSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/catalog-items-entity.ts b/apps/next-app-zod/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e7a311cb --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CatalogItemListResponse = z.object({ + items: z.array(CatalogItemSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CatalogItemIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/catalog-items-input.ts b/apps/next-app-zod/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..9ca2d0fb --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCatalogItemSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCatalogItemSchema = CreateCatalogItemSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/comments-entity.ts b/apps/next-app-zod/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..44db99e6 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/comments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/comments-input.ts b/apps/next-app-zod/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..840de293 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/comments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCommentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/customers-entity.ts b/apps/next-app-zod/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..7da28861 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/customers-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CustomerListResponse = z.object({ + items: z.array(CustomerSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CustomerIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/customers-input.ts b/apps/next-app-zod/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..da9fe60a --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/customers-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCustomerSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCustomerSchema = CreateCustomerSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/departments-entity.ts b/apps/next-app-zod/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..92c51920 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/departments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/departments-input.ts b/apps/next-app-zod/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..d3705544 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/departments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDepartmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/documents-entity.ts b/apps/next-app-zod/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..a8f57a10 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/documents-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DocumentListResponse = z.object({ + items: z.array(DocumentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DocumentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/documents-input.ts b/apps/next-app-zod/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..869eca94 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/documents-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDocumentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDocumentSchema = CreateDocumentSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/exports-entity.ts b/apps/next-app-zod/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..8b3a79c8 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/exports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ExportListResponse = z.object({ + items: z.array(ExportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ExportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/exports-input.ts b/apps/next-app-zod/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..21c25a5f --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/exports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateExportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateExportSchema = CreateExportSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/invoices-entity.ts b/apps/next-app-zod/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..cbab42ff --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/invoices-input.ts b/apps/next-app-zod/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..07d279d2 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/invoices-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateInvoiceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/members-entity.ts b/apps/next-app-zod/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..8a5c5ccd --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/members-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/members-input.ts b/apps/next-app-zod/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..fdccd311 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/members-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateMemberSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/notifications-entity.ts b/apps/next-app-zod/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..ff8107e6 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const NotificationListResponse = z.object({ + items: z.array(NotificationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const NotificationIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/notifications-input.ts b/apps/next-app-zod/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..421e709c --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/notifications-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateNotificationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateNotificationSchema = CreateNotificationSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/orders-entity.ts b/apps/next-app-zod/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..2bf76fbb --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/orders-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/orders-input.ts b/apps/next-app-zod/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..9826c38f --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/orders-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrderSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/organizations-entity.ts b/apps/next-app-zod/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..4bd841b5 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrganizationListResponse = z.object({ + items: z.array(OrganizationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrganizationIdParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/organizations-input.ts b/apps/next-app-zod/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..24198e68 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/organizations-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrganizationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrganizationSchema = CreateOrganizationSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/payments-entity.ts b/apps/next-app-zod/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..fca47a60 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/payments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const PaymentListResponse = z.object({ + items: z.array(PaymentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const PaymentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/payments-input.ts b/apps/next-app-zod/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..15f4871f --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/payments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreatePaymentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdatePaymentSchema = CreatePaymentSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/products-entity.ts b/apps/next-app-zod/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..681fc713 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/products-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProductListResponse = z.object({ + items: z.array(ProductSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProductIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/products-input.ts b/apps/next-app-zod/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..d8cd63e2 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/products-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProductSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProductSchema = CreateProductSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/projects-entity.ts b/apps/next-app-zod/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..4d3f3c01 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/projects-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProjectListResponse = z.object({ + items: z.array(ProjectSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProjectCollectionPathParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); + +export const ProjectIdParamsSchema = z.object({ + organizationId: z.string().uuid(), + projectId: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/projects-input.ts b/apps/next-app-zod/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..7f687df8 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/projects-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProjectSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProjectSchema = CreateProjectSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/refunds-entity.ts b/apps/next-app-zod/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..9d9867ee --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/refunds-input.ts b/apps/next-app-zod/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..f90e1386 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/refunds-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateRefundSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/reports-entity.ts b/apps/next-app-zod/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..2981e8f1 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/reports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/reports-input.ts b/apps/next-app-zod/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..d65dbc4c --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/reports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateReportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateReportSchema = CreateReportSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/sessions-entity.ts b/apps/next-app-zod/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..9880f94b --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/sessions-input.ts b/apps/next-app-zod/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..00d4afeb --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/sessions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSessionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/subscriptions-entity.ts b/apps/next-app-zod/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..2d61082d --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SubscriptionListResponse = z.object({ + items: z.array(SubscriptionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SubscriptionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/subscriptions-input.ts b/apps/next-app-zod/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..28273921 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSubscriptionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSubscriptionSchema = CreateSubscriptionSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/tasks-entity.ts b/apps/next-app-zod/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..09677f29 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().uuid(), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().uuid(), + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/tasks-input.ts b/apps/next-app-zod/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..0c1422c3 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/tasks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTaskSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/teams-entity.ts b/apps/next-app-zod/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..afbf8fcf --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/teams-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TeamListResponse = z.object({ + items: z.array(TeamSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TeamIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/teams-input.ts b/apps/next-app-zod/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..7043e4b5 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/teams-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTeamSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTeamSchema = CreateTeamSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/webhooks-entity.ts b/apps/next-app-zod/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..ddb257ab --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/webhooks-input.ts b/apps/next-app-zod/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..61a0e181 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWebhookSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/generated/workspaces-entity.ts b/apps/next-app-zod/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..20d92e0e --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/apps/next-app-zod/src/schemas/generated/workspaces-input.ts b/apps/next-app-zod/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..e6b80db9 --- /dev/null +++ b/apps/next-app-zod/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWorkspaceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); diff --git a/apps/next-app-zod/src/schemas/mini-user.ts b/apps/next-app-zod/src/schemas/mini-user.ts new file mode 100644 index 00000000..fd3ce6d4 --- /dev/null +++ b/apps/next-app-zod/src/schemas/mini-user.ts @@ -0,0 +1,14 @@ +import { z } from "zod/mini"; + +const MiniUserBaseSchema = z.object({ + id: z.string().check(z.uuid()), + email: z.string().check(z.email()), +}); + +/** Zod Mini sample: functional extend + check refinements. */ +export const MiniUserSchema = z.extend(MiniUserBaseSchema, { + displayName: z.optional(z.string().check(z.minLength(1), z.maxLength(100))), + bio: z.nullable(z.string().check(z.maxLength(280))), +}); + +export type MiniUser = z.infer; diff --git a/apps/next-pages-router/pages/api/generated/api-keys/[id].ts b/apps/next-pages-router/pages/api/generated/api-keys/[id].ts new file mode 100644 index 00000000..2493e8fc --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/api-keys/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId pagesAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + * @method GET + */ +/** + * Update apikey + * @description Updates an existing apikey + * @operationId pagesAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + * @method PATCH + */ +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId pagesAppScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/api-keys/index.ts b/apps/next-pages-router/pages/api/generated/api-keys/index.ts new file mode 100644 index 00000000..25a9f938 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/api-keys/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId pagesAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + * @method GET + */ +/** + * Create apikey + * @description Creates a new apikey + * @operationId pagesAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/attachments/[id].ts b/apps/next-pages-router/pages/api/generated/attachments/[id].ts new file mode 100644 index 00000000..f3c691e7 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/attachments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId pagesAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + * @method GET + */ +/** + * Update attachment + * @description Updates an existing attachment + * @operationId pagesAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + * @method PATCH + */ +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId pagesAppScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/attachments/index.ts b/apps/next-pages-router/pages/api/generated/attachments/index.ts new file mode 100644 index 00000000..bd17862d --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/attachments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId pagesAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + * @method GET + */ +/** + * Create attachment + * @description Creates a new attachment + * @operationId pagesAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/audit-logs/[id].ts b/apps/next-pages-router/pages/api/generated/audit-logs/[id].ts new file mode 100644 index 00000000..0554ac4c --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/audit-logs/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId pagesAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + * @method GET + */ +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId pagesAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + * @method PATCH + */ +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId pagesAppScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/audit-logs/index.ts b/apps/next-pages-router/pages/api/generated/audit-logs/index.ts new file mode 100644 index 00000000..728f904a --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/audit-logs/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId pagesAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + * @method GET + */ +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId pagesAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/catalog-items/[id].ts b/apps/next-pages-router/pages/api/generated/catalog-items/[id].ts new file mode 100644 index 00000000..fb12fa8a --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/catalog-items/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId pagesAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + * @method GET + */ +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId pagesAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + * @method PATCH + */ +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId pagesAppScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/catalog-items/index.ts b/apps/next-pages-router/pages/api/generated/catalog-items/index.ts new file mode 100644 index 00000000..2e99fad6 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/catalog-items/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId pagesAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + * @method GET + */ +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId pagesAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/comments/[id].ts b/apps/next-pages-router/pages/api/generated/comments/[id].ts new file mode 100644 index 00000000..f2ec9362 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/comments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId pagesAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + * @method GET + */ +/** + * Update comment + * @description Updates an existing comment + * @operationId pagesAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + * @method PATCH + */ +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId pagesAppScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/comments/index.ts b/apps/next-pages-router/pages/api/generated/comments/index.ts new file mode 100644 index 00000000..5c0bb8e3 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/comments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId pagesAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + * @method GET + */ +/** + * Create comment + * @description Creates a new comment + * @operationId pagesAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/customers/[id].ts b/apps/next-pages-router/pages/api/generated/customers/[id].ts new file mode 100644 index 00000000..9229dbd8 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/customers/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId pagesAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + * @method GET + */ +/** + * Update customer + * @description Updates an existing customer + * @operationId pagesAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + * @method PATCH + */ +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId pagesAppScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/customers/index.ts b/apps/next-pages-router/pages/api/generated/customers/index.ts new file mode 100644 index 00000000..1e9f1288 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/customers/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId pagesAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + * @method GET + */ +/** + * Create customer + * @description Creates a new customer + * @operationId pagesAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/departments/[id].ts b/apps/next-pages-router/pages/api/generated/departments/[id].ts new file mode 100644 index 00000000..333fcb65 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/departments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId pagesAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + * @method GET + */ +/** + * Update department + * @description Updates an existing department + * @operationId pagesAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + * @method PATCH + */ +/** + * Delete department + * @description Deletes a department by identifier + * @operationId pagesAppScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/departments/index.ts b/apps/next-pages-router/pages/api/generated/departments/index.ts new file mode 100644 index 00000000..9af2774d --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/departments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId pagesAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + * @method GET + */ +/** + * Create department + * @description Creates a new department + * @operationId pagesAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/documents/[id].ts b/apps/next-pages-router/pages/api/generated/documents/[id].ts new file mode 100644 index 00000000..9119dd7c --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/documents/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId pagesAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + * @method GET + */ +/** + * Update document + * @description Updates an existing document + * @operationId pagesAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + * @method PATCH + */ +/** + * Delete document + * @description Deletes a document by identifier + * @operationId pagesAppScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/documents/index.ts b/apps/next-pages-router/pages/api/generated/documents/index.ts new file mode 100644 index 00000000..85c70d49 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/documents/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId pagesAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + * @method GET + */ +/** + * Create document + * @description Creates a new document + * @operationId pagesAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/exports/[id].ts b/apps/next-pages-router/pages/api/generated/exports/[id].ts new file mode 100644 index 00000000..8e976d74 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/exports/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId pagesAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + * @method GET + */ +/** + * Update export + * @description Updates an existing export + * @operationId pagesAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + * @method PATCH + */ +/** + * Delete export + * @description Deletes a export by identifier + * @operationId pagesAppScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/exports/index.ts b/apps/next-pages-router/pages/api/generated/exports/index.ts new file mode 100644 index 00000000..455dd6c1 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/exports/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId pagesAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + * @method GET + */ +/** + * Create export + * @description Creates a new export + * @operationId pagesAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/invoices/[id].ts b/apps/next-pages-router/pages/api/generated/invoices/[id].ts new file mode 100644 index 00000000..442f2cd3 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/invoices/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId pagesAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + * @method GET + */ +/** + * Update invoice + * @description Updates an existing invoice + * @operationId pagesAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + * @method PATCH + */ +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId pagesAppScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/invoices/index.ts b/apps/next-pages-router/pages/api/generated/invoices/index.ts new file mode 100644 index 00000000..39328dca --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/invoices/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId pagesAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + * @method GET + */ +/** + * Create invoice + * @description Creates a new invoice + * @operationId pagesAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/members/[id].ts b/apps/next-pages-router/pages/api/generated/members/[id].ts new file mode 100644 index 00000000..9e772748 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/members/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId pagesAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + * @method GET + */ +/** + * Update member + * @description Updates an existing member + * @operationId pagesAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + * @method PATCH + */ +/** + * Delete member + * @description Deletes a member by identifier + * @operationId pagesAppScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/members/index.ts b/apps/next-pages-router/pages/api/generated/members/index.ts new file mode 100644 index 00000000..098c1575 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/members/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId pagesAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + * @method GET + */ +/** + * Create member + * @description Creates a new member + * @operationId pagesAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/notifications/[id].ts b/apps/next-pages-router/pages/api/generated/notifications/[id].ts new file mode 100644 index 00000000..f09caf47 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/notifications/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId pagesAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + * @method GET + */ +/** + * Update notification + * @description Updates an existing notification + * @operationId pagesAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + * @method PATCH + */ +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId pagesAppScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/notifications/index.ts b/apps/next-pages-router/pages/api/generated/notifications/index.ts new file mode 100644 index 00000000..152cc288 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/notifications/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId pagesAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + * @method GET + */ +/** + * Create notification + * @description Creates a new notification + * @operationId pagesAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/orders/[id].ts b/apps/next-pages-router/pages/api/generated/orders/[id].ts new file mode 100644 index 00000000..44c4994b --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/orders/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId pagesAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + * @method GET + */ +/** + * Update order + * @description Updates an existing order + * @operationId pagesAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + * @method PATCH + */ +/** + * Delete order + * @description Deletes a order by identifier + * @operationId pagesAppScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/orders/index.ts b/apps/next-pages-router/pages/api/generated/orders/index.ts new file mode 100644 index 00000000..9bc48321 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/orders/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId pagesAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + * @method GET + */ +/** + * Create order + * @description Creates a new order + * @operationId pagesAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/organizations/[id].ts b/apps/next-pages-router/pages/api/generated/organizations/[id].ts new file mode 100644 index 00000000..f4d1f914 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/organizations/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId pagesAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + * @method GET + */ +/** + * Update organization + * @description Updates an existing organization + * @operationId pagesAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + * @method PATCH + */ +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId pagesAppScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/organizations/index.ts b/apps/next-pages-router/pages/api/generated/organizations/index.ts new file mode 100644 index 00000000..e7a4be97 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/organizations/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId pagesAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + * @method GET + */ +/** + * Create organization + * @description Creates a new organization + * @operationId pagesAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/payments/[id].ts b/apps/next-pages-router/pages/api/generated/payments/[id].ts new file mode 100644 index 00000000..084c9143 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/payments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId pagesAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + * @method GET + */ +/** + * Update payment + * @description Updates an existing payment + * @operationId pagesAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + * @method PATCH + */ +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId pagesAppScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/payments/index.ts b/apps/next-pages-router/pages/api/generated/payments/index.ts new file mode 100644 index 00000000..2a6e487d --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/payments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId pagesAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + * @method GET + */ +/** + * Create payment + * @description Creates a new payment + * @operationId pagesAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/products/[id].ts b/apps/next-pages-router/pages/api/generated/products/[id].ts new file mode 100644 index 00000000..17a3fad7 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/products/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId pagesAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + * @method GET + */ +/** + * Update product + * @description Updates an existing product + * @operationId pagesAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + * @method PATCH + */ +/** + * Delete product + * @description Deletes a product by identifier + * @operationId pagesAppScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/products/index.ts b/apps/next-pages-router/pages/api/generated/products/index.ts new file mode 100644 index 00000000..268849fb --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/products/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId pagesAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + * @method GET + */ +/** + * Create product + * @description Creates a new product + * @operationId pagesAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/projects/[id].ts b/apps/next-pages-router/pages/api/generated/projects/[id].ts new file mode 100644 index 00000000..ad1d38e6 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/projects/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId pagesAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + * @method GET + */ +/** + * Update project + * @description Updates an existing project + * @operationId pagesAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + * @method PATCH + */ +/** + * Delete project + * @description Deletes a project by identifier + * @operationId pagesAppScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/projects/index.ts b/apps/next-pages-router/pages/api/generated/projects/index.ts new file mode 100644 index 00000000..853cac12 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/projects/index.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId pagesAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + * @method GET + */ +/** + * Create project + * @description Creates a new project + * @operationId pagesAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/refunds/[id].ts b/apps/next-pages-router/pages/api/generated/refunds/[id].ts new file mode 100644 index 00000000..9329fbd3 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/refunds/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId pagesAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + * @method GET + */ +/** + * Update refund + * @description Updates an existing refund + * @operationId pagesAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + * @method PATCH + */ +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId pagesAppScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/refunds/index.ts b/apps/next-pages-router/pages/api/generated/refunds/index.ts new file mode 100644 index 00000000..f6020ab4 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/refunds/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId pagesAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + * @method GET + */ +/** + * Create refund + * @description Creates a new refund + * @operationId pagesAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/reports/[id].ts b/apps/next-pages-router/pages/api/generated/reports/[id].ts new file mode 100644 index 00000000..cc417abb --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/reports/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId pagesAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + * @method GET + */ +/** + * Update report + * @description Updates an existing report + * @operationId pagesAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + * @method PATCH + */ +/** + * Delete report + * @description Deletes a report by identifier + * @operationId pagesAppScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/reports/index.ts b/apps/next-pages-router/pages/api/generated/reports/index.ts new file mode 100644 index 00000000..5181d701 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/reports/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId pagesAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + * @method GET + */ +/** + * Create report + * @description Creates a new report + * @operationId pagesAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/sessions/[id].ts b/apps/next-pages-router/pages/api/generated/sessions/[id].ts new file mode 100644 index 00000000..1542093e --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/sessions/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId pagesAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + * @method GET + */ +/** + * Update session + * @description Updates an existing session + * @operationId pagesAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + * @method PATCH + */ +/** + * Delete session + * @description Deletes a session by identifier + * @operationId pagesAppScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/sessions/index.ts b/apps/next-pages-router/pages/api/generated/sessions/index.ts new file mode 100644 index 00000000..0d9fa38e --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/sessions/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId pagesAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + * @method GET + */ +/** + * Create session + * @description Creates a new session + * @operationId pagesAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/subscriptions/[id].ts b/apps/next-pages-router/pages/api/generated/subscriptions/[id].ts new file mode 100644 index 00000000..c913028b --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/subscriptions/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId pagesAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + * @method GET + */ +/** + * Update subscription + * @description Updates an existing subscription + * @operationId pagesAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + * @method PATCH + */ +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId pagesAppScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/subscriptions/index.ts b/apps/next-pages-router/pages/api/generated/subscriptions/index.ts new file mode 100644 index 00000000..5850e61d --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/subscriptions/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId pagesAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + * @method GET + */ +/** + * Create subscription + * @description Creates a new subscription + * @operationId pagesAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/tasks/[id].ts b/apps/next-pages-router/pages/api/generated/tasks/[id].ts new file mode 100644 index 00000000..84f238b0 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/tasks/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId pagesAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + * @method GET + */ +/** + * Update task + * @description Updates an existing task + * @operationId pagesAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + * @method PATCH + */ +/** + * Delete task + * @description Deletes a task by identifier + * @operationId pagesAppScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/tasks/index.ts b/apps/next-pages-router/pages/api/generated/tasks/index.ts new file mode 100644 index 00000000..a89c25b6 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/tasks/index.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId pagesAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + * @method GET + */ +/** + * Create task + * @description Creates a new task + * @operationId pagesAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/teams/[id].ts b/apps/next-pages-router/pages/api/generated/teams/[id].ts new file mode 100644 index 00000000..e198f20a --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/teams/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId pagesAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + * @method GET + */ +/** + * Update team + * @description Updates an existing team + * @operationId pagesAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + * @method PATCH + */ +/** + * Delete team + * @description Deletes a team by identifier + * @operationId pagesAppScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/teams/index.ts b/apps/next-pages-router/pages/api/generated/teams/index.ts new file mode 100644 index 00000000..0e2100ae --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/teams/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId pagesAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + * @method GET + */ +/** + * Create team + * @description Creates a new team + * @operationId pagesAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/webhooks/[id].ts b/apps/next-pages-router/pages/api/generated/webhooks/[id].ts new file mode 100644 index 00000000..469e841f --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/webhooks/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId pagesAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + * @method GET + */ +/** + * Update webhook + * @description Updates an existing webhook + * @operationId pagesAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + * @method PATCH + */ +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId pagesAppScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/webhooks/index.ts b/apps/next-pages-router/pages/api/generated/webhooks/index.ts new file mode 100644 index 00000000..cb8625a7 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/webhooks/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId pagesAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + * @method GET + */ +/** + * Create webhook + * @description Creates a new webhook + * @operationId pagesAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/workspaces/[id].ts b/apps/next-pages-router/pages/api/generated/workspaces/[id].ts new file mode 100644 index 00000000..39966388 --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/workspaces/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId pagesAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + * @method GET + */ +/** + * Update workspace + * @description Updates an existing workspace + * @operationId pagesAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + * @method PATCH + */ +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId pagesAppScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/apps/next-pages-router/pages/api/generated/workspaces/index.ts b/apps/next-pages-router/pages/api/generated/workspaces/index.ts new file mode 100644 index 00000000..0a0d037c --- /dev/null +++ b/apps/next-pages-router/pages/api/generated/workspaces/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId pagesAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + * @method GET + */ +/** + * Create workspace + * @description Creates a new workspace + * @operationId pagesAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/apps/next-pages-router/schemas/generated/api-keys-entity.ts b/apps/next-pages-router/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/next-pages-router/schemas/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/api-keys-input.ts b/apps/next-pages-router/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/attachments-entity.ts b/apps/next-pages-router/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/next-pages-router/schemas/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/attachments-input.ts b/apps/next-pages-router/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/audit-logs-entity.ts b/apps/next-pages-router/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/audit-logs-input.ts b/apps/next-pages-router/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/apps/next-pages-router/schemas/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/catalog-items-entity.ts b/apps/next-pages-router/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/catalog-items-input.ts b/apps/next-pages-router/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/comments-entity.ts b/apps/next-pages-router/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/comments-input.ts b/apps/next-pages-router/schemas/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/customers-entity.ts b/apps/next-pages-router/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/customers-input.ts b/apps/next-pages-router/schemas/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/departments-entity.ts b/apps/next-pages-router/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/apps/next-pages-router/schemas/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/departments-input.ts b/apps/next-pages-router/schemas/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/apps/next-pages-router/schemas/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/documents-entity.ts b/apps/next-pages-router/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/next-pages-router/schemas/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/documents-input.ts b/apps/next-pages-router/schemas/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/next-pages-router/schemas/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/exports-entity.ts b/apps/next-pages-router/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/exports-input.ts b/apps/next-pages-router/schemas/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/next-pages-router/schemas/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/invoices-entity.ts b/apps/next-pages-router/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/invoices-input.ts b/apps/next-pages-router/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/apps/next-pages-router/schemas/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/members-entity.ts b/apps/next-pages-router/schemas/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/apps/next-pages-router/schemas/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/members-input.ts b/apps/next-pages-router/schemas/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/notifications-entity.ts b/apps/next-pages-router/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/notifications-input.ts b/apps/next-pages-router/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/orders-entity.ts b/apps/next-pages-router/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/apps/next-pages-router/schemas/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/orders-input.ts b/apps/next-pages-router/schemas/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/organizations-entity.ts b/apps/next-pages-router/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/next-pages-router/schemas/generated/organizations-input.ts b/apps/next-pages-router/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/next-pages-router/schemas/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/payments-entity.ts b/apps/next-pages-router/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/payments-input.ts b/apps/next-pages-router/schemas/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/products-entity.ts b/apps/next-pages-router/schemas/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/next-pages-router/schemas/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/products-input.ts b/apps/next-pages-router/schemas/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/projects-entity.ts b/apps/next-pages-router/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/next-pages-router/schemas/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/next-pages-router/schemas/generated/projects-input.ts b/apps/next-pages-router/schemas/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/refunds-entity.ts b/apps/next-pages-router/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/apps/next-pages-router/schemas/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/refunds-input.ts b/apps/next-pages-router/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/reports-entity.ts b/apps/next-pages-router/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/apps/next-pages-router/schemas/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/reports-input.ts b/apps/next-pages-router/schemas/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/apps/next-pages-router/schemas/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/sessions-entity.ts b/apps/next-pages-router/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/sessions-input.ts b/apps/next-pages-router/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/subscriptions-entity.ts b/apps/next-pages-router/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/next-pages-router/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/subscriptions-input.ts b/apps/next-pages-router/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/tasks-entity.ts b/apps/next-pages-router/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/tasks-input.ts b/apps/next-pages-router/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/teams-entity.ts b/apps/next-pages-router/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/next-pages-router/schemas/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/teams-input.ts b/apps/next-pages-router/schemas/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/webhooks-entity.ts b/apps/next-pages-router/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/apps/next-pages-router/schemas/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/webhooks-input.ts b/apps/next-pages-router/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/apps/next-pages-router/schemas/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/next-pages-router/schemas/generated/workspaces-entity.ts b/apps/next-pages-router/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/apps/next-pages-router/schemas/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/apps/next-pages-router/schemas/generated/workspaces-input.ts b/apps/next-pages-router/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/apps/next-pages-router/schemas/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/routes/api/generated/api-keys.$id.ts b/apps/react-router-app/src/routes/api/generated/api-keys.$id.ts new file mode 100644 index 00000000..ecaff457 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/api-keys.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId reactRouterAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function loader() {} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId reactRouterAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/api-keys.ts b/apps/react-router-app/src/routes/api/generated/api-keys.ts new file mode 100644 index 00000000..08a1452a --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/api-keys.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId reactRouterAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId reactRouterAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/attachments.$id.ts b/apps/react-router-app/src/routes/api/generated/attachments.$id.ts new file mode 100644 index 00000000..381bfe64 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/attachments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId reactRouterAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId reactRouterAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/attachments.ts b/apps/react-router-app/src/routes/api/generated/attachments.ts new file mode 100644 index 00000000..a492fd25 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/attachments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId reactRouterAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId reactRouterAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/audit-logs.$id.ts b/apps/react-router-app/src/routes/api/generated/audit-logs.$id.ts new file mode 100644 index 00000000..c39c88ec --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/audit-logs.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId reactRouterAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function loader() {} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId reactRouterAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/audit-logs.ts b/apps/react-router-app/src/routes/api/generated/audit-logs.ts new file mode 100644 index 00000000..ff2a850b --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/audit-logs.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId reactRouterAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId reactRouterAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/catalog-items.$id.ts b/apps/react-router-app/src/routes/api/generated/catalog-items.$id.ts new file mode 100644 index 00000000..1ed7a7c6 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/catalog-items.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId reactRouterAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function loader() {} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId reactRouterAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/catalog-items.ts b/apps/react-router-app/src/routes/api/generated/catalog-items.ts new file mode 100644 index 00000000..04904cbd --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/catalog-items.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId reactRouterAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId reactRouterAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/comments.$id.ts b/apps/react-router-app/src/routes/api/generated/comments.$id.ts new file mode 100644 index 00000000..e78110a0 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/comments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId reactRouterAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update comment + * @description Updates an existing comment + * @operationId reactRouterAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/comments.ts b/apps/react-router-app/src/routes/api/generated/comments.ts new file mode 100644 index 00000000..c8e5e0f7 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/comments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId reactRouterAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create comment + * @description Creates a new comment + * @operationId reactRouterAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/customers.$id.ts b/apps/react-router-app/src/routes/api/generated/customers.$id.ts new file mode 100644 index 00000000..1a6294fc --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/customers.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId reactRouterAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function loader() {} + +/** + * Update customer + * @description Updates an existing customer + * @operationId reactRouterAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/customers.ts b/apps/react-router-app/src/routes/api/generated/customers.ts new file mode 100644 index 00000000..c8723b47 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/customers.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId reactRouterAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create customer + * @description Creates a new customer + * @operationId reactRouterAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/departments.$id.ts b/apps/react-router-app/src/routes/api/generated/departments.$id.ts new file mode 100644 index 00000000..19aa2a90 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/departments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId reactRouterAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update department + * @description Updates an existing department + * @operationId reactRouterAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/departments.ts b/apps/react-router-app/src/routes/api/generated/departments.ts new file mode 100644 index 00000000..f2704fb6 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/departments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId reactRouterAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create department + * @description Creates a new department + * @operationId reactRouterAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/documents.$id.ts b/apps/react-router-app/src/routes/api/generated/documents.$id.ts new file mode 100644 index 00000000..b44d4d3b --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/documents.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId reactRouterAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update document + * @description Updates an existing document + * @operationId reactRouterAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/documents.ts b/apps/react-router-app/src/routes/api/generated/documents.ts new file mode 100644 index 00000000..83ffeabd --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/documents.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId reactRouterAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create document + * @description Creates a new document + * @operationId reactRouterAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/exports.$id.ts b/apps/react-router-app/src/routes/api/generated/exports.$id.ts new file mode 100644 index 00000000..17cee319 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/exports.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId reactRouterAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function loader() {} + +/** + * Update export + * @description Updates an existing export + * @operationId reactRouterAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/exports.ts b/apps/react-router-app/src/routes/api/generated/exports.ts new file mode 100644 index 00000000..6fe27435 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/exports.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId reactRouterAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create export + * @description Creates a new export + * @operationId reactRouterAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/invoices.$id.ts b/apps/react-router-app/src/routes/api/generated/invoices.$id.ts new file mode 100644 index 00000000..f904ebdb --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/invoices.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId reactRouterAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function loader() {} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId reactRouterAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/invoices.ts b/apps/react-router-app/src/routes/api/generated/invoices.ts new file mode 100644 index 00000000..4d852965 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/invoices.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId reactRouterAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId reactRouterAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/members.$id.ts b/apps/react-router-app/src/routes/api/generated/members.$id.ts new file mode 100644 index 00000000..32213d61 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/members.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId reactRouterAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function loader() {} + +/** + * Update member + * @description Updates an existing member + * @operationId reactRouterAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/members.ts b/apps/react-router-app/src/routes/api/generated/members.ts new file mode 100644 index 00000000..5d04f60b --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/members.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId reactRouterAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create member + * @description Creates a new member + * @operationId reactRouterAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/notifications.$id.ts b/apps/react-router-app/src/routes/api/generated/notifications.$id.ts new file mode 100644 index 00000000..79a67b06 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/notifications.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId reactRouterAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function loader() {} + +/** + * Update notification + * @description Updates an existing notification + * @operationId reactRouterAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/notifications.ts b/apps/react-router-app/src/routes/api/generated/notifications.ts new file mode 100644 index 00000000..b85a1b85 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/notifications.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId reactRouterAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create notification + * @description Creates a new notification + * @operationId reactRouterAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/orders.$id.ts b/apps/react-router-app/src/routes/api/generated/orders.$id.ts new file mode 100644 index 00000000..59678ad9 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/orders.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId reactRouterAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function loader() {} + +/** + * Update order + * @description Updates an existing order + * @operationId reactRouterAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/orders.ts b/apps/react-router-app/src/routes/api/generated/orders.ts new file mode 100644 index 00000000..a4922c12 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/orders.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId reactRouterAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create order + * @description Creates a new order + * @operationId reactRouterAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/organizations.$id.ts b/apps/react-router-app/src/routes/api/generated/organizations.$id.ts new file mode 100644 index 00000000..4510ba85 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/organizations.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId reactRouterAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function loader() {} + +/** + * Update organization + * @description Updates an existing organization + * @operationId reactRouterAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/organizations.ts b/apps/react-router-app/src/routes/api/generated/organizations.ts new file mode 100644 index 00000000..8d309132 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/organizations.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId reactRouterAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create organization + * @description Creates a new organization + * @operationId reactRouterAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/payments.$id.ts b/apps/react-router-app/src/routes/api/generated/payments.$id.ts new file mode 100644 index 00000000..a0a0c5df --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/payments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId reactRouterAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update payment + * @description Updates an existing payment + * @operationId reactRouterAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/payments.ts b/apps/react-router-app/src/routes/api/generated/payments.ts new file mode 100644 index 00000000..019a6696 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/payments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId reactRouterAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create payment + * @description Creates a new payment + * @operationId reactRouterAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/products.$id.ts b/apps/react-router-app/src/routes/api/generated/products.$id.ts new file mode 100644 index 00000000..3f6200d4 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/products.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId reactRouterAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function loader() {} + +/** + * Update product + * @description Updates an existing product + * @operationId reactRouterAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/products.ts b/apps/react-router-app/src/routes/api/generated/products.ts new file mode 100644 index 00000000..3a975e79 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/products.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId reactRouterAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create product + * @description Creates a new product + * @operationId reactRouterAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/projects.$id.ts b/apps/react-router-app/src/routes/api/generated/projects.$id.ts new file mode 100644 index 00000000..bdabcb8c --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/projects.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId reactRouterAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function loader() {} + +/** + * Update project + * @description Updates an existing project + * @operationId reactRouterAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/projects.ts b/apps/react-router-app/src/routes/api/generated/projects.ts new file mode 100644 index 00000000..af2c5d26 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/projects.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId reactRouterAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create project + * @description Creates a new project + * @operationId reactRouterAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/refunds.$id.ts b/apps/react-router-app/src/routes/api/generated/refunds.$id.ts new file mode 100644 index 00000000..717b119c --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/refunds.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId reactRouterAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function loader() {} + +/** + * Update refund + * @description Updates an existing refund + * @operationId reactRouterAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/refunds.ts b/apps/react-router-app/src/routes/api/generated/refunds.ts new file mode 100644 index 00000000..cb4c093e --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/refunds.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId reactRouterAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create refund + * @description Creates a new refund + * @operationId reactRouterAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/reports.$id.ts b/apps/react-router-app/src/routes/api/generated/reports.$id.ts new file mode 100644 index 00000000..4518e4b8 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/reports.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId reactRouterAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function loader() {} + +/** + * Update report + * @description Updates an existing report + * @operationId reactRouterAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/reports.ts b/apps/react-router-app/src/routes/api/generated/reports.ts new file mode 100644 index 00000000..70947354 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/reports.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId reactRouterAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create report + * @description Creates a new report + * @operationId reactRouterAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/sessions.$id.ts b/apps/react-router-app/src/routes/api/generated/sessions.$id.ts new file mode 100644 index 00000000..2b96c260 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/sessions.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId reactRouterAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function loader() {} + +/** + * Update session + * @description Updates an existing session + * @operationId reactRouterAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/sessions.ts b/apps/react-router-app/src/routes/api/generated/sessions.ts new file mode 100644 index 00000000..c18425c0 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/sessions.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId reactRouterAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create session + * @description Creates a new session + * @operationId reactRouterAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/subscriptions.$id.ts b/apps/react-router-app/src/routes/api/generated/subscriptions.$id.ts new file mode 100644 index 00000000..f75be2e4 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/subscriptions.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId reactRouterAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function loader() {} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId reactRouterAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/subscriptions.ts b/apps/react-router-app/src/routes/api/generated/subscriptions.ts new file mode 100644 index 00000000..7eaa4d9d --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/subscriptions.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId reactRouterAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId reactRouterAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/tasks.$id.ts b/apps/react-router-app/src/routes/api/generated/tasks.$id.ts new file mode 100644 index 00000000..f87de2b2 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/tasks.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId reactRouterAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function loader() {} + +/** + * Update task + * @description Updates an existing task + * @operationId reactRouterAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/tasks.ts b/apps/react-router-app/src/routes/api/generated/tasks.ts new file mode 100644 index 00000000..3607833b --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/tasks.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId reactRouterAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create task + * @description Creates a new task + * @operationId reactRouterAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/teams.$id.ts b/apps/react-router-app/src/routes/api/generated/teams.$id.ts new file mode 100644 index 00000000..18481e6f --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/teams.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId reactRouterAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function loader() {} + +/** + * Update team + * @description Updates an existing team + * @operationId reactRouterAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/teams.ts b/apps/react-router-app/src/routes/api/generated/teams.ts new file mode 100644 index 00000000..72b332eb --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/teams.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId reactRouterAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create team + * @description Creates a new team + * @operationId reactRouterAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/webhooks.$id.ts b/apps/react-router-app/src/routes/api/generated/webhooks.$id.ts new file mode 100644 index 00000000..b3f7b1f1 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/webhooks.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId reactRouterAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function loader() {} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId reactRouterAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/webhooks.ts b/apps/react-router-app/src/routes/api/generated/webhooks.ts new file mode 100644 index 00000000..576c80d8 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/webhooks.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId reactRouterAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId reactRouterAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/workspaces.$id.ts b/apps/react-router-app/src/routes/api/generated/workspaces.$id.ts new file mode 100644 index 00000000..c20014fa --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/workspaces.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId reactRouterAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function loader() {} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId reactRouterAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/routes/api/generated/workspaces.ts b/apps/react-router-app/src/routes/api/generated/workspaces.ts new file mode 100644 index 00000000..b2eb31a8 --- /dev/null +++ b/apps/react-router-app/src/routes/api/generated/workspaces.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId reactRouterAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId reactRouterAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function action() {} diff --git a/apps/react-router-app/src/types/generated/api-keys-entity.ts b/apps/react-router-app/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/react-router-app/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/api-keys-input.ts b/apps/react-router-app/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/react-router-app/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/attachments-entity.ts b/apps/react-router-app/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/react-router-app/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/attachments-input.ts b/apps/react-router-app/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/react-router-app/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/audit-logs-entity.ts b/apps/react-router-app/src/types/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/apps/react-router-app/src/types/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/audit-logs-input.ts b/apps/react-router-app/src/types/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/apps/react-router-app/src/types/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/catalog-items-entity.ts b/apps/react-router-app/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/react-router-app/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/catalog-items-input.ts b/apps/react-router-app/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/react-router-app/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/comments-entity.ts b/apps/react-router-app/src/types/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/apps/react-router-app/src/types/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/comments-input.ts b/apps/react-router-app/src/types/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/apps/react-router-app/src/types/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/customers-entity.ts b/apps/react-router-app/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/react-router-app/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/customers-input.ts b/apps/react-router-app/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/react-router-app/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/departments-entity.ts b/apps/react-router-app/src/types/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/apps/react-router-app/src/types/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/departments-input.ts b/apps/react-router-app/src/types/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/apps/react-router-app/src/types/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/documents-entity.ts b/apps/react-router-app/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/react-router-app/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/documents-input.ts b/apps/react-router-app/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/react-router-app/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/exports-entity.ts b/apps/react-router-app/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/react-router-app/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/exports-input.ts b/apps/react-router-app/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/react-router-app/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/invoices-entity.ts b/apps/react-router-app/src/types/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/apps/react-router-app/src/types/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/invoices-input.ts b/apps/react-router-app/src/types/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/apps/react-router-app/src/types/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/members-entity.ts b/apps/react-router-app/src/types/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/apps/react-router-app/src/types/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/members-input.ts b/apps/react-router-app/src/types/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/apps/react-router-app/src/types/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/notifications-entity.ts b/apps/react-router-app/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/react-router-app/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/notifications-input.ts b/apps/react-router-app/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/react-router-app/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/orders-entity.ts b/apps/react-router-app/src/types/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/apps/react-router-app/src/types/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/orders-input.ts b/apps/react-router-app/src/types/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/apps/react-router-app/src/types/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/organizations-entity.ts b/apps/react-router-app/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/react-router-app/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/react-router-app/src/types/generated/organizations-input.ts b/apps/react-router-app/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/react-router-app/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/payments-entity.ts b/apps/react-router-app/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/react-router-app/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/payments-input.ts b/apps/react-router-app/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/react-router-app/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/products-entity.ts b/apps/react-router-app/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/react-router-app/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/products-input.ts b/apps/react-router-app/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/react-router-app/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/projects-entity.ts b/apps/react-router-app/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/react-router-app/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/react-router-app/src/types/generated/projects-input.ts b/apps/react-router-app/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/react-router-app/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/refunds-entity.ts b/apps/react-router-app/src/types/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/apps/react-router-app/src/types/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/refunds-input.ts b/apps/react-router-app/src/types/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/apps/react-router-app/src/types/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/reports-entity.ts b/apps/react-router-app/src/types/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/apps/react-router-app/src/types/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/reports-input.ts b/apps/react-router-app/src/types/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/apps/react-router-app/src/types/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/sessions-entity.ts b/apps/react-router-app/src/types/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/apps/react-router-app/src/types/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/sessions-input.ts b/apps/react-router-app/src/types/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/apps/react-router-app/src/types/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/subscriptions-entity.ts b/apps/react-router-app/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/react-router-app/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/subscriptions-input.ts b/apps/react-router-app/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/react-router-app/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/tasks-entity.ts b/apps/react-router-app/src/types/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/apps/react-router-app/src/types/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/tasks-input.ts b/apps/react-router-app/src/types/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/apps/react-router-app/src/types/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/teams-entity.ts b/apps/react-router-app/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/react-router-app/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/teams-input.ts b/apps/react-router-app/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/react-router-app/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/webhooks-entity.ts b/apps/react-router-app/src/types/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/apps/react-router-app/src/types/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/webhooks-input.ts b/apps/react-router-app/src/types/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/apps/react-router-app/src/types/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/react-router-app/src/types/generated/workspaces-entity.ts b/apps/react-router-app/src/types/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/apps/react-router-app/src/types/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/apps/react-router-app/src/types/generated/workspaces-input.ts b/apps/react-router-app/src/types/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/apps/react-router-app/src/types/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/public/openapi.json b/apps/tanstack-app/public/openapi.json index c6d26468..4922db98 100644 --- a/apps/tanstack-app/public/openapi.json +++ b/apps/tanstack-app/public/openapi.json @@ -6,23 +6,54 @@ "description": "OpenAPI document generated from TanStack file routes." }, "paths": { - "/reports/{reportId}/summary": { + "/generated/api-keys": { "get": { - "operationId": "tanstackGetReportSummary", - "summary": "Load a report summary.", - "description": "", + "operationId": "tanstackAppScaleListApiKey", + "summary": "List api-keys", + "description": "Returns a paginated list of api-keys", "tags": [ - "Reports" + "ApiKeys" ], "parameters": [ { - "in": "path", - "name": "reportId", - "required": true, + "in": "query", + "name": "page", + "required": false, "schema": { "type": "string" }, - "example": "123" + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" } ], "responses": { @@ -31,36 +62,80 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportSummary" + "$ref": "#/components/schemas/ApiKeyListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateApiKey", + "summary": "Create apikey", + "description": "Creates a new apikey", + "tags": [ + "ApiKeys" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateApiKeyInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyEntity" } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "500": { - "$ref": "#/components/responses/500" } } } }, - "/uploads": { + "/generated/api-keys/{id}": { "get": { - "operationId": "tanstackGetUploadInstructions", - "summary": "Load upload instructions.", - "description": "", + "operationId": "tanstackAppScaleGetApiKey", + "summary": "Get apikey by ID", + "description": "Returns a single apikey by identifier", "tags": [ - "Uploads" + "ApiKeys" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } ], - "parameters": [], "responses": { "200": { "description": "Successful response", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ApiKeyEntity" } } } @@ -74,13 +149,23 @@ } }, "post": { - "operationId": "tanstackCreateUpload", - "summary": "Create an upload record.", - "description": "", + "operationId": "tanstackAppScaleUpdateApiKey", + "summary": "Update apikey", + "description": "Updates an existing apikey", "tags": [ - "Uploads" + "ApiKeys" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } ], - "parameters": [], "security": [ { "BearerAuth": [] @@ -88,9 +173,9 @@ ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/AssetUploadInput" + "$ref": "#/components/schemas/UpdateApiKeyInput" } } } @@ -101,7 +186,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AssetUpload" + "$ref": "#/components/schemas/ApiKeyEntity" } } } @@ -115,24 +200,54 @@ } } }, - "/users/{id}": { + "/generated/attachments": { "get": { - "operationId": "tanstackGetUserById", - "summary": "Get user", - "description": "", + "operationId": "tanstackAppScaleListAttachment", + "summary": "List attachments", + "description": "Returns a paginated list of attachments", "tags": [ - "Users", - "Identity" + "Attachments" ], "parameters": [ { - "in": "path", - "name": "id", - "required": true, + "in": "query", + "name": "page", + "required": false, "schema": { "type": "string" }, - "example": "123" + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" } ], "responses": { @@ -141,38 +256,98 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/AttachmentListResponse" } } - }, - "headers": { - "X-Request-Id": { - "description": "Trace identifier", + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateAttachment", + "summary": "Create attachment", + "description": "Creates a new attachment", + "tags": [ + "Attachments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAttachmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/AttachmentEntity" } } + } + } + } + } + }, + "/generated/attachments/{id}": { + "get": { + "operationId": "tanstackAppScaleGetAttachment", + "summary": "Get attachment by ID", + "description": "Returns a single attachment by identifier", + "tags": [ + "Attachments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" }, - "links": { - "updateUser": { - "operationId": "tanstackUpdateUserById" + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttachmentEntity" + } } } }, - "401": { - "$ref": "#/components/responses/401" + "400": { + "$ref": "#/components/responses/400" }, - "403": { - "$ref": "#/components/responses/403" + "500": { + "$ref": "#/components/responses/500" } } }, "post": { - "operationId": "tanstackUpdateUserById", - "summary": "Update a single user.", - "description": "", + "operationId": "tanstackAppScaleUpdateAttachment", + "summary": "Update attachment", + "description": "Updates an existing attachment", "tags": [ - "Users" + "Attachments" ], "parameters": [ { @@ -185,11 +360,16 @@ "example": "123" } ], + "security": [ + { + "BearerAuth": [] + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateUserInput" + "$ref": "#/components/schemas/UpdateAttachmentInput" } } } @@ -200,7 +380,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/AttachmentEntity" } } } @@ -213,108 +393,8277 @@ } } } - } - }, - "tags": [ - { - "name": "Reports" - }, - { - "name": "Uploads" }, - { - "name": "Users" - } - ], - "servers": [ - { - "url": "", - "description": "API server" - } - ], - "components": { - "schemas": { - "AssetUpload": { - "type": "object", - "properties": { - "id": { - "type": "string" + "/generated/audit-logs": { + "get": { + "operationId": "tanstackAppScaleListAuditLog", + "summary": "List audit-logs", + "description": "Returns a paginated list of audit-logs", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 }, - "kind": { - "type": "string", - "enum": [ - "avatar", - "report" - ] + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" }, - "url": { + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateAuditLog", + "summary": "Create auditlog", + "description": "Creates a new auditlog", + "tags": [ + "AuditLogs" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAuditLogInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + } + } + } + }, + "/generated/audit-logs/{id}": { + "get": { + "operationId": "tanstackAppScaleGetAuditLog", + "summary": "Get auditlog by ID", + "description": "Returns a single auditlog by identifier", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateAuditLog", + "summary": "Update auditlog", + "description": "Updates an existing auditlog", + "tags": [ + "AuditLogs" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAuditLogInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/catalog-items": { + "get": { + "operationId": "tanstackAppScaleListCatalogItem", + "summary": "List catalog-items", + "description": "Returns a paginated list of catalog-items", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateCatalogItem", + "summary": "Create catalogitem", + "description": "Creates a new catalogitem", + "tags": [ + "Catalog" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCatalogItemInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + } + } + } + }, + "/generated/catalog-items/{id}": { + "get": { + "operationId": "tanstackAppScaleGetCatalogItem", + "summary": "Get catalogitem by ID", + "description": "Returns a single catalogitem by identifier", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateCatalogItem", + "summary": "Update catalogitem", + "description": "Updates an existing catalogitem", + "tags": [ + "Catalog" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCatalogItemInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogItemEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/comments": { + "get": { + "operationId": "tanstackAppScaleListComment", + "summary": "List comments", + "description": "Returns a paginated list of comments", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateComment", + "summary": "Create comment", + "description": "Creates a new comment", + "tags": [ + "Comments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + } + } + } + }, + "/generated/comments/{id}": { + "get": { + "operationId": "tanstackAppScaleGetComment", + "summary": "Get comment by ID", + "description": "Returns a single comment by identifier", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateComment", + "summary": "Update comment", + "description": "Updates an existing comment", + "tags": [ + "Comments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCommentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/customers": { + "get": { + "operationId": "tanstackAppScaleListCustomer", + "summary": "List customers", + "description": "Returns a paginated list of customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateCustomer", + "summary": "Create customer", + "description": "Creates a new customer", + "tags": [ + "Customers" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCustomerInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + } + } + } + }, + "/generated/customers/{id}": { + "get": { + "operationId": "tanstackAppScaleGetCustomer", + "summary": "Get customer by ID", + "description": "Returns a single customer by identifier", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateCustomer", + "summary": "Update customer", + "description": "Updates an existing customer", + "tags": [ + "Customers" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCustomerInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/departments": { + "get": { + "operationId": "tanstackAppScaleListDepartment", + "summary": "List departments", + "description": "Returns a paginated list of departments", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateDepartment", + "summary": "Create department", + "description": "Creates a new department", + "tags": [ + "Departments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDepartmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + } + } + } + }, + "/generated/departments/{id}": { + "get": { + "operationId": "tanstackAppScaleGetDepartment", + "summary": "Get department by ID", + "description": "Returns a single department by identifier", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateDepartment", + "summary": "Update department", + "description": "Updates an existing department", + "tags": [ + "Departments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDepartmentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepartmentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/documents": { + "get": { + "operationId": "tanstackAppScaleListDocument", + "summary": "List documents", + "description": "Returns a paginated list of documents", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateDocument", + "summary": "Create document", + "description": "Creates a new document", + "tags": [ + "Documents" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDocumentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + } + } + } + }, + "/generated/documents/{id}": { + "get": { + "operationId": "tanstackAppScaleGetDocument", + "summary": "Get document by ID", + "description": "Returns a single document by identifier", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateDocument", + "summary": "Update document", + "description": "Updates an existing document", + "tags": [ + "Documents" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDocumentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/exports": { + "get": { + "operationId": "tanstackAppScaleListExport", + "summary": "List exports", + "description": "Returns a paginated list of exports", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateExport", + "summary": "Create export", + "description": "Creates a new export", + "tags": [ + "Exports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateExportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + } + } + } + }, + "/generated/exports/{id}": { + "get": { + "operationId": "tanstackAppScaleGetExport", + "summary": "Get export by ID", + "description": "Returns a single export by identifier", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateExport", + "summary": "Update export", + "description": "Updates an existing export", + "tags": [ + "Exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateExportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/invoices": { + "get": { + "operationId": "tanstackAppScaleListInvoice", + "summary": "List invoices", + "description": "Returns a paginated list of invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateInvoice", + "summary": "Create invoice", + "description": "Creates a new invoice", + "tags": [ + "Invoices" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInvoiceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + } + } + } + }, + "/generated/invoices/{id}": { + "get": { + "operationId": "tanstackAppScaleGetInvoice", + "summary": "Get invoice by ID", + "description": "Returns a single invoice by identifier", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateInvoice", + "summary": "Update invoice", + "description": "Updates an existing invoice", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateInvoiceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvoiceEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/members": { + "get": { + "operationId": "tanstackAppScaleListMember", + "summary": "List members", + "description": "Returns a paginated list of members", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateMember", + "summary": "Create member", + "description": "Creates a new member", + "tags": [ + "Members" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMemberInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + } + } + } + }, + "/generated/members/{id}": { + "get": { + "operationId": "tanstackAppScaleGetMember", + "summary": "Get member by ID", + "description": "Returns a single member by identifier", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateMember", + "summary": "Update member", + "description": "Updates an existing member", + "tags": [ + "Members" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMemberInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/notifications": { + "get": { + "operationId": "tanstackAppScaleListNotification", + "summary": "List notifications", + "description": "Returns a paginated list of notifications", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateNotification", + "summary": "Create notification", + "description": "Creates a new notification", + "tags": [ + "Notifications" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotificationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + } + } + } + }, + "/generated/notifications/{id}": { + "get": { + "operationId": "tanstackAppScaleGetNotification", + "summary": "Get notification by ID", + "description": "Returns a single notification by identifier", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateNotification", + "summary": "Update notification", + "description": "Updates an existing notification", + "tags": [ + "Notifications" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateNotificationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/orders": { + "get": { + "operationId": "tanstackAppScaleListOrder", + "summary": "List orders", + "description": "Returns a paginated list of orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateOrder", + "summary": "Create order", + "description": "Creates a new order", + "tags": [ + "Orders" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrderInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + } + } + } + }, + "/generated/orders/{id}": { + "get": { + "operationId": "tanstackAppScaleGetOrder", + "summary": "Get order by ID", + "description": "Returns a single order by identifier", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateOrder", + "summary": "Update order", + "description": "Updates an existing order", + "tags": [ + "Orders" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrderEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/organizations": { + "get": { + "operationId": "tanstackAppScaleListOrganization", + "summary": "List organizations", + "description": "Returns a paginated list of organizations", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateOrganization", + "summary": "Create organization", + "description": "Creates a new organization", + "tags": [ + "Organizations" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrganizationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + } + } + } + }, + "/generated/organizations/{id}": { + "get": { + "operationId": "tanstackAppScaleGetOrganization", + "summary": "Get organization by ID", + "description": "Returns a single organization by identifier", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateOrganization", + "summary": "Update organization", + "description": "Updates an existing organization", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrganizationInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/payments": { + "get": { + "operationId": "tanstackAppScaleListPayment", + "summary": "List payments", + "description": "Returns a paginated list of payments", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreatePayment", + "summary": "Create payment", + "description": "Creates a new payment", + "tags": [ + "Payments" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePaymentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + } + } + } + }, + "/generated/payments/{id}": { + "get": { + "operationId": "tanstackAppScaleGetPayment", + "summary": "Get payment by ID", + "description": "Returns a single payment by identifier", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdatePayment", + "summary": "Update payment", + "description": "Updates an existing payment", + "tags": [ + "Payments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePaymentInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaymentEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/products": { + "get": { + "operationId": "tanstackAppScaleListProduct", + "summary": "List products", + "description": "Returns a paginated list of products", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateProduct", + "summary": "Create product", + "description": "Creates a new product", + "tags": [ + "Products" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProductInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + } + } + } + }, + "/generated/products/{id}": { + "get": { + "operationId": "tanstackAppScaleGetProduct", + "summary": "Get product by ID", + "description": "Returns a single product by identifier", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateProduct", + "summary": "Update product", + "description": "Updates an existing product", + "tags": [ + "Products" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProductInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/projects": { + "get": { + "operationId": "tanstackAppScaleListProject", + "summary": "List projects", + "description": "Returns a paginated list of projects", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateProject", + "summary": "Create project", + "description": "Creates a new project", + "tags": [ + "Projects" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProjectInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + } + } + } + }, + "/generated/projects/{id}": { + "get": { + "operationId": "tanstackAppScaleGetProject", + "summary": "Get project by ID", + "description": "Returns a single project by identifier", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateProject", + "summary": "Update project", + "description": "Updates an existing project", + "tags": [ + "Projects" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/refunds": { + "get": { + "operationId": "tanstackAppScaleListRefund", + "summary": "List refunds", + "description": "Returns a paginated list of refunds", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateRefund", + "summary": "Create refund", + "description": "Creates a new refund", + "tags": [ + "Refunds" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRefundInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + } + } + } + }, + "/generated/refunds/{id}": { + "get": { + "operationId": "tanstackAppScaleGetRefund", + "summary": "Get refund by ID", + "description": "Returns a single refund by identifier", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateRefund", + "summary": "Update refund", + "description": "Updates an existing refund", + "tags": [ + "Refunds" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRefundInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefundEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/reports": { + "get": { + "operationId": "tanstackAppScaleListReport", + "summary": "List reports", + "description": "Returns a paginated list of reports", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateReport", + "summary": "Create report", + "description": "Creates a new report", + "tags": [ + "Reports" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } + } + } + } + }, + "/generated/reports/{id}": { + "get": { + "operationId": "tanstackAppScaleGetReport", + "summary": "Get report by ID", + "description": "Returns a single report by identifier", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "reportId", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateReport", + "summary": "Update report", + "description": "Updates an existing report", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "reportId", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateReportInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/reports/{reportId}/summary": { + "get": { + "operationId": "tanstackGetReportSummary", + "summary": "Load a report summary.", + "description": "", + "tags": [ + "Reports" + ], + "parameters": [ + { + "in": "path", + "name": "reportId", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportSummary" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + } + }, + "/generated/sessions": { + "get": { + "operationId": "tanstackAppScaleListSession", + "summary": "List sessions", + "description": "Returns a paginated list of sessions", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateSession", + "summary": "Create session", + "description": "Creates a new session", + "tags": [ + "Sessions" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSessionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionEntity" + } + } + } + } + } + } + }, + "/generated/sessions/{id}": { + "get": { + "operationId": "tanstackAppScaleGetSession", + "summary": "Get session by ID", + "description": "Returns a single session by identifier", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateSession", + "summary": "Update session", + "description": "Updates an existing session", + "tags": [ + "Sessions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSessionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/subscriptions": { + "get": { + "operationId": "tanstackAppScaleListSubscription", + "summary": "List subscriptions", + "description": "Returns a paginated list of subscriptions", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateSubscription", + "summary": "Create subscription", + "description": "Creates a new subscription", + "tags": [ + "Subscriptions" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSubscriptionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionEntity" + } + } + } + } + } + } + }, + "/generated/subscriptions/{id}": { + "get": { + "operationId": "tanstackAppScaleGetSubscription", + "summary": "Get subscription by ID", + "description": "Returns a single subscription by identifier", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateSubscription", + "summary": "Update subscription", + "description": "Updates an existing subscription", + "tags": [ + "Subscriptions" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSubscriptionInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/tasks": { + "get": { + "operationId": "tanstackAppScaleListTask", + "summary": "List tasks", + "description": "Returns a paginated list of tasks", + "tags": [ + "Tasks" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateTask", + "summary": "Create task", + "description": "Creates a new task", + "tags": [ + "Tasks" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTaskInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskEntity" + } + } + } + } + } + } + }, + "/generated/tasks/{id}": { + "get": { + "operationId": "tanstackAppScaleGetTask", + "summary": "Get task by ID", + "description": "Returns a single task by identifier", + "tags": [ + "Tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateTask", + "summary": "Update task", + "description": "Updates an existing task", + "tags": [ + "Tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTaskInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/teams": { + "get": { + "operationId": "tanstackAppScaleListTeam", + "summary": "List teams", + "description": "Returns a paginated list of teams", + "tags": [ + "Teams" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateTeam", + "summary": "Create team", + "description": "Creates a new team", + "tags": [ + "Teams" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTeamInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamEntity" + } + } + } + } + } + } + }, + "/generated/teams/{id}": { + "get": { + "operationId": "tanstackAppScaleGetTeam", + "summary": "Get team by ID", + "description": "Returns a single team by identifier", + "tags": [ + "Teams" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateTeam", + "summary": "Update team", + "description": "Updates an existing team", + "tags": [ + "Teams" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTeamInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/uploads": { + "get": { + "operationId": "tanstackGetUploadInstructions", + "summary": "Load upload instructions.", + "description": "", + "tags": [ + "Uploads" + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackCreateUpload", + "summary": "Create an upload record.", + "description": "", + "tags": [ + "Uploads" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/AssetUploadInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AssetUpload" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/users/{id}": { + "get": { + "operationId": "tanstackGetUserById", + "summary": "Get user", + "description": "", + "tags": [ + "Users", + "Identity" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "headers": { + "X-Request-Id": { + "description": "Trace identifier", + "schema": { + "type": "string" + } + } + }, + "links": { + "updateUser": { + "operationId": "tanstackUpdateUserById" + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + }, + "post": { + "operationId": "tanstackUpdateUserById", + "summary": "Update a single user.", + "description": "", + "tags": [ + "Users" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/webhooks": { + "get": { + "operationId": "tanstackAppScaleListWebhook", + "summary": "List webhooks", + "description": "Returns a paginated list of webhooks", + "tags": [ + "Webhooks" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateWebhook", + "summary": "Create webhook", + "description": "Creates a new webhook", + "tags": [ + "Webhooks" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebhookInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookEntity" + } + } + } + } + } + } + }, + "/generated/webhooks/{id}": { + "get": { + "operationId": "tanstackAppScaleGetWebhook", + "summary": "Get webhook by ID", + "description": "Returns a single webhook by identifier", + "tags": [ + "Webhooks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateWebhook", + "summary": "Update webhook", + "description": "Updates an existing webhook", + "tags": [ + "Webhooks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWebhookInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + }, + "/generated/workspaces": { + "get": { + "operationId": "tanstackAppScaleListWorkspace", + "summary": "List workspaces", + "description": "Returns a paginated list of workspaces", + "tags": [ + "Workspaces" + ], + "parameters": [ + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + }, + "example": "example" + }, + { + "in": "query", + "name": "active", + "required": false, + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "example": "example" + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceListResponse" + } + } + } + } + } + }, + "post": { + "operationId": "tanstackAppScaleCreateWorkspace", + "summary": "Create workspace", + "description": "Creates a new workspace", + "tags": [ + "Workspaces" + ], + "parameters": [], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWorkspaceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceEntity" + } + } + } + } + } + } + }, + "/generated/workspaces/{id}": { + "get": { + "operationId": "tanstackAppScaleGetWorkspace", + "summary": "Get workspace by ID", + "description": "Returns a single workspace by identifier", + "tags": [ + "Workspaces" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceEntity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + } + }, + "post": { + "operationId": "tanstackAppScaleUpdateWorkspace", + "summary": "Update workspace", + "description": "Updates an existing workspace", + "tags": [ + "Workspaces" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "example": "123" + } + ], + "security": [ + { + "BearerAuth": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWorkspaceInput" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceEntity" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + } + } + } + }, + "tags": [ + { + "name": "ApiKeys" + }, + { + "name": "Attachments" + }, + { + "name": "AuditLogs" + }, + { + "name": "Catalog" + }, + { + "name": "Comments" + }, + { + "name": "Customers" + }, + { + "name": "Departments" + }, + { + "name": "Documents" + }, + { + "name": "Exports" + }, + { + "name": "Invoices" + }, + { + "name": "Members" + }, + { + "name": "Notifications" + }, + { + "name": "Orders" + }, + { + "name": "Organizations" + }, + { + "name": "Payments" + }, + { + "name": "Products" + }, + { + "name": "Projects" + }, + { + "name": "Refunds" + }, + { + "name": "Reports" + }, + { + "name": "Sessions" + }, + { + "name": "Subscriptions" + }, + { + "name": "Tasks" + }, + { + "name": "Teams" + }, + { + "name": "Uploads" + }, + { + "name": "Users" + }, + { + "name": "Webhooks" + }, + { + "name": "Workspaces" + } + ], + "servers": [ + { + "url": "", + "description": "API server" + } + ], + "components": { + "schemas": { + "ApiKeyEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "ApiKeyIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ApiKeyListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ApiKeyListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "AssetUpload": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "kind": { + "type": "string", + "enum": [ + "avatar", + "report" + ] + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "kind", + "url" + ] + }, + "AssetUploadInput": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "nullable": false + }, + "kind": { + "type": "string", + "enum": [ + "avatar", + "report" + ], + "nullable": false + } + }, + "required": [ + "fileName", + "kind" + ] + }, + "AttachmentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + }, + "AttachmentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "AttachmentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "AttachmentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "AuditLogEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "AuditLogIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "AuditLogListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "AuditLogListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "CatalogItemEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "CatalogItemIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CatalogItemListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "CatalogItemListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "CommentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "CommentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CommentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "CommentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "CreateApiKeyInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateAttachmentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateAuditLogInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateCatalogItemInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateCommentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateCustomerInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateDepartmentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateDocumentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateExportInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateInvoiceInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateMemberInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateNotificationInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateOrderInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateOrganizationInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreatePaymentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateProductInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateProjectInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateRefundInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateReportInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateSessionInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateSubscriptionInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateTaskInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateTeamInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateWebhookInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CreateWorkspaceInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": false + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "name" + ] + }, + "CustomerEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + }, + "CustomerIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "CustomerListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "CustomerListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "DepartmentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "DepartmentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "DepartmentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "DepartmentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "DocumentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "DocumentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "DocumentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "DocumentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ExportEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ExportIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ExportListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ExportListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "InvoiceEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "InvoiceIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "InvoiceListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "InvoiceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "MemberEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "MemberIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "MemberListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "MemberListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "NotificationEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + }, + "NotificationIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "NotificationListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "NotificationListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "status", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "OrderEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "OrderIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "OrderListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "OrderListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "OrganizationEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "OrganizationIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "OrganizationListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "OrganizationListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "PaymentEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "PaymentIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "PaymentListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "PaymentListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ProductEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "ProductIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ProductListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ProductListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ProjectEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ProjectIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "ProjectListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ProjectListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "RefundEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "RefundIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "RefundListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "RefundListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ReportEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "ReportIdParams": { + "type": "object", + "properties": { + "reportId": { + "type": "string" + } + }, + "required": [ + "reportId" + ] + }, + "ReportListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "ReportListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "ReportSummary": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "published" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "status", + "updatedAt" + ] + }, + "SessionEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "SessionIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "SessionListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "SessionListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "SubscriptionEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + }, + "SubscriptionIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "SubscriptionListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "SubscriptionListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "archived" + ] + } + }, + "required": [ + "id", + "name", + "active", + "status" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "TaskEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "TaskIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "TaskListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "TaskListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "TeamEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + }, + "TeamIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "TeamListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "TeamListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "active", + "createdAt", + "updatedAt" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "UpdateApiKeyInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateAttachmentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateAuditLogInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateCatalogItemInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateCommentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateCustomerInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateDepartmentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateDocumentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateExportInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateInvoiceInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateMemberInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateNotificationInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateOrderInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateOrganizationInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdatePaymentInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateProductInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateProjectInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true } - }, - "required": [ - "id", - "kind", - "url" - ] + } }, - "AssetUploadInput": { + "UpdateRefundInput": { "type": "object", "properties": { - "fileName": { + "name": { "type": "string", - "nullable": false + "nullable": true }, - "kind": { + "description": { "type": "string", - "enum": [ - "avatar", - "report" - ], - "nullable": false + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true } - }, - "required": [ - "fileName", - "kind" - ] + } }, - "ReportIdParams": { + "UpdateReportInput": { "type": "object", "properties": { - "reportId": { - "type": "string" + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true } - }, - "required": [ - "reportId" - ] + } }, - "ReportSummary": { + "UpdateSessionInput": { "type": "object", "properties": { - "id": { - "type": "string" + "name": { + "type": "string", + "nullable": true }, - "title": { - "type": "string" + "description": { + "type": "string", + "nullable": true }, - "status": { + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateSubscriptionInput": { + "type": "object", + "properties": { + "name": { "type": "string", - "enum": [ - "draft", - "published" - ] + "nullable": true }, - "updatedAt": { - "type": "string" + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true } - }, - "required": [ - "id", - "title", - "status", - "updatedAt" - ] + } + }, + "UpdateTaskInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateTeamInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } }, "UpdateUserInput": { "type": "object", @@ -329,6 +8678,40 @@ } } }, + "UpdateWebhookInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, + "UpdateWorkspaceInput": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + } + } + }, "User": { "type": "object", "properties": { @@ -362,6 +8745,204 @@ "required": [ "id" ] + }, + "WebhookEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "WebhookIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "WebhookListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "WebhookListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] + }, + "WorkspaceEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + }, + "WorkspaceIdParams": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "WorkspaceListQuery": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "limit": { + "type": "string" + }, + "search": { + "type": "string" + }, + "active": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + } + }, + "WorkspaceListResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "active": { + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "active" + ] + } + }, + "total": { + "type": "number" + }, + "page": { + "type": "number" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "items", + "total", + "page", + "limit" + ] } }, "responses": { diff --git a/apps/tanstack-app/src/routes/api/generated/api-keys.$id.ts b/apps/tanstack-app/src/routes/api/generated/api-keys.$id.ts new file mode 100644 index 00000000..6be77ab7 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/api-keys.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId tanstackAppScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function loader() {} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId tanstackAppScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/api-keys.ts b/apps/tanstack-app/src/routes/api/generated/api-keys.ts new file mode 100644 index 00000000..ed1c387a --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/api-keys.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId tanstackAppScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId tanstackAppScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/attachments.$id.ts b/apps/tanstack-app/src/routes/api/generated/attachments.$id.ts new file mode 100644 index 00000000..fe1b53cb --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/attachments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId tanstackAppScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId tanstackAppScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/attachments.ts b/apps/tanstack-app/src/routes/api/generated/attachments.ts new file mode 100644 index 00000000..18a209c4 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/attachments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId tanstackAppScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId tanstackAppScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/audit-logs.$id.ts b/apps/tanstack-app/src/routes/api/generated/audit-logs.$id.ts new file mode 100644 index 00000000..4b16b407 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/audit-logs.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId tanstackAppScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function loader() {} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId tanstackAppScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/audit-logs.ts b/apps/tanstack-app/src/routes/api/generated/audit-logs.ts new file mode 100644 index 00000000..95dcb5d1 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/audit-logs.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId tanstackAppScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId tanstackAppScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/catalog-items.$id.ts b/apps/tanstack-app/src/routes/api/generated/catalog-items.$id.ts new file mode 100644 index 00000000..c668e407 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/catalog-items.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId tanstackAppScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function loader() {} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId tanstackAppScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/catalog-items.ts b/apps/tanstack-app/src/routes/api/generated/catalog-items.ts new file mode 100644 index 00000000..72a9c6b8 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/catalog-items.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId tanstackAppScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId tanstackAppScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/comments.$id.ts b/apps/tanstack-app/src/routes/api/generated/comments.$id.ts new file mode 100644 index 00000000..929392dd --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/comments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId tanstackAppScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update comment + * @description Updates an existing comment + * @operationId tanstackAppScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/comments.ts b/apps/tanstack-app/src/routes/api/generated/comments.ts new file mode 100644 index 00000000..2b3449d8 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/comments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId tanstackAppScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create comment + * @description Creates a new comment + * @operationId tanstackAppScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/customers.$id.ts b/apps/tanstack-app/src/routes/api/generated/customers.$id.ts new file mode 100644 index 00000000..ab45eed3 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/customers.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId tanstackAppScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function loader() {} + +/** + * Update customer + * @description Updates an existing customer + * @operationId tanstackAppScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/customers.ts b/apps/tanstack-app/src/routes/api/generated/customers.ts new file mode 100644 index 00000000..49dc7b0c --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/customers.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId tanstackAppScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create customer + * @description Creates a new customer + * @operationId tanstackAppScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/departments.$id.ts b/apps/tanstack-app/src/routes/api/generated/departments.$id.ts new file mode 100644 index 00000000..358171b1 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/departments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId tanstackAppScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update department + * @description Updates an existing department + * @operationId tanstackAppScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/departments.ts b/apps/tanstack-app/src/routes/api/generated/departments.ts new file mode 100644 index 00000000..51b6d7f9 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/departments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId tanstackAppScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create department + * @description Creates a new department + * @operationId tanstackAppScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/documents.$id.ts b/apps/tanstack-app/src/routes/api/generated/documents.$id.ts new file mode 100644 index 00000000..6f5d4836 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/documents.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId tanstackAppScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update document + * @description Updates an existing document + * @operationId tanstackAppScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/documents.ts b/apps/tanstack-app/src/routes/api/generated/documents.ts new file mode 100644 index 00000000..d47c931c --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/documents.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId tanstackAppScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create document + * @description Creates a new document + * @operationId tanstackAppScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/exports.$id.ts b/apps/tanstack-app/src/routes/api/generated/exports.$id.ts new file mode 100644 index 00000000..b84a21e0 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/exports.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId tanstackAppScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function loader() {} + +/** + * Update export + * @description Updates an existing export + * @operationId tanstackAppScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/exports.ts b/apps/tanstack-app/src/routes/api/generated/exports.ts new file mode 100644 index 00000000..6efa5988 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/exports.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId tanstackAppScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create export + * @description Creates a new export + * @operationId tanstackAppScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/invoices.$id.ts b/apps/tanstack-app/src/routes/api/generated/invoices.$id.ts new file mode 100644 index 00000000..4b713f26 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/invoices.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId tanstackAppScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function loader() {} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId tanstackAppScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/invoices.ts b/apps/tanstack-app/src/routes/api/generated/invoices.ts new file mode 100644 index 00000000..77978a16 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/invoices.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId tanstackAppScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId tanstackAppScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/members.$id.ts b/apps/tanstack-app/src/routes/api/generated/members.$id.ts new file mode 100644 index 00000000..80be7fac --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/members.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId tanstackAppScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function loader() {} + +/** + * Update member + * @description Updates an existing member + * @operationId tanstackAppScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/members.ts b/apps/tanstack-app/src/routes/api/generated/members.ts new file mode 100644 index 00000000..a0c47e1a --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/members.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId tanstackAppScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create member + * @description Creates a new member + * @operationId tanstackAppScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/notifications.$id.ts b/apps/tanstack-app/src/routes/api/generated/notifications.$id.ts new file mode 100644 index 00000000..ea010d25 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/notifications.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId tanstackAppScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function loader() {} + +/** + * Update notification + * @description Updates an existing notification + * @operationId tanstackAppScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/notifications.ts b/apps/tanstack-app/src/routes/api/generated/notifications.ts new file mode 100644 index 00000000..66fe04c8 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/notifications.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId tanstackAppScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create notification + * @description Creates a new notification + * @operationId tanstackAppScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/orders.$id.ts b/apps/tanstack-app/src/routes/api/generated/orders.$id.ts new file mode 100644 index 00000000..8328797e --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/orders.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId tanstackAppScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function loader() {} + +/** + * Update order + * @description Updates an existing order + * @operationId tanstackAppScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/orders.ts b/apps/tanstack-app/src/routes/api/generated/orders.ts new file mode 100644 index 00000000..57b8c5f8 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/orders.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId tanstackAppScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create order + * @description Creates a new order + * @operationId tanstackAppScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/organizations.$id.ts b/apps/tanstack-app/src/routes/api/generated/organizations.$id.ts new file mode 100644 index 00000000..1e31598e --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/organizations.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId tanstackAppScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function loader() {} + +/** + * Update organization + * @description Updates an existing organization + * @operationId tanstackAppScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/organizations.ts b/apps/tanstack-app/src/routes/api/generated/organizations.ts new file mode 100644 index 00000000..07e6ce34 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/organizations.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId tanstackAppScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create organization + * @description Creates a new organization + * @operationId tanstackAppScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/payments.$id.ts b/apps/tanstack-app/src/routes/api/generated/payments.$id.ts new file mode 100644 index 00000000..94e28e7b --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/payments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId tanstackAppScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update payment + * @description Updates an existing payment + * @operationId tanstackAppScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/payments.ts b/apps/tanstack-app/src/routes/api/generated/payments.ts new file mode 100644 index 00000000..c8eb3d9c --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/payments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId tanstackAppScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create payment + * @description Creates a new payment + * @operationId tanstackAppScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/products.$id.ts b/apps/tanstack-app/src/routes/api/generated/products.$id.ts new file mode 100644 index 00000000..83c887e9 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/products.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId tanstackAppScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function loader() {} + +/** + * Update product + * @description Updates an existing product + * @operationId tanstackAppScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/products.ts b/apps/tanstack-app/src/routes/api/generated/products.ts new file mode 100644 index 00000000..b29c05ac --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/products.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId tanstackAppScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create product + * @description Creates a new product + * @operationId tanstackAppScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/projects.$id.ts b/apps/tanstack-app/src/routes/api/generated/projects.$id.ts new file mode 100644 index 00000000..94537d56 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/projects.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId tanstackAppScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function loader() {} + +/** + * Update project + * @description Updates an existing project + * @operationId tanstackAppScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/projects.ts b/apps/tanstack-app/src/routes/api/generated/projects.ts new file mode 100644 index 00000000..0381786d --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/projects.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId tanstackAppScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create project + * @description Creates a new project + * @operationId tanstackAppScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/refunds.$id.ts b/apps/tanstack-app/src/routes/api/generated/refunds.$id.ts new file mode 100644 index 00000000..ba5cb9b7 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/refunds.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId tanstackAppScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function loader() {} + +/** + * Update refund + * @description Updates an existing refund + * @operationId tanstackAppScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/refunds.ts b/apps/tanstack-app/src/routes/api/generated/refunds.ts new file mode 100644 index 00000000..b09fc04e --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/refunds.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId tanstackAppScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create refund + * @description Creates a new refund + * @operationId tanstackAppScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/reports.$id.ts b/apps/tanstack-app/src/routes/api/generated/reports.$id.ts new file mode 100644 index 00000000..4a81fe91 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/reports.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId tanstackAppScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function loader() {} + +/** + * Update report + * @description Updates an existing report + * @operationId tanstackAppScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/reports.ts b/apps/tanstack-app/src/routes/api/generated/reports.ts new file mode 100644 index 00000000..8a9858b9 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/reports.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId tanstackAppScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create report + * @description Creates a new report + * @operationId tanstackAppScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/sessions.$id.ts b/apps/tanstack-app/src/routes/api/generated/sessions.$id.ts new file mode 100644 index 00000000..c4a53267 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/sessions.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId tanstackAppScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function loader() {} + +/** + * Update session + * @description Updates an existing session + * @operationId tanstackAppScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/sessions.ts b/apps/tanstack-app/src/routes/api/generated/sessions.ts new file mode 100644 index 00000000..5994d134 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/sessions.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId tanstackAppScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create session + * @description Creates a new session + * @operationId tanstackAppScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/subscriptions.$id.ts b/apps/tanstack-app/src/routes/api/generated/subscriptions.$id.ts new file mode 100644 index 00000000..75c85c28 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/subscriptions.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId tanstackAppScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function loader() {} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId tanstackAppScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/subscriptions.ts b/apps/tanstack-app/src/routes/api/generated/subscriptions.ts new file mode 100644 index 00000000..7551e8ee --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/subscriptions.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId tanstackAppScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId tanstackAppScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/tasks.$id.ts b/apps/tanstack-app/src/routes/api/generated/tasks.$id.ts new file mode 100644 index 00000000..64a69b0e --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/tasks.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId tanstackAppScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function loader() {} + +/** + * Update task + * @description Updates an existing task + * @operationId tanstackAppScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/tasks.ts b/apps/tanstack-app/src/routes/api/generated/tasks.ts new file mode 100644 index 00000000..3c79a801 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/tasks.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId tanstackAppScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create task + * @description Creates a new task + * @operationId tanstackAppScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/teams.$id.ts b/apps/tanstack-app/src/routes/api/generated/teams.$id.ts new file mode 100644 index 00000000..5d6d80f7 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/teams.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId tanstackAppScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function loader() {} + +/** + * Update team + * @description Updates an existing team + * @operationId tanstackAppScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/teams.ts b/apps/tanstack-app/src/routes/api/generated/teams.ts new file mode 100644 index 00000000..ba011b6c --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/teams.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId tanstackAppScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create team + * @description Creates a new team + * @operationId tanstackAppScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/webhooks.$id.ts b/apps/tanstack-app/src/routes/api/generated/webhooks.$id.ts new file mode 100644 index 00000000..1d05b55a --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/webhooks.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId tanstackAppScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function loader() {} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId tanstackAppScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/webhooks.ts b/apps/tanstack-app/src/routes/api/generated/webhooks.ts new file mode 100644 index 00000000..8ec933b5 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/webhooks.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId tanstackAppScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId tanstackAppScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/workspaces.$id.ts b/apps/tanstack-app/src/routes/api/generated/workspaces.$id.ts new file mode 100644 index 00000000..18741582 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/workspaces.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId tanstackAppScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function loader() {} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId tanstackAppScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/routes/api/generated/workspaces.ts b/apps/tanstack-app/src/routes/api/generated/workspaces.ts new file mode 100644 index 00000000..4bdfdc62 --- /dev/null +++ b/apps/tanstack-app/src/routes/api/generated/workspaces.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId tanstackAppScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId tanstackAppScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function action() {} diff --git a/apps/tanstack-app/src/types/generated/api-keys-entity.ts b/apps/tanstack-app/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/apps/tanstack-app/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/api-keys-input.ts b/apps/tanstack-app/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/attachments-entity.ts b/apps/tanstack-app/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/apps/tanstack-app/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/attachments-input.ts b/apps/tanstack-app/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/audit-logs-entity.ts b/apps/tanstack-app/src/types/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/audit-logs-input.ts b/apps/tanstack-app/src/types/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/apps/tanstack-app/src/types/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/catalog-items-entity.ts b/apps/tanstack-app/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/catalog-items-input.ts b/apps/tanstack-app/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/comments-entity.ts b/apps/tanstack-app/src/types/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/comments-input.ts b/apps/tanstack-app/src/types/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/customers-entity.ts b/apps/tanstack-app/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/customers-input.ts b/apps/tanstack-app/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/departments-entity.ts b/apps/tanstack-app/src/types/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/apps/tanstack-app/src/types/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/departments-input.ts b/apps/tanstack-app/src/types/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/apps/tanstack-app/src/types/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/documents-entity.ts b/apps/tanstack-app/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/apps/tanstack-app/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/documents-input.ts b/apps/tanstack-app/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/apps/tanstack-app/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/exports-entity.ts b/apps/tanstack-app/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/exports-input.ts b/apps/tanstack-app/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/apps/tanstack-app/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/invoices-entity.ts b/apps/tanstack-app/src/types/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/invoices-input.ts b/apps/tanstack-app/src/types/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/apps/tanstack-app/src/types/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/members-entity.ts b/apps/tanstack-app/src/types/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/apps/tanstack-app/src/types/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/members-input.ts b/apps/tanstack-app/src/types/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/notifications-entity.ts b/apps/tanstack-app/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/notifications-input.ts b/apps/tanstack-app/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/orders-entity.ts b/apps/tanstack-app/src/types/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/apps/tanstack-app/src/types/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/orders-input.ts b/apps/tanstack-app/src/types/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/organizations-entity.ts b/apps/tanstack-app/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/apps/tanstack-app/src/types/generated/organizations-input.ts b/apps/tanstack-app/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/apps/tanstack-app/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/payments-entity.ts b/apps/tanstack-app/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/payments-input.ts b/apps/tanstack-app/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/products-entity.ts b/apps/tanstack-app/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/apps/tanstack-app/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/products-input.ts b/apps/tanstack-app/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/projects-entity.ts b/apps/tanstack-app/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/apps/tanstack-app/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/apps/tanstack-app/src/types/generated/projects-input.ts b/apps/tanstack-app/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/refunds-entity.ts b/apps/tanstack-app/src/types/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/apps/tanstack-app/src/types/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/refunds-input.ts b/apps/tanstack-app/src/types/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/reports-entity.ts b/apps/tanstack-app/src/types/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/apps/tanstack-app/src/types/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/reports-input.ts b/apps/tanstack-app/src/types/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/apps/tanstack-app/src/types/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/sessions-entity.ts b/apps/tanstack-app/src/types/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/sessions-input.ts b/apps/tanstack-app/src/types/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/subscriptions-entity.ts b/apps/tanstack-app/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/apps/tanstack-app/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/subscriptions-input.ts b/apps/tanstack-app/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/tasks-entity.ts b/apps/tanstack-app/src/types/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/tasks-input.ts b/apps/tanstack-app/src/types/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/teams-entity.ts b/apps/tanstack-app/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/apps/tanstack-app/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/teams-input.ts b/apps/tanstack-app/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/webhooks-entity.ts b/apps/tanstack-app/src/types/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/apps/tanstack-app/src/types/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/webhooks-input.ts b/apps/tanstack-app/src/types/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/apps/tanstack-app/src/types/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/apps/tanstack-app/src/types/generated/workspaces-entity.ts b/apps/tanstack-app/src/types/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/apps/tanstack-app/src/types/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/apps/tanstack-app/src/types/generated/workspaces-input.ts b/apps/tanstack-app/src/types/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/apps/tanstack-app/src/types/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/docs/getting-started.md b/docs/getting-started.md index 934f3ca2..d9e93437 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -7,13 +7,19 @@ supported frameworks. ## Requirements - Node.js `>=24` -- TypeScript `>=5.9 <8` when using TypeScript schemas or checker-assisted response inference. `next-openapi-gen` resolves the TypeScript compiler from your project first and uses its bundled compiler only as a fallback. +- TypeScript `>=5.9 <8` when using TypeScript schemas or checker-assisted response inference. `next-openapi-gen` resolves the TypeScript compiler from your project first, uses TypeScript 7's native checker API when available, and uses its bundled TypeScript 6 compatibility compiler as a fallback. - One of the supported frameworks: - Next.js with App Router or Pages Router - TanStack Router - React Router - Route handlers documented with JSDoc tags when you want explicit metadata +TypeScript 7 can be installed as your project `tsc` for faster builds and +editor feedback. Because TypeScript 7.0 does not expose the stable JavaScript +compiler API used by much of the ecosystem, the generator keeps TypeScript 5.9 +through 7 in its support window and automatically falls back to the TypeScript 6 +API package for checker features when a native TypeScript 7 API is unavailable. + ## Install Choose your package manager: diff --git a/docs/openapi-version-coverage.md b/docs/openapi-version-coverage.md index 012fb674..2ed4eda2 100644 --- a/docs/openapi-version-coverage.md +++ b/docs/openapi-version-coverage.md @@ -16,7 +16,7 @@ Feature status uses three buckets: - The root `openapi` field is the only version selector; `next-openapi-gen` derives the internal target version from that string. - Explicit `@response` metadata wins over inferred responses. - Comma-separated `@auth` metadata emits alternative security requirements, one scheme per entry. Richer `securitySchemes` modeling still comes from templates or custom OpenAPI fragments. -- TypeScript checker support is used selectively for App Router response inference and path-alias/module resolution. The checker runs through the project-installed TypeScript compiler when available and supports TypeScript `>=5.9 <8`. +- TypeScript checker support is used selectively for App Router response inference and path-alias/module resolution. The checker runs through the project-installed TypeScript compiler when available, uses TypeScript 7's native API when exposed, and otherwise falls back to the bundled TypeScript 6 compatibility API while supporting consumer TypeScript `>=5.9 <8`. - Zod schemas still default to AST conversion, but selected Zod 4 constructs can use a runtime-assisted export path so request and response variants diverge only when the emitted schemas actually differ. ## Choosing a version @@ -58,6 +58,7 @@ Feature status uses three buckets: | Example Object `dataValue` / `serializedValue` / `externalValue` | `generated`, `template/custom`, `validated` | Route examples and template/custom examples preserve 3.2 example fields and downgrade older targets where needed. | | Discriminator `defaultMapping` | `template/custom`, `validated` | Preserved through the shared document model. | | `server.name` and root `$self` | `template/custom`, `validated` | Preserved for 3.2 and removed for older versions. | +| `additionalOperations` / HTTP `QUERY` | `generated`, `template/custom`, `validated` | `@method QUERY` emits an OpenAPI 3.2 `additionalOperations.query` operation; older targets strip it. | | `oauth2MetadataUrl` and OAuth `deviceAuthorization` flow | `template/custom`, `validated` | Preserved for 3.2 and stripped for older versions. | ## First-Class Route Features @@ -67,6 +68,7 @@ Feature status uses three buckets: | Examples | `@examples` | Supports inline values, serialized payloads, external URLs, and exported typed references for request, response, and querystring examples. | | Structured tag metadata | `@tag`, `@tagSummary`, `@tagKind`, `@tagParent` | Tag metadata is synthesized into root `tags` entries. | | `querystring` | `@querystring FilterSchema as advancedQuery` | Emits an OpenAPI 3.2 `querystring` parameter with form content. | +| HTTP `QUERY` | `@method QUERY` | Emits the operation under `additionalOperations.query` for OpenAPI 3.2 output. | | Sequential media | `@responseContentType`, `@responseItem`, `@responseItemEncoding`, `@responsePrefixEncoding` | Emits 3.2 media objects for streaming or record-oriented responses. | ## Checker-Assisted Improvements diff --git a/docs/performance.md b/docs/performance.md new file mode 100644 index 00000000..1a5a18b5 --- /dev/null +++ b/docs/performance.md @@ -0,0 +1,97 @@ +# Performance Benchmarks + +This project tracks generator performance at three levels: + +- Schema micro-benchmarks for hot schema helpers. +- Full generator reports across the fixture matrix. +- CLI subprocess benchmarks for the real `openapi-gen` command path. + +The CI benchmark job is informational. It uploads current reports and surfaces regressions in logs, but it does not block merges. + +## Commands + +| Command | Purpose | +| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| `pnpm test:bench:schema:check` | Runs schema micro-benchmarks and compares `tests/bench/schema/current.json` to `tests/bench/schema/baseline.json`. | +| `pnpm test:bench:generator:check` | Writes `tests/bench/generator/current.json` and compares it to `tests/bench/generator/baseline.json`. | +| `pnpm test:bench:generator:update` | Refreshes the committed generator baseline after intentional performance changes. | +| `pnpm test:bench:profile` | Prints phase-level timing summaries for the full generator matrix. | +| `pnpm test:bench:scale` | Prints phase-level timing summaries for the opt-in `*-at-scale` fixture tier (~100 operations, ~50 schema modules). | +| `pnpm test:bench:cli` | Builds the CLI package, runs subprocess benchmarks, and runs the watch-mode smoke check. | +| `pnpm test:bench:all` | Runs schema, generator, and CLI benchmark coverage. | + +## Generator Matrix + +The generator report covers 11 project fixtures across OpenAPI 3.0, 3.1, and 3.2, with both cold and warm profiles for each scenario. Each row records the full `GeneratorPerformanceProfile`, including route scanning, parsing, TypeScript response inference, schema lookup, schema merge, and document finalization. + +Canonical scenarios to inspect first: + +- `next/app-router/core-flow` with OpenAPI 3.2 for broad TypeScript route coverage. +- `next/app-router/zod-full-coverage` with OpenAPI 3.2 for Zod-heavy behavior. +- `next/app-router/ts-full-coverage` with OpenAPI 3.2 for TypeScript schema-heavy behavior. +- `next/app-router/drizzle-zod-flow` with OpenAPI 3.2 for Drizzle-Zod conversion. +- `tanstack/core-flow` and `react-router/core-flow` with OpenAPI 3.2 for non-Next adapters. + +## Scale Fixture Tier + +Large realistic apps are materialized by `pnpm generate:scale-fixtures` into `tests/fixtures/projects/**/*-at-scale` and `apps/**/generated/`. Each scale fixture targets roughly 125 operations and 50 generated schema modules (plus copied catalog schemas on full-coverage fixtures). + +Regenerate after changing `scripts/fixture-scale/` domain or emitters. Do not hand-edit generated route or schema files. + +Run the opt-in scale benchmark tier locally when profiling large-app performance: + +```bash +pnpm generate:scale-fixtures --target all --clean +pnpm test:bench:scale +``` + +Scale scenarios are excluded from `pnpm test:bench:generator:check` so CI bench time and baseline size stay stable. + +## Reading A Report + +`tests/bench/generator/current.json` contains: + +- `machine`: CPU, OS, and Node metadata for the run. +- `iterations`: number of samples averaged for each scenario. +- `scenarios`: cold and warm summaries keyed by fixture, framework, schema flavor, router, and OpenAPI version. +- `topPhases`: the five slowest phase timers for quick triage. + +Use cold/warm ratio as the first cache-effectiveness signal. If warm time is close to cold time, route file parsing, schema discovery, or TypeScript inference is still rebuilding too much state. + +## Current Optimization Levers + +The generator has process-local caches for route scanning, route file content, route ASTs, schema file ASTs, schema discovery, and TypeScript projects. Watch mode uses `SharedGenerationRuntime` automatically. + +Opt-in cross-run caching is enabled by default. Disable it with: + +```json +{ + "cache": false +} +``` + +You can also force cache behavior for a single run: + +```bash +OPENAPI_GEN_CACHE=0 pnpm generate:apps +OPENAPI_GEN_CACHE=1 pnpm generate:apps +``` + +The disk cache fingerprints config files, API route files, schema files, custom schema files, package metadata, lockfile, and `tsconfig.json`. It reuses the existing spec only when inputs are unchanged and no docs or SDK side effects need to run. + +## Parallel Parse Prototype + +`tests/bench/generator/route-parse-worker.bench.ts` compares sequential Babel parsing with a worker-thread pool for route files. This is intentionally benchmark-only because the production generator is synchronous and the TypeScript checker should remain on the main thread. + +If the worker prototype shows a consistent win on large fixtures, the next production step should be an asynchronous generation path or a worker-backed pre-analysis phase that still performs path/schema merging on the main thread. + +## Updating Baselines + +Update baselines only after reviewing profile diffs and confirming a performance change is intentional: + +```bash +pnpm test:bench:schema:update +pnpm test:bench:generator:update +``` + +For optimization PRs, include the current profile diff for the canonical scenarios and call out which phase moved. diff --git a/docs/zod4-support-matrix.md b/docs/zod4-support-matrix.md index f5c5d021..d60aecd1 100644 --- a/docs/zod4-support-matrix.md +++ b/docs/zod4-support-matrix.md @@ -6,32 +6,39 @@ The generator still relies primarily on static AST analysis, but it now uses a s ## Verified Coverage -| Zod 4 construct | Expected emitted shape | OpenAPI targets | Regression coverage | Notes | -| ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| `z.email()` | `type: "string", format: "email"` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Same parity as `z.string().email()` | -| `z.url()` | `type: "string", format: "uri"` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Same parity as `z.string().url()` | -| `z.uuid()` | `type: "string", format: "uuid"` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Closes issue `#92` | -| `z.iso.datetime()` | `type: "string", format: "date-time"` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Nested namespace helper support | -| `z.guid()` / `z.ipv4()` / `z.ipv6()` / `z.iso.duration()` | String formats are preserved in emitted schemas | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/node-helpers.test.ts`, `tests/unit/schema/zod/zod-converter.test.ts` | Added to the AST converter parity path | -| `nullable()` / `nullish()` on base schemas and named schema references | `nullable: true` in `3.0`; `type: [..., "null"]` in `3.1+` for primitive types. For named schema references (producing a `$ref`), emits `anyOf: [{ $ref }, { type: "null" }]`; the version processor downgrades to `{ allOf: [{ $ref }], nullable: true }` for `3.0`. | `3.0`, `3.1`, `3.2` | `tests/integration/generator/zod4-support.test.ts`, `tests/integration/validation/openapi-validation.test.ts`, `tests/integration/regressions/zod-nullability.test.ts` | Closes issue `#142`; version finalization rewrites nullable semantics | -| `pipe()` into a stronger schema | Preserves strongest representable base schema | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts` | Used for patterns like `z.string().pipe(z.email())` | -| Runtime-assisted `coerce` / `pipe` variants | Request-side schemas can keep input shapes while responses keep output constraints when the runtime export can prove the difference | `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts` | Falls back to AST behavior when runtime export is unavailable | -| `transform()` / `refine()` / `superRefine()` / `brand()` | Preserve the underlying JSON-schema-compatible base shape | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Runtime-only semantics are not serialized | -| `.describe("text")` / `.meta({ description })` — OpenAPI description | Maps to `description` in emitted schema. `.describe()` and `.meta({ description })` are equivalent. `@deprecated` prefix sets `deprecated: true`. | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/features/modifiers.test.ts` | Idiomatic Zod-native alternative to `@description` JSDoc | -| `.meta({...})` — OpenAPI annotations (Zod v4) | Copies all representable keys into emitted schema: `description`, `examples`, `example`, `deprecated`, `title`, custom `x-*` extensions. The `id` field is treated specially: it overrides the generated component name instead of being emitted as a schema property (see [Component Naming](./jsdoc-reference.md#component-naming)). Example: `z.number().int().positive().meta({ description: "PIM ID", examples: [42, 1337] })` → `{ type: "integer", exclusiveMinimum: 0, description: "PIM ID", examples: [42, 1337] }` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/features/modifiers.test.ts`, `tests/unit/schema/zod/zod-converter.test.ts`, `tests/unit/schema/zod/runtime-exporter.test.ts` | Runtime-assisted path via `z.toJSONSchema()` when `.meta()` is outermost call; AST path for mid-chain usage | -| `z.literal()` with numeric values | Integer values emit `type: "integer"`; float values emit `type: "number"`. A `z.union([z.literal(1), z.literal(2)])` composed entirely of integer literals collapses to `{ type: "integer", enum: [...] }`. Mixed integer/float unions fall through to separate `anyOf` items. | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/features/unions-and-intersections.test.ts`, `tests/unit/schema/zod/features/primitives.test.ts`, `tests/unit/schema/zod/node-helpers.test.ts` | Closes issue `#143` | -| `z.tuple([...])` | Emits tuple-aware arrays with `prefixItems`, `items: false`, and fixed item counts | `3.1`, `3.2` | `tests/unit/schema/zod/node-helpers.test.ts`, `tests/unit/schema/zod/zod-converter-helpers.test.ts` | `3.0` downgrades happen in version finalization | -| Shared imported query schemas | Per-parameter schemas retain `$ref` / `allOf` detail | `3.0`, `3.1`, `3.2` | `tests/unit/schema/typescript/schema-content.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Closes issue `#93` | -| Required fields in `@queryParams` object schemas | Per-parameter `required: true` matches parent schema `required` list | `3.0`, `3.1`, `3.2` | `tests/unit/schema/typescript/schema-content.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Closes issue `#94` | -| Exported `z.infer` aliases in pure-Zod mode | No duplicate component unless alias is explicitly referenced | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Closes issue `#96` | -| `import { z } from "zod/v4"` | Parsed the same as `zod` import path when the local binding is `z` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Also covered in a Pages Router fixture | -| `z.discriminatedUnion()` with spread base shapes | Member schemas that spread a shared base shape (e.g. `z.object({ ...baseShape, type: z.literal('dog') }).meta({ id: 'Dog' })`) emit correct component schemas containing all spread properties, not only the discriminator field. | `3.0`, `3.1`, `3.2` | `tests/unit/regressions/zod-issue-141-discriminated-union-spread.test.ts` | Closes issue `#141` | +| Zod 4 construct | Expected emitted shape | OpenAPI targets | Regression coverage | Notes | +| ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `z.email()` | `type: "string", format: "email"` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Same parity as `z.string().email()` | +| `z.url()` | `type: "string", format: "uri"` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Same parity as `z.string().url()` | +| `z.uuid()` | `type: "string", format: "uuid"` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Closes issue `#92` | +| `z.iso.datetime()` | `type: "string", format: "date-time"` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Nested namespace helper support | +| `z.guid()` / `z.ipv4()` / `z.ipv6()` / `z.iso.duration()` | String formats are preserved in emitted schemas | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/node-helpers.test.ts`, `tests/unit/schema/zod/zod-converter.test.ts` | Added to the AST converter parity path | +| `nullable()` / `nullish()` on base schemas and named schema references | `nullable: true` in `3.0`; `type: [..., "null"]` in `3.1+` for primitive types. For named schema references (producing a `$ref`), emits `anyOf: [{ $ref }, { type: "null" }]`; the version processor downgrades to `{ allOf: [{ $ref }], nullable: true }` for `3.0`. | `3.0`, `3.1`, `3.2` | `tests/integration/generator/zod4-support.test.ts`, `tests/integration/generator/schema-full-coverage.test.ts`, `tests/integration/validation/openapi-validation.test.ts`, `tests/integration/regressions/zod-nullability.test.ts` | Closes issue `#142`; version finalization rewrites nullable semantics | +| `pipe()` into a stronger schema | Preserves strongest representable base schema | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts` | Used for patterns like `z.string().pipe(z.email())` | +| Runtime-assisted `coerce` / `pipe` variants | Request-side schemas can keep input shapes while responses keep output constraints when the runtime export can prove the difference | `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts` | Falls back to AST behavior when runtime export is unavailable | +| `transform()` / `refine()` / `superRefine()` / `brand()` | Preserve the underlying JSON-schema-compatible base shape | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts`, `tests/integration/generator/schema-full-coverage.test.ts` | Runtime-only semantics are not serialized | +| `.describe("text")` / `.meta({ description })` — OpenAPI description | Maps to `description` in emitted schema. `.describe()` and `.meta({ description })` are equivalent. `@deprecated` prefix sets `deprecated: true`. | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/features/modifiers.test.ts` | Idiomatic Zod-native alternative to `@description` JSDoc | +| `.meta({...})` — OpenAPI annotations (Zod v4) | Copies all representable keys into emitted schema: `description`, `examples`, `example`, `deprecated`, `title`, custom `x-*` extensions. The `id` field is treated specially: it overrides the generated component name instead of being emitted as a schema property (see [Component Naming](./jsdoc-reference.md#component-naming)). Example: `z.number().int().positive().meta({ description: "PIM ID", examples: [42, 1337] })` → `{ type: "integer", exclusiveMinimum: 0, description: "PIM ID", examples: [42, 1337] }` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/features/modifiers.test.ts`, `tests/unit/schema/zod/zod-converter.test.ts`, `tests/unit/schema/zod/runtime-exporter.test.ts` | Runtime-assisted path via `z.toJSONSchema()` when `.meta()` is outermost call; AST path for mid-chain usage | +| `z.literal()` with numeric values | Integer values emit `type: "integer"`; float values emit `type: "number"`. A `z.union([z.literal(1), z.literal(2)])` composed entirely of integer literals collapses to `{ type: "integer", enum: [...] }`. Mixed integer/float unions fall through to separate `anyOf` items. | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/features/unions-and-intersections.test.ts`, `tests/unit/schema/zod/features/primitives.test.ts`, `tests/unit/schema/zod/node-helpers.test.ts` | Closes issue `#143` | +| `z.tuple([...])` | Emits tuple-aware arrays with `prefixItems`, `items: false`, and fixed item counts | `3.1`, `3.2` | `tests/unit/schema/zod/node-helpers.test.ts`, `tests/unit/schema/zod/zod-converter-helpers.test.ts` | `3.0` downgrades happen in version finalization | +| Shared imported query schemas | Per-parameter schemas retain `$ref` / `allOf` detail | `3.0`, `3.1`, `3.2` | `tests/unit/schema/typescript/schema-content.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Closes issue `#93` | +| Required fields in `@queryParams` object schemas | Per-parameter `required: true` matches parent schema `required` list | `3.0`, `3.1`, `3.2` | `tests/unit/schema/typescript/schema-content.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Closes issue `#94` | +| Exported `z.infer` aliases in pure-Zod mode | No duplicate component unless alias is explicitly referenced | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Closes issue `#96` | +| `import { z } from "zod/v4"` | Parsed the same as `zod` import path when the local binding is `z` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/integration/generator/zod4-support.test.ts`, `tests/integration/generator/zod4-support.test.ts` | Also covered in a Pages Router fixture | +| `z.discriminatedUnion()` with spread base shapes | Member schemas that spread a shared base shape (e.g. `z.object({ ...baseShape, type: z.literal('dog') }).meta({ id: 'Dog' })`) emit correct component schemas containing all spread properties, not only the discriminator field. | `3.0`, `3.1`, `3.2` | `tests/unit/regressions/zod-issue-141-discriminated-union-spread.test.ts`, `tests/integration/generator/schema-full-coverage.test.ts` | Closes issue `#141` | +| Top-level numeric helpers (`z.int()`, `z.int32()`, `z.uint32()`, `z.float32()`, etc.) | Preserve integer/number types and bounds instead of degrading to plain strings | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts`, `tests/unit/schema/zod/features/number-refinements.test.ts` | AST and runtime exporter parity | +| Handler-inferred path/query/body Zod schemas | When handlers call `schema.parse(await context.params)`, parse query data from `searchParams`, or parse JSON/form bodies, the generator resolves those schemas without explicit `@pathParams` / `@params` / `@body` tags | `3.0`, `3.1`, `3.2` | `tests/integration/regressions/handler-param-inference.test.ts`, `tests/integration/generator/readme-samples.test.ts` | Explicit JSDoc tags still take priority | +| Webhook routes (`@webhook`) | Operations annotated with `@webhook` are emitted under the top-level `webhooks` map for OpenAPI `3.1+` | `3.1`, `3.2` | `tests/integration/regressions/webhooks-routing.test.ts` | Stripped for `3.0` output | +| `z.file()` arrays and MIME hints | `z.array(z.file())` emits array-of-binary schemas; single `.mime()` sets `contentMediaType`; multiple MIME values are carried to multipart `encoding.contentType` | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/features/primitives.test.ts`, `tests/unit/schema/typescript/helpers.test.ts` | Version finalization handles 3.0 binary format downgrades | +| Unknown Zod helpers/methods | Unknown helpers fall back to string schemas and unknown chain methods are ignored, both with diagnostics | `3.0`, `3.1`, `3.2` | `tests/unit/schema/zod/zod-converter.test.ts` | Warnings use `unknown-zod-helper` / `unknown-zod-method` | +| Zod full-coverage fixture matrix | Representative Zod categories are wired through real App Router routes: string formats, number refinements, collections, object modes, unions, modifiers, lazy recursion, transform/refine/brand, and nullable version differences | `3.0`, `3.1`, `3.2` | `tests/integration/generator/schema-full-coverage.test.ts`, `tests/integration/validation/openapi-validation.test.ts` | Bridges unit feature tests to generated OpenAPI documents | ## Checked-In Fixtures | Fixture | Purpose | | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | `tests/fixtures/projects/next/app-router/zod-only-coverage` | App Router Zod-first coverage for top-level helpers, transformed query params, nullable helper output, and pure-Zod alias behavior | +| `tests/fixtures/projects/next/app-router/zod-full-coverage` | App Router semantic matrix for representative Zod 4 feature categories across OpenAPI `3.0`, `3.1`, and `3.2` | | `tests/fixtures/projects/next/pages-router/zod-flow` | Pages Router coverage for `zod/v4` imports and Zod-generated response schemas | ## Known Boundaries diff --git a/knip.mts b/knip.mts index a6d33f95..76d2716b 100644 --- a/knip.mts +++ b/knip.mts @@ -23,6 +23,7 @@ const config = { "apps/next-app-mixed-schemas/package.json": ["devDependencies"], "apps/next-app-sandbox/package.json": ["devDependencies"], "apps/next-app-scalar/package.json": ["devDependencies"], + "apps/next-app-swagger/package.json": ["devDependencies"], "apps/next-app-typescript/package.json": ["devDependencies"], "apps/next-app-zod/package.json": ["devDependencies"], "apps/next-app-adapter/package.json": ["devDependencies"], diff --git a/package.json b/package.json index 5a849eb0..677497ca 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "scripts": { "audit": "pnpm audit", "audit:fix": "pnpm audit --fix=update", - "build": "turbo run build", - "build:apps": "turbo run build --filter=./apps/*", - "build:packages": "turbo run build --filter=./packages/*", + "build": "turbo run build --concurrency=100%", + "build:apps": "turbo run build --filter=./apps/* --concurrency=100%", + "build:packages": "turbo run build --filter=./packages/* --concurrency=100%", "check": "pnpm check:root && pnpm exec turbo run check", "check:root": "pnpm format:check:root && pnpm lint:root", "dev": "turbo run dev", @@ -22,6 +22,7 @@ "format:check:root": "oxfmt --config ./oxfmt.config.ts --ignore-path .gitignore --check . '!apps/**' '!packages/**'", "format:root": "oxfmt --config ./oxfmt.config.ts --ignore-path .gitignore . '!apps/**' '!packages/**'", "generate:apps": "turbo run generate --filter=./apps/*", + "generate:scale-fixtures": "node --experimental-strip-types scripts/generate-scale-fixtures.mts --target=all --clean", "knip": "knip -c knip.mts", "knip:ci": "knip -c knip.mts --reporter compact", "lint": "pnpm lint:root && turbo run lint", @@ -36,7 +37,13 @@ "sbom": "pnpm sbom --sbom-format cyclonedx --lockfile-only > sbom.json", "test": "pnpm exec turbo run test:unit && pnpm exec turbo run test:integration && pnpm test:e2e", "test:bench": "pnpm test:bench:profile", + "test:bench:all": "pnpm test:bench:schema:check && pnpm test:bench:generator:check && pnpm test:bench:cli", + "test:bench:cli": "pnpm exec turbo run build --filter=next-openapi-gen... && vitest bench --config vitest.bench.config.ts --dir tests/bench/cli --run --outputJson tests/bench/cli/current.json && vitest run --config vitest.bench.config.ts tests/bench/cli/cli-watch.test.ts", + "test:bench:generator": "vitest run --config vitest.bench.config.ts tests/bench/generator/openapi-generator.report.test.ts --reporter=verbose --silent false", + "test:bench:generator:check": "GENERATOR_BENCH_ITERATIONS=1 pnpm test:bench:generator && node --experimental-strip-types scripts/check-generator-bench-regression.mts --current tests/bench/generator/current.json --baseline tests/bench/generator/baseline.json", + "test:bench:generator:update": "pnpm test:bench:generator && node --experimental-strip-types scripts/check-generator-bench-regression.mts --current tests/bench/generator/current.json --baseline tests/bench/generator/baseline.json --write-baseline", "test:bench:profile": "vitest run --config vitest.bench.config.ts tests/bench/generator/openapi-generator.profile.test.ts --reporter=verbose --silent false", + "test:bench:scale": "vitest run --config vitest.bench.config.ts tests/bench/generator/openapi-generator.scale.test.ts --reporter=verbose --silent false", "test:bench:schema": "vitest bench --config vitest.bench.config.ts --dir tests/bench/schema --run --outputJson tests/bench/schema/current.json", "test:bench:schema:check": "pnpm test:bench:schema && node --experimental-strip-types scripts/check-bench-regression.mts --current tests/bench/schema/current.json --baseline tests/bench/schema/baseline.json", "test:bench:schema:update": "pnpm test:bench:schema && node --experimental-strip-types scripts/check-bench-regression.mts --current tests/bench/schema/current.json --baseline tests/bench/schema/baseline.json --write-baseline", @@ -67,12 +74,13 @@ "test:integration": "vitest run --config vitest.config.ts tests/integration", "test:unit": "vitest run --config vitest.config.ts tests/unit", "test:watch": "vitest --config vitest.config.ts", - "typecheck": "pnpm typecheck:root && turbo run typecheck", + "typecheck": "pnpm typecheck:root && turbo run typecheck --concurrency=100%", "typecheck:root": "tsc -p tsconfig.tooling.json", "verify": "pnpm check && pnpm peers:check && pnpm exec turbo run knip:ci && pnpm exec turbo run test:unit && pnpm exec turbo run test:integration && pnpm build", "version": "pnpm --filter next-openapi-gen version" }, "devDependencies": { + "@babel/parser": "catalog:", "@babel/traverse": "catalog:", "@babel/types": "catalog:", "@commitlint/cli": "catalog:", @@ -80,6 +88,8 @@ "@commitlint/types": "catalog:", "@playwright/test": "catalog:", "@seriousme/openapi-schema-validator": "catalog:", + "@types/node": "catalog:", + "@typescript/native": "catalog:", "@vitest/coverage-v8": "catalog:", "@workspace/openapi-cli": "workspace:*", "@workspace/openapi-core": "workspace:*", diff --git a/packages/next-openapi-gen/package.json b/packages/next-openapi-gen/package.json index e7c16d06..e91064fb 100644 --- a/packages/next-openapi-gen/package.json +++ b/packages/next-openapi-gen/package.json @@ -80,7 +80,7 @@ "fs-extra": "catalog:", "js-yaml": "catalog:", "ora": "catalog:", - "typescript": ">=5.9 <8" + "typescript": "npm:@typescript/typescript6@6.0.2" }, "devDependencies": { "@types/node": "catalog:", diff --git a/packages/next-openapi-gen/tsup.config.ts b/packages/next-openapi-gen/tsup.config.ts index e3bd8c6d..b32a8f26 100644 --- a/packages/next-openapi-gen/tsup.config.ts +++ b/packages/next-openapi-gen/tsup.config.ts @@ -27,6 +27,6 @@ export default defineConfig({ format: ["esm"], noExternal: [/^@workspace\/openapi-/], sourcemap: false, - splitting: false, + splitting: true, target: "node24", }); diff --git a/packages/openapi-cli/src/cli/commands/generate.ts b/packages/openapi-cli/src/cli/commands/generate.ts index d2665357..6378a9d2 100644 --- a/packages/openapi-cli/src/cli/commands/generate.ts +++ b/packages/openapi-cli/src/cli/commands/generate.ts @@ -1,11 +1,13 @@ import ora from "ora"; +import type { Diagnostic, DiagnosticFailOn } from "@workspace/openapi-core"; import { generateProject, watchProject } from "@workspace/openapi-core"; import { createDefaultGenerationAdapters } from "../../default-adapters.js"; export type GenerateOptions = { config?: string; + failOn?: DiagnosticFailOn; template?: string; watch?: boolean; }; @@ -14,18 +16,76 @@ export async function generate(options: GenerateOptions): Promise { const configPath = options.config ?? options.template; const spinner = ora("Generating OpenAPI specification...\n").start(); const adapters = createDefaultGenerationAdapters(); + if (options.watch) { + spinner.info("Watching for route and schema changes..."); + await watchProject({ + adapters, + configPath, + }); + return; + } + const result = await generateProject({ adapters, configPath, }); spinner.succeed(`OpenAPI specification generated at ${result.outputFile}`); + printDiagnostics(result.diagnostics ?? []); - if (options.watch) { - spinner.info("Watching for route and schema changes..."); - await watchProject({ - adapters, - configPath, - }); + const failOn = options.failOn ?? result.diagnosticsFailOn; + if (shouldFailOnDiagnostics(result.diagnostics, failOn)) { + throw new Error(`OpenAPI generation failed because diagnostics matched --fail-on ${failOn}.`); + } +} + +function printDiagnostics(diagnostics: Diagnostic[]): void { + if (diagnostics.length === 0) { + return; + } + + const grouped = { + error: diagnostics.filter((diagnostic) => diagnostic.severity === "error"), + warning: diagnostics.filter((diagnostic) => diagnostic.severity === "warning"), + info: diagnostics.filter((diagnostic) => diagnostic.severity === "info"), + }; + + const lines = ["", "OpenAPI diagnostics:"]; + for (const severity of ["error", "warning", "info"] as const) { + const items = grouped[severity]; + if (items.length === 0) { + continue; + } + + lines.push(` ${severity}: ${items.length}`); + for (const diagnostic of items) { + const location = [diagnostic.filePath, diagnostic.routePath].filter(Boolean).join(" "); + lines.push( + ` - ${diagnostic.code}${location ? ` (${location})` : ""}: ${diagnostic.message}`, + ); + } + } + + process.stderr.write(`${lines.join("\n")}\n`); +} + +function shouldFailOnDiagnostics( + diagnostics: Diagnostic[], + failOn: DiagnosticFailOn | undefined, +): boolean { + switch (failOn) { + case "error": + return diagnostics.some((diagnostic) => diagnostic.severity === "error"); + case "warning": + return diagnostics.some( + (diagnostic) => diagnostic.severity === "error" || diagnostic.severity === "warning", + ); + case "never": + case undefined: + return false; + default: { + const exhaustiveCheck: never = failOn; + return exhaustiveCheck; + } } } diff --git a/packages/openapi-cli/src/cli/constants.ts b/packages/openapi-cli/src/cli/constants.ts index f9078143..5bffcc79 100644 --- a/packages/openapi-cli/src/cli/constants.ts +++ b/packages/openapi-cli/src/cli/constants.ts @@ -8,7 +8,6 @@ import { DEFAULT_UI, SCHEMA_TYPES, } from "@workspace/openapi-core/config/defaults.js"; -import { INIT_FRAMEWORKS } from "@workspace/openapi-init"; export const CLI_NAME = "openapi-gen"; export const LEGACY_CLI_NAME = "next-openapi-gen"; @@ -25,10 +24,23 @@ export const INIT_OUTPUT_OPTION_DESCRIPTION = "Specify the output path for the O export const GENERATE_TEMPLATE_OPTION_DESCRIPTION = "Specify the OpenAPI template file"; export const GENERATE_WATCH_OPTION_DESCRIPTION = "Watch route and schema files and regenerate on changes"; +export const GENERATE_FAIL_ON_OPTION_DESCRIPTION = + "Fail generation when diagnostics include the selected severity"; + +export const CLI_FRAMEWORK_CHOICES = ["next", "tanstack", "react-router"] as const; +export const CLI_SCHEMA_CHOICES = [...SCHEMA_TYPES] as const; +export const CLI_UI_CHOICES = [ + "scalar", + "swagger", + "redoc", + "stoplight", + "rapidoc", + "none", +] as const; export const INIT_DEFAULTS = { docsUrl: DEFAULT_DOCS_URL, - framework: INIT_FRAMEWORKS[0], + framework: CLI_FRAMEWORK_CHOICES[0], output: DEFAULT_GENERATE_TEMPLATE_PATH, schema: DEFAULT_INIT_SCHEMA_TYPE, ui: DEFAULT_UI, @@ -38,9 +50,6 @@ export const GENERATE_DEFAULTS = { template: DEFAULT_GENERATE_TEMPLATE_PATH, } as const; -export const CLI_FRAMEWORK_CHOICES = [...INIT_FRAMEWORKS] as const; -export const CLI_SCHEMA_CHOICES = [...SCHEMA_TYPES] as const; - type PackageJson = { version?: string; }; diff --git a/packages/openapi-cli/src/cli/program.ts b/packages/openapi-cli/src/cli/program.ts index ae928462..1e98b295 100644 --- a/packages/openapi-cli/src/cli/program.ts +++ b/packages/openapi-cli/src/cli/program.ts @@ -1,15 +1,13 @@ import { Command, Option } from "commander"; -import { UI_TYPES_WITH_NONE } from "@workspace/openapi-init"; - -import { generate } from "./commands/generate.js"; -import { init } from "./commands/init.js"; import { - CLI_FRAMEWORK_CHOICES, CLI_DESCRIPTION, + CLI_FRAMEWORK_CHOICES, CLI_SCHEMA_CHOICES, - GENERATE_CONFIG_OPTION_DESCRIPTION, + CLI_UI_CHOICES, GENERATE_COMMAND_DESCRIPTION, + GENERATE_CONFIG_OPTION_DESCRIPTION, + GENERATE_FAIL_ON_OPTION_DESCRIPTION, GENERATE_TEMPLATE_OPTION_DESCRIPTION, GENERATE_WATCH_OPTION_DESCRIPTION, getCliVersion, @@ -37,7 +35,7 @@ export function buildProgram(options: { argv?: string[] } = {}) { ) .addOption( new Option("-i, --ui ", INIT_UI_OPTION_DESCRIPTION) - .choices([...UI_TYPES_WITH_NONE]) + .choices([...CLI_UI_CHOICES]) .default(INIT_DEFAULTS.ui), ) .option("-u, --docs-url ", INIT_DOCS_URL_OPTION_DESCRIPTION, INIT_DEFAULTS.docsUrl) @@ -48,7 +46,10 @@ export function buildProgram(options: { argv?: string[] } = {}) { ) .option("-o, --output ", INIT_OUTPUT_OPTION_DESCRIPTION, INIT_DEFAULTS.output) .description(INIT_COMMAND_DESCRIPTION) - .action(init); + .action(async (options) => { + const { init } = await import("./commands/init.js"); + return await init(options); + }); program .command("generate") @@ -56,7 +57,17 @@ export function buildProgram(options: { argv?: string[] } = {}) { .option("-c, --config ", GENERATE_CONFIG_OPTION_DESCRIPTION) .option("-t, --template ", GENERATE_TEMPLATE_OPTION_DESCRIPTION) .option("-w, --watch", GENERATE_WATCH_OPTION_DESCRIPTION, false) - .action(generate); + .addOption( + new Option("--fail-on ", GENERATE_FAIL_ON_OPTION_DESCRIPTION).choices([ + "error", + "warning", + "never", + ]), + ) + .action(async (options) => { + const { generate } = await import("./commands/generate.js"); + return await generate(options); + }); return program; } diff --git a/packages/openapi-core/src/config/defaults.ts b/packages/openapi-core/src/config/defaults.ts index e46e69ef..8c18324a 100644 --- a/packages/openapi-core/src/config/defaults.ts +++ b/packages/openapi-core/src/config/defaults.ts @@ -1,4 +1,4 @@ -import type { OpenApiVersion, RouterType, SchemaType } from "../shared/types.js"; +import type { DiagnosticFailOn, OpenApiVersion, RouterType, SchemaType } from "../shared/types.js"; export const DEFAULT_API_DIR = "./src/app/api"; export const DEFAULT_DOCS_URL = "api-docs"; @@ -12,6 +12,8 @@ export const DEFAULT_ROUTER_TYPE: RouterType = "app"; export const DEFAULT_RUNTIME_SCHEMA_TYPE: SchemaType = "typescript"; export const DEFAULT_SCHEMA_DIR = "./src"; export const DEFAULT_UI = "scalar"; +export const DEFAULT_CACHE = true; export const DEFAULT_DEBUG = false; export const DEFAULT_DIAGNOSTICS_ENABLED = true; +export const DEFAULT_DIAGNOSTICS_FAIL_ON: DiagnosticFailOn = "never"; export const SCHEMA_TYPES = ["zod", "typescript"] as const; diff --git a/packages/openapi-core/src/config/normalize.ts b/packages/openapi-core/src/config/normalize.ts index e13c5df9..2d43b784 100644 --- a/packages/openapi-core/src/config/normalize.ts +++ b/packages/openapi-core/src/config/normalize.ts @@ -13,8 +13,10 @@ import { FrameworkKind as ResolvedFrameworkKind } from "../shared/types.js"; import { DEFAULT_AUTH_PRESET_REPLACEMENTS } from "../shared/utils.js"; import { DEFAULT_API_DIR, + DEFAULT_CACHE, DEFAULT_DEBUG, DEFAULT_DIAGNOSTICS_ENABLED, + DEFAULT_DIAGNOSTICS_FAIL_ON, DEFAULT_DOCS_URL, DEFAULT_GENERATED_OPENAPI_FILENAME, DEFAULT_INCLUDE_OPENAPI_ROUTES, @@ -115,6 +117,10 @@ function normalizeFramework( }; } +export function resolveCacheSetting(template: Pick): boolean { + return template.cache ?? DEFAULT_CACHE; +} + export function normalizeOpenApiConfig( template: OpenApiTemplate | OpenApiConfig, ): ResolvedOpenApiConfig { @@ -147,7 +153,12 @@ export function normalizeOpenApiConfig( next: { adapterPath: template.next?.adapterPath, }, - diagnostics: template.diagnostics ?? { enabled: DEFAULT_DIAGNOSTICS_ENABLED }, + diagnostics: { + enabled: template.diagnostics?.enabled ?? DEFAULT_DIAGNOSTICS_ENABLED, + failOn: template.diagnostics?.failOn ?? DEFAULT_DIAGNOSTICS_FAIL_ON, + }, + cache: resolveCacheSetting(template), + experimental: template.experimental, authPresets: { ...DEFAULT_AUTH_PRESET_REPLACEMENTS, ...template.authPresets }, debug: template.debug ?? DEFAULT_DEBUG, }; diff --git a/packages/openapi-core/src/core/generate.ts b/packages/openapi-core/src/core/generate.ts index 0e0fa312..33046c3e 100644 --- a/packages/openapi-core/src/core/generate.ts +++ b/packages/openapi-core/src/core/generate.ts @@ -1,16 +1,23 @@ import { spawn } from "node:child_process"; +import crypto from "node:crypto"; import fs from "node:fs"; import path from "node:path"; import fse from "fs-extra"; +import { resolveCacheSetting } from "../config/normalize.js"; import { OpenApiGenerator } from "../generator/openapi-generator.js"; import { logger } from "../shared/logger.js"; +import type { Diagnostic, DiagnosticFailOn } from "../shared/types.js"; import type { GenerationAdapters } from "./adapters.js"; import { loadConfig } from "./config/load-config.js"; import type { GeneratedArtifact, LoadedConfigFile } from "./config/types.js"; import { resolveGeneratedWorkspaceDir } from "./generated-workspace.js"; -import type { SharedGenerationRuntime } from "./runtime.js"; +import { + createSharedGenerationRuntime, + type CachedRouteFragment, + type SharedGenerationRuntime, +} from "./runtime.js"; export type GenerateProjectOptions = { adapters?: GenerationAdapters | undefined; @@ -21,10 +28,33 @@ export type GenerateProjectOptions = { export type GenerateProjectResult = { artifacts: GeneratedArtifact[]; + cached?: boolean | undefined; + diagnostics: Diagnostic[]; + diagnosticsFailOn: DiagnosticFailOn; outputFile: string; configPath?: string | undefined; }; +type DiskCacheRecord = { + configPath?: string | undefined; + diagnostics: Diagnostic[]; + fingerprint: string; + inputCount: number; + inputs?: Record | undefined; + outputFile: string; + performance: unknown; + routeFragments?: Record | undefined; + updatedAt: string; +}; + +type DiskCacheInputRecord = { + hash: string; + mtimeMs: number; + size: number; +}; + +const processRuntimeCache = new Map(); + export async function generateProject( options: GenerateProjectOptions = {}, ): Promise { @@ -41,18 +71,33 @@ export async function generateFromLoadedConfig( runtime?: SharedGenerationRuntime, adapters?: GenerationAdapters, ): Promise { + const cacheKey = getProcessCacheKey(loadedConfig); + const generatorRuntime = + runtime ?? (isCacheEnabled(loadedConfig.config) ? getProcessRuntime(cacheKey) : undefined); const generator = new OpenApiGenerator({ adapters: adapters ?? missingGenerationAdapters(), config: loadedConfig.config, - runtime, + runtime: generatorRuntime, }); const config = generator.getConfig(); + const outputDir = path.resolve(config.outputDir); + const outputFile = path.join(outputDir, config.outputFile); + const diskCache = createDiskCacheContext(loadedConfig, outputFile); + if (diskCache?.routeFragments && generatorRuntime) { + generatorRuntime.routeScan.routeFragments = new Map(Object.entries(diskCache.routeFragments)); + } + if (diskCache && !hasArtifactSideEffects(loadedConfig)) { + const cachedResult = readCachedResult(diskCache, config.diagnostics.failOn ?? "never"); + if (cachedResult) { + logger.log(`OpenAPI specification cache hit at ${cachedResult.outputFile}`); + return cachedResult; + } + } + const document = generator.generate(); - const outputDir = path.resolve(config.outputDir); await fse.ensureDir(outputDir); - const outputFile = path.join(outputDir, config.outputFile); fs.writeFileSync(outputFile, `${JSON.stringify(document, null, 2)}\n`); const artifacts: GeneratedArtifact[] = [{ kind: "spec", path: outputFile }]; @@ -78,6 +123,22 @@ export async function generateFromLoadedConfig( ); } + if (diskCache) { + writeDiskCacheRecord(diskCache, { + configPath: loadedConfig.configPath, + diagnostics: generator.getDiagnostics(), + fingerprint: diskCache.fingerprint, + inputCount: diskCache.inputCount, + inputs: diskCache.inputs, + outputFile, + performance: generator.getPerformanceProfile(), + routeFragments: generatorRuntime + ? Object.fromEntries(generatorRuntime.routeScan.routeFragments) + : undefined, + updatedAt: new Date().toISOString(), + }); + } + const docsArtifact = await emitDocsArtifacts(loadedConfig, config.outputFile, adapters); if (docsArtifact) { artifacts.push(docsArtifact); @@ -95,11 +156,278 @@ export async function generateFromLoadedConfig( return { artifacts, + cached: false, + diagnostics: generator.getDiagnostics(), + diagnosticsFailOn: config.diagnostics.failOn ?? "never", outputFile, configPath: loadedConfig.configPath, }; } +function getProcessRuntime(cacheKey: string): SharedGenerationRuntime { + const cachedRuntime = processRuntimeCache.get(cacheKey); + if (cachedRuntime) { + return cachedRuntime; + } + + const runtime = createSharedGenerationRuntime(); + processRuntimeCache.set(cacheKey, runtime); + return runtime; +} + +function getProcessCacheKey(loadedConfig: LoadedConfigFile): string { + return path.resolve( + loadedConfig.configPath ? path.dirname(loadedConfig.configPath) : process.cwd(), + ); +} + +function isCacheEnabled(config: LoadedConfigFile["config"]): boolean { + if (process.env.OPENAPI_GEN_CACHE === "0") { + return false; + } + + if (process.env.OPENAPI_GEN_CACHE === "1") { + return true; + } + + return resolveCacheSetting(config); +} + +function hasArtifactSideEffects(loadedConfig: LoadedConfigFile): boolean { + return ( + (loadedConfig.config.docs ? loadedConfig.config.docs.enabled !== false : false) || + (loadedConfig.config.clientSdk?.some((sdkConfig) => sdkConfig.enabled !== false) ?? false) + ); +} + +function createDiskCacheContext( + loadedConfig: LoadedConfigFile, + outputFile: string, +): { + cacheFile: string; + fingerprint: string; + inputs: Record; + inputCount: number; + outputFile: string; + routeFragments?: Record | undefined; +} | null { + if (!isCacheEnabled(loadedConfig.config)) { + return null; + } + + const generatedWorkspaceDir = resolveGeneratedWorkspaceDir(loadedConfig.config.generatedDir); + const inputFiles = collectCacheInputFiles(loadedConfig); + const previousRecord = readDiskCacheRecord( + path.join(generatedWorkspaceDir, "cache", "generate.json"), + ); + const { fingerprint, inputs } = createInputFingerprint(inputFiles, previousRecord?.inputs); + const routeFragments = canReuseRouteFragments(loadedConfig, inputs, previousRecord) + ? previousRecord.routeFragments + : undefined; + return { + cacheFile: path.join(generatedWorkspaceDir, "cache", "generate.json"), + fingerprint, + inputs, + inputCount: inputFiles.length, + outputFile, + routeFragments, + }; +} + +function readCachedResult( + diskCache: { + cacheFile: string; + fingerprint: string; + outputFile: string; + }, + diagnosticsFailOn: DiagnosticFailOn, +): GenerateProjectResult | null { + if (!fs.existsSync(diskCache.cacheFile) || !fs.existsSync(diskCache.outputFile)) { + return null; + } + + const record = readDiskCacheRecord(diskCache.cacheFile); + if (!record) { + return null; + } + if (record.fingerprint !== diskCache.fingerprint || record.outputFile !== diskCache.outputFile) { + return null; + } + + return { + artifacts: [{ kind: "spec", path: diskCache.outputFile }], + cached: true, + diagnostics: record.diagnostics, + diagnosticsFailOn, + outputFile: diskCache.outputFile, + configPath: record.configPath, + }; +} + +function writeDiskCacheRecord( + diskCache: { + cacheFile: string; + }, + record: DiskCacheRecord, +): void { + fs.mkdirSync(path.dirname(diskCache.cacheFile), { recursive: true }); + fs.writeFileSync(diskCache.cacheFile, `${JSON.stringify(record, null, 2)}\n`); +} + +function readDiskCacheRecord(cacheFile: string): DiskCacheRecord | null { + if (!fs.existsSync(cacheFile)) { + return null; + } + + return JSON.parse(fs.readFileSync(cacheFile, "utf-8")) as DiskCacheRecord; +} + +function collectCacheInputFiles(loadedConfig: LoadedConfigFile): string[] { + const roots = [ + loadedConfig.config.apiDir, + ...(Array.isArray(loadedConfig.config.schemaDir) + ? loadedConfig.config.schemaDir + : [loadedConfig.config.schemaDir]), + ] + .filter((value): value is string => Boolean(value)) + .map((value) => path.resolve(value)); + const explicitFiles = [ + loadedConfig.configPath, + ...findNearestFiles(["tsconfig.json", "package.json", "pnpm-lock.yaml"]), + ...(loadedConfig.config.schemaFiles ?? []), + ].filter((value): value is string => Boolean(value)); + + const files = new Set(); + for (const root of roots) { + collectFiles(root, files); + } + for (const file of explicitFiles) { + const resolvedFile = path.resolve(file); + if (fs.existsSync(resolvedFile) && fs.statSync(resolvedFile).isFile()) { + files.add(resolvedFile); + } + } + + return [...files].toSorted((a, b) => a.localeCompare(b, "en", { sensitivity: "base" })); +} + +function collectFiles(root: string, files: Set): void { + if (!fs.existsSync(root)) { + return; + } + + const stat = fs.statSync(root); + if (stat.isFile()) { + if (isCacheInputFile(root)) { + files.add(root); + } + return; + } + + if (!stat.isDirectory()) { + return; + } + + for (const entry of fs.readdirSync(root).toSorted((a, b) => a.localeCompare(b, "en"))) { + if ( + entry === "node_modules" || + entry === ".next" || + entry === "dist" || + entry === ".openapi-gen" + ) { + continue; + } + collectFiles(path.join(root, entry), files); + } +} + +function isCacheInputFile(filePath: string): boolean { + return /\.(cjs|cts|js|json|jsx|mjs|mts|ts|tsx|yaml|yml)$/.test(filePath); +} + +function findNearestFiles(fileNames: string[]): string[] { + const result: string[] = []; + let currentDir = process.cwd(); + while (true) { + for (const fileName of fileNames) { + const candidate = path.join(currentDir, fileName); + if (fs.existsSync(candidate)) { + result.push(candidate); + } + } + + const parentDir = path.dirname(currentDir); + if (parentDir === currentDir) { + return result; + } + currentDir = parentDir; + } +} + +function createInputFingerprint( + files: string[], + previousInputs: Record = {}, +): { + fingerprint: string; + inputs: Record; +} { + const hash = crypto.createHash("sha256"); + const inputs: Record = {}; + for (const file of files) { + const stat = fs.statSync(file); + const previousInput = previousInputs[file]; + const fileHash = + previousInput && previousInput.mtimeMs === stat.mtimeMs && previousInput.size === stat.size + ? previousInput.hash + : createFileHash(file); + inputs[file] = { + hash: fileHash, + mtimeMs: stat.mtimeMs, + size: stat.size, + }; + hash.update(file); + hash.update(String(stat.mtimeMs)); + hash.update(String(stat.size)); + hash.update(fileHash); + } + return { + fingerprint: hash.digest("hex"), + inputs, + }; +} + +function createFileHash(file: string): string { + return crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); +} + +function canReuseRouteFragments( + loadedConfig: LoadedConfigFile, + currentInputs: Record, + previousRecord: DiskCacheRecord | null, +): previousRecord is DiskCacheRecord & { + routeFragments: Record; +} { + if (!previousRecord?.routeFragments || !previousRecord.inputs) { + return false; + } + + const apiDir = path.resolve(loadedConfig.config.apiDir ?? "./src/app/api"); + return Object.entries(currentInputs).every(([filePath, input]) => { + const previousInput = previousRecord.inputs?.[filePath]; + if ( + previousInput && + previousInput.hash === input.hash && + previousInput.mtimeMs === input.mtimeMs && + previousInput.size === input.size + ) { + return true; + } + + const relativePath = path.relative(apiDir, filePath); + return relativePath !== "" && !relativePath.startsWith("..") && !path.isAbsolute(relativePath); + }); +} + async function emitDocsArtifacts( loadedConfig: LoadedConfigFile, outputFile: string, diff --git a/packages/openapi-core/src/core/orchestrator.ts b/packages/openapi-core/src/core/orchestrator.ts index ef69767f..5f237a3d 100644 --- a/packages/openapi-core/src/core/orchestrator.ts +++ b/packages/openapi-core/src/core/orchestrator.ts @@ -8,13 +8,13 @@ import { getOpenApiVersionProcessor } from "../openapi/version-processor.js"; import { sortPathDefinitions } from "../routes/path-sort.js"; import { RouteProcessor } from "../routes/route-processor.js"; import { loadCustomOpenApiFragments } from "../schema/core/custom-schema-file-processor.js"; -import { FrameworkKind } from "../shared/types.js"; import type { OpenApiDocument, OpenApiTagDefinition, OpenApiTemplate, ResolvedOpenApiConfig, } from "../shared/types.js"; +import { FrameworkKind } from "../shared/types.js"; import type { FrameworkSourceFactory } from "./adapters.js"; import type { GeneratorHooks } from "./config/types.js"; import { applyExcludeSchemas, matchExcludePatterns } from "./exclude-schemas.js"; @@ -88,6 +88,10 @@ export function runGenerationOrchestrator({ ...document.paths, ...routeProcessor.getPaths(), }); + const discoveredWebhooks = routeProcessor.getWebhooks(); + if (Object.keys(discoveredWebhooks).length > 0) { + document.webhooks = discoveredWebhooks; + } document.tags = mergeTagDefinitions(document.tags, routeProcessor.getTags()); profile.sortAndMergePathsMs = performance.now() - phaseStartedAt; profile.buildPathsMs = profile.sortAndMergePathsMs; @@ -137,6 +141,7 @@ export function runGenerationOrchestrator({ const definedSchemas = schemaProcessor.getDefinedSchemas(); const mergedSchemas: Record = { ...document.components.schemas, + ...routeProcessor.getCachedSchemas(), ...definedSchemas, }; @@ -146,6 +151,7 @@ export function runGenerationOrchestrator({ config.excludeSchemas ?? [], ); const allExcludedSchemas = { + ...routeProcessor.getCachedInternalSchemas(), ...internalSchemas, ...Object.fromEntries( patternExcludedNames.map((name) => [name, mergedSchemas[name] as Record]), diff --git a/packages/openapi-core/src/core/performance.ts b/packages/openapi-core/src/core/performance.ts index daa61a33..e6ad6fbb 100644 --- a/packages/openapi-core/src/core/performance.ts +++ b/packages/openapi-core/src/core/performance.ts @@ -22,6 +22,9 @@ export type GenerationPerformanceProfile = { buildPathsMs: number; defaultComponentsAndErrorsMs: number; mergeSchemasMs: number; + zodPreScanMs: number; + zodPreprocessMs: number; + zodConvertMs: number; finalizeDocumentMs: number; totalMs: number; }; @@ -51,6 +54,9 @@ export function createEmptyGenerationPerformanceProfile(): GenerationPerformance buildPathsMs: 0, defaultComponentsAndErrorsMs: 0, mergeSchemasMs: 0, + zodPreScanMs: 0, + zodPreprocessMs: 0, + zodConvertMs: 0, finalizeDocumentMs: 0, totalMs: 0, }; diff --git a/packages/openapi-core/src/core/runtime.ts b/packages/openapi-core/src/core/runtime.ts index 86cf76f6..495eaba6 100644 --- a/packages/openapi-core/src/core/runtime.ts +++ b/packages/openapi-core/src/core/runtime.ts @@ -1,10 +1,57 @@ import path from "node:path"; +import type * as t from "@babel/types"; + +import type { + Diagnostic, + OpenAPIDefinition, + OpenApiPathDefinition, + OpenApiSchema, + OpenApiTagDefinition, +} from "../shared/types.js"; import { invalidateTypeScriptProject } from "../shared/typescript-project.js"; +export type CachedFileContent = { + content: string; + mtimeMs: number; + size: number; +}; + +export type CachedRouteFragment = { + cacheKey: string; + diagnostics: Diagnostic[]; + internalSchemas: Record; + mtimeMs: number; + paths: Record; + schemas: Record; + size: number; + tags: Record; + webhooks: Record; +}; + +export type SharedZodGenerationRuntime = { + convertedSchemas: Record; + drizzleZodImports: Set; + fileImportsCache: Map>; + internalSchemaNames: Set; + metaIdSchemaNames: Set; + preprocessedFiles: Set; + preprocessedSchemaDirectories: Set; + preScanned: boolean; + processedFileSchemaPairs: Set; + schemaNameToFiles: Map>; + schemaVariantRefs: Map; + typeToSchemaMapping: Record; + variantSensitiveSchemaNames: Set; + zodImportAlias: Map; +}; + export type SharedGenerationRuntime = { routeScan: { directoryCache: Record; + fileASTCache: Map; + fileContentCache: Map; + routeFragments: Map; statCache: Record; }; schema: { @@ -13,6 +60,7 @@ export type SharedGenerationRuntime = { fileASTCache: Map; schemaFiles: string[] | null; schemaDefinitionIndex: Record; + zod: SharedZodGenerationRuntime; }; }; @@ -20,6 +68,9 @@ export function createSharedGenerationRuntime(): SharedGenerationRuntime { return { routeScan: { directoryCache: {}, + fileASTCache: new Map(), + fileContentCache: new Map(), + routeFragments: new Map(), statCache: {}, }, schema: { @@ -28,6 +79,7 @@ export function createSharedGenerationRuntime(): SharedGenerationRuntime { fileASTCache: new Map(), schemaFiles: null, schemaDefinitionIndex: {}, + zod: createSharedZodGenerationRuntime(), }, }; } @@ -36,10 +88,14 @@ export function invalidateRuntimeFile(runtime: SharedGenerationRuntime, filePath const absoluteFilePath = path.resolve(filePath); delete runtime.routeScan.statCache[absoluteFilePath]; + runtime.routeScan.fileASTCache.delete(absoluteFilePath); + runtime.routeScan.fileContentCache.delete(absoluteFilePath); + runtime.routeScan.routeFragments.delete(absoluteFilePath); delete runtime.schema.statCache[absoluteFilePath]; runtime.schema.fileASTCache.delete(absoluteFilePath); runtime.schema.schemaFiles = null; clearRecord(runtime.schema.schemaDefinitionIndex); + clearZodRuntime(runtime.schema.zod); invalidateTypeScriptProject(absoluteFilePath); } @@ -50,8 +106,15 @@ export function invalidateRuntimeDirectory( const absoluteDirectoryPath = path.resolve(directoryPath); delete runtime.routeScan.directoryCache[absoluteDirectoryPath]; delete runtime.schema.directoryCache[absoluteDirectoryPath]; + for (const filePath of runtime.routeScan.routeFragments.keys()) { + const relativePath = path.relative(absoluteDirectoryPath, filePath); + if (relativePath === "" || (!relativePath.startsWith("..") && !path.isAbsolute(relativePath))) { + runtime.routeScan.routeFragments.delete(filePath); + } + } runtime.schema.schemaFiles = null; clearRecord(runtime.schema.schemaDefinitionIndex); + clearZodRuntime(runtime.schema.zod); } function clearRecord(record: Record): void { @@ -59,3 +122,39 @@ function clearRecord(record: Record): void { delete record[key]; } } + +function createSharedZodGenerationRuntime(): SharedZodGenerationRuntime { + return { + convertedSchemas: {}, + drizzleZodImports: new Set(), + fileImportsCache: new Map(), + internalSchemaNames: new Set(), + metaIdSchemaNames: new Set(), + preprocessedFiles: new Set(), + preprocessedSchemaDirectories: new Set(), + preScanned: false, + processedFileSchemaPairs: new Set(), + schemaNameToFiles: new Map(), + schemaVariantRefs: new Map(), + typeToSchemaMapping: {}, + variantSensitiveSchemaNames: new Set(), + zodImportAlias: new Map(), + }; +} + +function clearZodRuntime(runtime: SharedZodGenerationRuntime): void { + clearRecord(runtime.convertedSchemas); + clearRecord(runtime.typeToSchemaMapping); + runtime.drizzleZodImports.clear(); + runtime.fileImportsCache.clear(); + runtime.internalSchemaNames.clear(); + runtime.metaIdSchemaNames.clear(); + runtime.preprocessedFiles.clear(); + runtime.preprocessedSchemaDirectories.clear(); + runtime.preScanned = false; + runtime.processedFileSchemaPairs.clear(); + runtime.schemaNameToFiles.clear(); + runtime.schemaVariantRefs.clear(); + runtime.zodImportAlias.clear(); + runtime.variantSensitiveSchemaNames.clear(); +} diff --git a/packages/openapi-core/src/frameworks/shared/generic-route-source.ts b/packages/openapi-core/src/frameworks/shared/generic-route-source.ts index 5862a8b5..33424a05 100644 --- a/packages/openapi-core/src/frameworks/shared/generic-route-source.ts +++ b/packages/openapi-core/src/frameworks/shared/generic-route-source.ts @@ -1,11 +1,19 @@ import fs from "node:fs"; import path from "node:path"; +import type * as t from "@babel/types"; + import { measurePerformance, type GenerationPerformanceProfile } from "../../core/performance.js"; +import type { CachedFileContent, SharedGenerationRuntime } from "../../core/runtime.js"; import { traverse } from "../../shared/babel-traverse.js"; import type { ResolvedOpenApiConfig } from "../../shared/types.js"; -import { extractJSDocComments, parseTypeScriptFile } from "../../shared/utils.js"; +import { + extractJSDocComments, + extractPathParameters, + parseTypeScriptFile, +} from "../../shared/utils.js"; import type { FrameworkSource } from "../types.js"; +import { applyHandlerInsightsToDataTypes } from "./handler-insights.js"; const GENERIC_HTTP_EXPORTS = ["GET", "POST", "PUT", "PATCH", "DELETE", "loader", "action"] as const; @@ -14,14 +22,22 @@ type GenericRouteSourceOptions = { fileExtensions?: string[] | undefined; }; +const moduleFileASTCache = new Map(); +const moduleFileContentCache = new Map(); + export class GenericRouteSource implements FrameworkSource { - private readonly fileContentCache = new Map(); + private readonly fileASTCache: Map; + private readonly fileContentCache: Map; constructor( public readonly config: ResolvedOpenApiConfig, private readonly options: GenericRouteSourceOptions = {}, private readonly performanceProfile?: GenerationPerformanceProfile, - ) {} + runtime?: SharedGenerationRuntime, + ) { + this.fileASTCache = runtime?.routeScan.fileASTCache ?? moduleFileASTCache; + this.fileContentCache = runtime?.routeScan.fileContentCache ?? moduleFileContentCache; + } public getScanRoots(): string[] { return [this.config.apiDir]; @@ -76,11 +92,9 @@ export class GenericRouteSource implements FrameworkSource { } public processFile(filePath: string, routePath = this.getRoutePath(filePath)) { - const content = this.readFile(filePath); - const ast = measurePerformance(this.performanceProfile, "parseRouteFilesMs", () => - parseTypeScriptFile(content), - ); + const ast = this.parseFile(filePath); const routes: ReturnType = []; + const hasPathParams = extractPathParameters(routePath).length > 0; measurePerformance(this.performanceProfile, "analyzeRouteFilesMs", () => { traverse(ast, { @@ -106,7 +120,11 @@ export class GenericRouteSource implements FrameworkSource { method, filePath, routePath, - dataTypes: extractJSDocComments(nodePath, filePath), + dataTypes: applyHandlerInsightsToDataTypes( + extractJSDocComments(nodePath, filePath), + item, + { hasPathParams }, + ), }); } return; @@ -122,7 +140,11 @@ export class GenericRouteSource implements FrameworkSource { method, filePath, routePath, - dataTypes: extractJSDocComments(nodePath, filePath), + dataTypes: applyHandlerInsightsToDataTypes( + extractJSDocComments(nodePath, filePath), + declaration, + { hasPathParams }, + ), }); } }, @@ -133,17 +155,41 @@ export class GenericRouteSource implements FrameworkSource { } private readFile(filePath: string): string { + const stat = fs.statSync(filePath); const cachedContent = this.fileContentCache.get(filePath); - if (cachedContent) { - return cachedContent; + if ( + cachedContent && + cachedContent.mtimeMs === stat.mtimeMs && + cachedContent.size === stat.size + ) { + return cachedContent.content; } const content = measurePerformance(this.performanceProfile, "readRouteFilesMs", () => fs.readFileSync(filePath, "utf-8"), ); - this.fileContentCache.set(filePath, content); + this.fileContentCache.set(filePath, { + content, + mtimeMs: stat.mtimeMs, + size: stat.size, + }); + this.fileASTCache.delete(filePath); return content; } + + private parseFile(filePath: string): t.File { + const content = this.readFile(filePath); + const cachedAst = this.fileASTCache.get(filePath); + if (cachedAst) { + return cachedAst; + } + + const ast = measurePerformance(this.performanceProfile, "parseRouteFilesMs", () => + parseTypeScriptFile(content), + ); + this.fileASTCache.set(filePath, ast); + return ast; + } } function normalizeExportMethod(exportName: string): string | null { diff --git a/packages/openapi-core/src/frameworks/shared/handler-insights.ts b/packages/openapi-core/src/frameworks/shared/handler-insights.ts new file mode 100644 index 00000000..0e37a05d --- /dev/null +++ b/packages/openapi-core/src/frameworks/shared/handler-insights.ts @@ -0,0 +1,704 @@ +import * as t from "@babel/types"; + +import type { + DataTypes, + InferredResponseDefinition, + OpenApiSchemaLike, +} from "../../shared/types.js"; + +export type HandlerValueSource = "pathParamsType" | "queryParamsType" | "bodyType"; + +type HandlerParsedSchemas = Partial> & { + notFoundResponse?: boolean; + streamResponse?: boolean; +}; + +export type HandlerInsights = { + inferredBodyType: string; + inferredPathParamsType: string; + inferredQueryParamNames: string[]; + inferredQueryParamsType: string; + inferredResponses: InferredResponseDefinition[]; + handlerDiagnostics: NonNullable; + requiresTypeScriptChecker: boolean; +}; + +type HandlerInsightOptions = { + hasPathParams?: boolean | undefined; +}; + +export function applyHandlerInsightsToDataTypes( + dataTypes: DataTypes, + handlerNode: t.Node, + options: HandlerInsightOptions = {}, +): DataTypes { + const insights = collectHandlerInsights(handlerNode, options); + return { + ...dataTypes, + ...(insights.inferredBodyType && !dataTypes.bodyType + ? { inferredBodyType: insights.inferredBodyType } + : {}), + ...(insights.inferredPathParamsType && !dataTypes.pathParamsType + ? { inferredPathParamsType: insights.inferredPathParamsType } + : {}), + ...(insights.inferredQueryParamsType && !dataTypes.paramsType + ? { inferredQueryParamsType: insights.inferredQueryParamsType } + : {}), + ...(insights.inferredQueryParamNames.length > 0 + ? { inferredQueryParamNames: insights.inferredQueryParamNames } + : {}), + ...(insights.inferredResponses.length > 0 + ? { inferredResponses: insights.inferredResponses } + : {}), + ...(insights.handlerDiagnostics.length > 0 + ? { diagnostics: [...(dataTypes.diagnostics ?? []), ...insights.handlerDiagnostics] } + : {}), + }; +} + +export function collectHandlerInsights( + handlerNode: t.Node, + options: HandlerInsightOptions = {}, +): HandlerInsights { + const functionLike = getFunctionLikeNode(handlerNode); + + if (!functionLike || !functionLike.body) { + return emptyHandlerInsights(); + } + + const queryParamNames = new Set(); + const parsedSchemas: HandlerParsedSchemas = {}; + const inferredResponses: InferredResponseDefinition[] = []; + let requiresTypeScriptChecker = false; + const aliases = new Map(); + seedParameterAliases(functionLike, aliases, options); + + const handleReturnExpression = (expression: t.Expression) => { + const inferredResponse = inferResponseFromExpression(expression); + if (inferredResponse) { + inferredResponses.push(inferredResponse); + } + if (requiresCheckerForExpression(expression)) { + requiresTypeScriptChecker = true; + } + }; + + visitHandlerNode( + functionLike.body, + queryParamNames, + aliases, + parsedSchemas, + handleReturnExpression, + options, + ); + + if (!t.isBlockStatement(functionLike.body) && requiresCheckerForExpression(functionLike.body)) { + requiresTypeScriptChecker = true; + } + + if ( + parsedSchemas.notFoundResponse && + !inferredResponses.some((response) => response.statusCode === "404") + ) { + inferredResponses.push({ + statusCode: "404", + description: "Not Found", + source: "typescript", + }); + } + + if (parsedSchemas.streamResponse && !inferredResponses.some((response) => response.contentType)) { + inferredResponses.push({ + statusCode: "200", + contentType: "text/event-stream", + schema: { type: "string" }, + description: "Streaming response", + source: "typescript", + }); + } + + return { + inferredBodyType: parsedSchemas.bodyType ?? "", + inferredPathParamsType: parsedSchemas.pathParamsType ?? "", + inferredQueryParamNames: Array.from(queryParamNames), + inferredQueryParamsType: parsedSchemas.queryParamsType ?? "", + inferredResponses, + handlerDiagnostics: buildHandlerDiagnostics(parsedSchemas), + requiresTypeScriptChecker, + }; +} + +function emptyHandlerInsights(): HandlerInsights { + return { + inferredBodyType: "", + inferredPathParamsType: "", + inferredQueryParamNames: [], + inferredQueryParamsType: "", + inferredResponses: [], + handlerDiagnostics: [], + requiresTypeScriptChecker: false, + }; +} + +function buildHandlerDiagnostics( + parsedSchemas: HandlerParsedSchemas, +): NonNullable { + const diagnostics: NonNullable = []; + + if (parsedSchemas.notFoundResponse) { + diagnostics.push({ + code: "unsupported-route-feature", + severity: "info", + message: + "Handler calls notFound(); add an explicit @response for 404 if you want it documented in OpenAPI.", + metadata: { + suggestedFix: + "Add @response 404 or an @openapi override for the 404 response.", + }, + }); + } + + if (parsedSchemas.streamResponse) { + diagnostics.push({ + code: "stream-response-hint", + severity: "info", + message: + "Handler appears to return a streaming body. Consider @responseContentType text/event-stream (or another sequential media type) with @responseItem for accurate OpenAPI output.", + metadata: { + suggestedFix: + "Add @responseContentType, @responseItem, and optional @responseItemEncoding tags.", + }, + }); + } + + return diagnostics; +} + +function seedParameterAliases( + functionLike: t.FunctionDeclaration | t.FunctionExpression | t.ArrowFunctionExpression, + aliases: Map, + options: HandlerInsightOptions, +): void { + for (const param of functionLike.params) { + if (t.isIdentifier(param)) { + aliases.set(param.name, "queryParamsType"); + continue; + } + + if (!t.isObjectPattern(param)) { + continue; + } + + for (const property of param.properties) { + if (!t.isObjectProperty(property)) { + continue; + } + + const keyName = getPropertyName(property.key); + if (!keyName) { + continue; + } + + const value = property.value; + const source = getSourceForParameterProperty(keyName, options); + if (source && t.isIdentifier(value)) { + aliases.set(value.name, source); + } + } + } +} + +function getSourceForParameterProperty( + propertyName: string, + options: HandlerInsightOptions, +): HandlerValueSource | null { + if (propertyName === "params") { + return "pathParamsType"; + } + + if (propertyName === "request" || propertyName === "req") { + return "queryParamsType"; + } + + if (propertyName === "query") { + return options.hasPathParams ? "pathParamsType" : "queryParamsType"; + } + + return null; +} + +function visitHandlerNode( + node: t.Node | null | undefined, + queryParamNames: Set, + aliases: Map, + parsedSchemas: HandlerParsedSchemas, + onReturnExpression: (expression: t.Expression) => void, + options: HandlerInsightOptions, +): void { + if (!node) { + return; + } + + if (t.isCallExpression(node)) { + const name = getSearchParamName(node); + if (name) { + queryParamNames.add(name); + } + + const parsedSchema = getParsedSchemaFromCall(node, aliases, options); + if (parsedSchema) { + parsedSchemas[parsedSchema.source] ??= parsedSchema.schemaName; + } + + if (isNotFoundCall(node)) { + parsedSchemas.notFoundResponse = true; + } + + if (isReadableStreamResponse(node)) { + parsedSchemas.streamResponse = true; + } + } + + if (t.isVariableDeclarator(node) && t.isIdentifier(node.id) && node.init) { + const source = getHandlerValueSource(node.init, aliases, options); + if (source) { + aliases.set(node.id.name, source); + } + } + + if (t.isReturnStatement(node) && node.argument) { + if (t.isCallExpression(node.argument) && isReadableStreamResponse(node.argument)) { + parsedSchemas.streamResponse = true; + } + onReturnExpression(node.argument); + return; + } + + if (isNestedFunctionNode(node)) { + return; + } + + const visitorKeys = t.VISITOR_KEYS[node.type]; + if (!visitorKeys) { + return; + } + + visitorKeys.forEach((key) => { + const value = node[key as keyof typeof node]; + if (Array.isArray(value)) { + value.forEach((child) => { + if (isTraversableNode(child)) { + visitHandlerNode( + child, + queryParamNames, + aliases, + parsedSchemas, + onReturnExpression, + options, + ); + } + }); + return; + } + + if (isTraversableNode(value)) { + visitHandlerNode(value, queryParamNames, aliases, parsedSchemas, onReturnExpression, options); + } + }); +} + +function getSearchParamName(node: t.CallExpression): string | null { + if (!t.isMemberExpression(node.callee) || !t.isIdentifier(node.callee.property)) { + return null; + } + + const methodName = node.callee.property.name; + if (methodName !== "get" && methodName !== "getAll" && methodName !== "has") { + return null; + } + + if (!isSearchParamsExpression(node.callee.object)) { + return null; + } + + const firstArgument = node.arguments[0]; + return t.isStringLiteral(firstArgument) ? firstArgument.value : null; +} + +function getParsedSchemaFromCall( + node: t.CallExpression, + aliases: Map, + options: HandlerInsightOptions, +): { schemaName: string; source: HandlerValueSource } | null { + if (!t.isMemberExpression(node.callee) || !t.isIdentifier(node.callee.property)) { + return null; + } + + const methodName = node.callee.property.name; + if (methodName !== "parse" && methodName !== "safeParse") { + return null; + } + + if (!t.isIdentifier(node.callee.object)) { + return null; + } + + const firstArgument = node.arguments[0]; + if (!firstArgument || t.isArgumentPlaceholder(firstArgument)) { + return null; + } + + const source = getHandlerValueSource(firstArgument, aliases, options); + return source ? { schemaName: node.callee.object.name, source } : null; +} + +function getHandlerValueSource( + node: t.Node, + aliases: Map, + options: HandlerInsightOptions, +): HandlerValueSource | null { + if (t.isIdentifier(node)) { + return aliases.get(node.name) ?? null; + } + + if (t.isAwaitExpression(node)) { + return getHandlerValueSource(node.argument, aliases, options); + } + + if (isContextParamsExpression(node)) { + return "pathParamsType"; + } + + if (isRequestQueryExpression(node)) { + return options.hasPathParams ? "pathParamsType" : "queryParamsType"; + } + + if (isJsonBodyExpression(node) || isFormDataExpression(node)) { + return "bodyType"; + } + + if (containsSearchParams(node)) { + return "queryParamsType"; + } + + return null; +} + +function isContextParamsExpression(node: t.Node): boolean { + return ( + t.isMemberExpression(node) && + t.isIdentifier(node.property, { name: "params" }) && + t.isIdentifier(node.object) + ); +} + +function isRequestQueryExpression(node: t.Node): boolean { + return ( + t.isMemberExpression(node) && + t.isIdentifier(node.property, { name: "query" }) && + t.isIdentifier(node.object) + ); +} + +function isJsonBodyExpression(node: t.Node): boolean { + return isRequestMethodCall(node, "json"); +} + +function isFormDataExpression(node: t.Node): boolean { + return isRequestMethodCall(node, "formData"); +} + +function isRequestMethodCall(node: t.Node, methodName: string): boolean { + return ( + t.isCallExpression(node) && + t.isMemberExpression(node.callee) && + t.isIdentifier(node.callee.property, { name: methodName }) && + t.isIdentifier(node.callee.object) + ); +} + +function containsSearchParams(node: t.Node): boolean { + if (isSearchParamsExpression(node)) { + return true; + } + + const visitorKeys = t.VISITOR_KEYS[node.type]; + if (!visitorKeys) { + return false; + } + + return visitorKeys.some((key) => { + const value = node[key as keyof typeof node]; + if (Array.isArray(value)) { + return value.some((child) => isTraversableNode(child) && containsSearchParams(child)); + } + + return isTraversableNode(value) && containsSearchParams(value); + }); +} + +function isSearchParamsExpression(node: t.Node): boolean { + return ( + (t.isMemberExpression(node) && t.isIdentifier(node.property, { name: "searchParams" })) || + (t.isIdentifier(node) && node.name === "searchParams") + ); +} + +function isNotFoundCall(node: t.CallExpression): boolean { + return ( + t.isIdentifier(node.callee, { name: "notFound" }) || + (t.isMemberExpression(node.callee) && + t.isIdentifier(node.callee.property, { name: "notFound" }) && + t.isIdentifier(node.callee.object, { name: "next" })) + ); +} + +function isReadableStreamResponse(node: t.CallExpression): boolean { + if (!t.isMemberExpression(node.callee) || !t.isIdentifier(node.callee.property)) { + return false; + } + + if (node.callee.property.name !== "json") { + return false; + } + + const firstArgument = node.arguments[0]; + return Boolean(firstArgument && containsReadableStream(firstArgument)); +} + +function containsReadableStream(node: t.Node): boolean { + if (t.isNewExpression(node) && t.isIdentifier(node.callee, { name: "ReadableStream" })) { + return true; + } + + const visitorKeys = t.VISITOR_KEYS[node.type]; + if (!visitorKeys) { + return false; + } + + return visitorKeys.some((key) => { + const value = node[key as keyof typeof node]; + if (Array.isArray(value)) { + return value.some((child) => isTraversableNode(child) && containsReadableStream(child)); + } + + return isTraversableNode(value) && containsReadableStream(value); + }); +} + +function requiresCheckerForExpression(expression: t.Expression): boolean { + if (t.isCallExpression(expression) && t.isMemberExpression(expression.callee)) { + const property = expression.callee.property; + if (!t.isIdentifier(property)) { + return false; + } + + const object = expression.callee.object; + if (!t.isIdentifier(object)) { + return false; + } + + const isResponseFactory = object.name === "Response" || object.name === "NextResponse"; + if (!isResponseFactory) { + return false; + } + + return property.name === "json" && Boolean(expression.arguments[1]); + } + + return t.isNewExpression(expression) && t.isIdentifier(expression.callee, { name: "Response" }); +} + +function inferResponseFromExpression( + expression: t.Expression, +): InferredResponseDefinition | undefined { + if (isRedirectResponse(expression)) { + return { + statusCode: "307", + description: "Redirect response", + source: "typescript", + }; + } + + if (t.isNewExpression(expression) && t.isIdentifier(expression.callee, { name: "Response" })) { + const statusCode = getLiteralResponseStatusCode(expression.arguments[1]); + if (statusCode === "204") { + return { statusCode, source: "typescript" }; + } + } + + if (!t.isCallExpression(expression) || !t.isMemberExpression(expression.callee)) { + return undefined; + } + + if (!t.isIdentifier(expression.callee.property, { name: "json" })) { + return undefined; + } + + const calleeObject = expression.callee.object; + if (!t.isIdentifier(calleeObject)) { + return undefined; + } + + if (calleeObject.name !== "Response" && calleeObject.name !== "NextResponse") { + return undefined; + } + + const statusCode = getLiteralResponseStatusCode(expression.arguments[1]); + const schema = inferSchemaFromJsonArgument(expression.arguments[0]); + if (!schema && statusCode === "204") { + return { + statusCode, + source: "typescript", + }; + } + + if (!schema) { + return undefined; + } + + return { + statusCode: statusCode || "200", + schema, + source: "typescript", + }; +} + +function isRedirectResponse(expression: t.Expression): boolean { + if (!t.isCallExpression(expression) || !t.isMemberExpression(expression.callee)) { + return false; + } + + return ( + t.isIdentifier(expression.callee.property, { name: "redirect" }) && + t.isIdentifier(expression.callee.object) && + (expression.callee.object.name === "Response" || + expression.callee.object.name === "NextResponse") + ); +} + +function getLiteralResponseStatusCode( + argument: t.CallExpression["arguments"][number] | undefined, +): string | undefined { + if (!argument || !t.isObjectExpression(argument)) { + return undefined; + } + + for (const property of argument.properties) { + if (!t.isObjectProperty(property) || !isPropertyNamed(property, "status")) { + continue; + } + + const value = property.value; + if (t.isNumericLiteral(value)) { + return String(value.value); + } + } + + return undefined; +} + +function inferSchemaFromJsonArgument( + argument: t.CallExpression["arguments"][number] | undefined, +): OpenApiSchemaLike | undefined { + if (!argument) { + return { type: "object" }; + } + + if (t.isSpreadElement(argument)) { + return undefined; + } + + if (t.isNullLiteral(argument)) { + return { type: "null" }; + } + + if (t.isStringLiteral(argument) || t.isTemplateLiteral(argument)) { + return { type: "string" }; + } + + if (t.isNumericLiteral(argument)) { + return { type: "number" }; + } + + if (t.isBooleanLiteral(argument)) { + return { type: "boolean" }; + } + + if (t.isArrayExpression(argument)) { + const itemSchema = argument.elements + .map((element) => + element && !t.isSpreadElement(element) ? inferSchemaFromJsonArgument(element) : undefined, + ) + .find((schema): schema is OpenApiSchemaLike => Boolean(schema)); + return { + type: "array", + ...(itemSchema ? { items: itemSchema } : {}), + }; + } + + if (t.isObjectExpression(argument)) { + return { type: "object" }; + } + + if ( + t.isIdentifier(argument) || + t.isCallExpression(argument) || + t.isMemberExpression(argument) || + t.isAwaitExpression(argument) + ) { + return { type: "object" }; + } + + return undefined; +} + +function isPropertyNamed(property: t.ObjectProperty, name: string): boolean { + const propertyName = getPropertyName(property.key); + return propertyName === name; +} + +function getPropertyName(key: t.Node): string | null { + if (t.isIdentifier(key)) { + return key.name; + } + + if (t.isStringLiteral(key)) { + return key.value; + } + + return null; +} + +function getFunctionLikeNode( + handlerNode: t.Node, +): t.FunctionDeclaration | t.FunctionExpression | t.ArrowFunctionExpression | null { + if (t.isFunctionDeclaration(handlerNode) || t.isFunctionExpression(handlerNode)) { + return handlerNode; + } + + if (t.isVariableDeclarator(handlerNode) && t.isArrowFunctionExpression(handlerNode.init)) { + return handlerNode.init; + } + + return null; +} + +function isNestedFunctionNode(node: t.Node): boolean { + return ( + t.isFunctionDeclaration(node) || + t.isFunctionExpression(node) || + t.isArrowFunctionExpression(node) || + t.isObjectMethod(node) || + t.isClassMethod(node) + ); +} + +function isTraversableNode(value: unknown): value is t.Node { + if (!value || typeof value !== "object" || !("type" in value)) { + return false; + } + + const { type } = value; + return typeof type === "string" && type in t.VISITOR_KEYS; +} diff --git a/packages/openapi-core/src/index.ts b/packages/openapi-core/src/index.ts index 181e970e..04138a3f 100644 --- a/packages/openapi-core/src/index.ts +++ b/packages/openapi-core/src/index.ts @@ -1,7 +1,7 @@ export type { - GenerationAdapters, DocsArtifactEmitter, FrameworkSourceFactory, + GenerationAdapters, } from "./core/adapters.js"; export { defineConfig } from "./core/config/define-config.js"; export { @@ -25,4 +25,9 @@ export { watchProject } from "./core/watch.js"; export { OpenApiGenerator } from "./generator/openapi-generator.js"; export type { GeneratorPerformanceProfile } from "./generator/openapi-generator.js"; export { FrameworkKind } from "./shared/types.js"; -export type { Diagnostic, OpenApiDocument, OpenApiTemplate } from "./shared/types.js"; +export type { + Diagnostic, + DiagnosticFailOn, + OpenApiDocument, + OpenApiTemplate, +} from "./shared/types.js"; diff --git a/packages/openapi-core/src/openapi/version-processor.ts b/packages/openapi-core/src/openapi/version-processor.ts index d8077008..bade7475 100644 --- a/packages/openapi-core/src/openapi/version-processor.ts +++ b/packages/openapi-core/src/openapi/version-processor.ts @@ -692,13 +692,27 @@ function downgradeSchemaForOpenApi30(schema: OpenApiSchema, mediaTypeName?: stri } if (typeof nextSchema.exclusiveMinimum === "number") { - nextSchema.minimum = nextSchema.exclusiveMinimum; - nextSchema.exclusiveMinimum = true; + if ( + typeof nextSchema.minimum !== "number" || + nextSchema.exclusiveMinimum >= nextSchema.minimum + ) { + nextSchema.minimum = nextSchema.exclusiveMinimum; + nextSchema.exclusiveMinimum = true; + } else { + delete nextSchema.exclusiveMinimum; + } } if (typeof nextSchema.exclusiveMaximum === "number") { - nextSchema.maximum = nextSchema.exclusiveMaximum; - nextSchema.exclusiveMaximum = true; + if ( + typeof nextSchema.maximum !== "number" || + nextSchema.exclusiveMaximum <= nextSchema.maximum + ) { + nextSchema.maximum = nextSchema.exclusiveMaximum; + nextSchema.exclusiveMaximum = true; + } else { + delete nextSchema.exclusiveMaximum; + } } if (Array.isArray(nextSchema.examples) && nextSchema.examples.length > 0) { @@ -723,6 +737,17 @@ function downgradeSchemaForOpenApi30(schema: OpenApiSchema, mediaTypeName?: stri delete nextSchema.contentMediaType; delete nextSchema.$schema; + if (Array.isArray(nextSchema.prefixItems) && nextSchema.prefixItems.length > 0) { + const prefixItems = nextSchema.prefixItems; + const restItems = isRecord(nextSchema.items) ? nextSchema.items : null; + + nextSchema.items = + restItems || prefixItems.length > 1 + ? { oneOf: [...prefixItems, ...(restItems ? [restItems] : [])] } + : prefixItems[0]; + delete nextSchema.prefixItems; + } + // OpenAPI 3.0 does not support several JSON Schema 2020-12 keywords. Strip them so // generated specs keep validating; the information is preserved in 3.1/3.2 output. const unsupportedOpenApi30Keywords: readonly string[] = [ diff --git a/packages/openapi-core/src/routes/operation-processor.ts b/packages/openapi-core/src/routes/operation-processor.ts index 69d2e8b9..a1c39e9e 100644 --- a/packages/openapi-core/src/routes/operation-processor.ts +++ b/packages/openapi-core/src/routes/operation-processor.ts @@ -1,5 +1,6 @@ import type { GenerationPerformanceProfile } from "../core/performance.js"; import { measurePerformance } from "../core/performance.js"; +import type { DiagnosticsCollector } from "../diagnostics/collector.js"; import { createMultipartEncoding } from "../schema/typescript/helpers.js"; import type { SchemaProcessor } from "../schema/typescript/schema-processor.js"; import type { @@ -14,6 +15,7 @@ import { DEFAULT_AUTH_PRESET_REPLACEMENTS, getOperationId, performAuthPresetReplacements, + resolveAnnotationTypeName, } from "../shared/utils.js"; import type { ResponseProcessor } from "./response-processor.js"; @@ -28,6 +30,7 @@ export class OperationProcessor { private readonly responseProcessor: ResponseProcessor, options: { authPresets?: Record | undefined; + diagnostics?: DiagnosticsCollector | undefined; performanceProfile?: GenerationPerformanceProfile | undefined; } = {}, ) { @@ -36,15 +39,19 @@ export class OperationProcessor { ...options.authPresets, }; this.performanceProfile = options.performanceProfile; + this.diagnostics = options.diagnostics; } + private readonly diagnostics: DiagnosticsCollector | undefined; + public processOperation( varName: string, routePath: string, dataTypes: DataTypes, pathParamNames: string[] = [], + filePath?: string, ): { routePath: string; method: string; definition: RouteDefinition } { - const method = varName.toLowerCase(); + const method = (dataTypes.method || varName).toLowerCase(); const rootSegment = routePath.split("/")[1] || ""; const rootPath = capitalize(rootSegment); const operationId = dataTypes.operationId || getOperationId(routePath, method); @@ -65,13 +72,29 @@ export class OperationProcessor { responseDescription, openapiOverride, } = dataTypes; + let paramsType = resolveAnnotationTypeName( + dataTypes.paramsType, + dataTypes.inferredQueryParamsType, + ); + let pathParamsType = resolveAnnotationTypeName( + dataTypes.pathParamsType, + dataTypes.inferredPathParamsType, + ); + const bodyType = resolveAnnotationTypeName(dataTypes.bodyType, dataTypes.inferredBodyType); + if (!paramsType && dataTypes.inferredQueryParamNames?.length) { + paramsType = this.findQueryParamsCandidate(rootPath); + } + if (!pathParamsType && pathParamNames.length > 0) { + pathParamsType = this.findPathParamsObjectCandidate(rootPath, pathParamNames); + } + this.addInferenceDiagnostics(dataTypes, routePath); const { params, pathParams } = - dataTypes.paramsType || dataTypes.pathParamsType + paramsType || pathParamsType ? measurePerformance(this.performanceProfile, "getSchemaContentMs", () => this.schemaProcessor.getSchemaContent({ - paramsType: dataTypes.paramsType, - pathParamsType: dataTypes.pathParamsType, + paramsType, + pathParamsType, }), ) : { params: undefined, pathParams: undefined }; @@ -132,6 +155,22 @@ export class OperationProcessor { } if (dataTypes.inferredQueryParamNames?.length) { + if (!paramsType) { + this.diagnostics?.add({ + code: "missing-query-params-type", + severity: "warning", + message: + "Query parameters were inferred from searchParams usage, but no @queryParams type is defined.", + filePath, + routePath, + metadata: { + names: dataTypes.inferredQueryParamNames, + suggestedFix: + "Add @queryParams or validate URL search parameters with a Zod schema in the handler.", + }, + }); + } + const knownQueryParameterNames = new Set( definition.parameters .filter((parameter) => parameter.in === "query") @@ -156,18 +195,34 @@ export class OperationProcessor { } if (pathParamNames.length > 0) { - if (!pathParams) { - const defaultPathParams = measurePerformance( - this.performanceProfile, - "createRequestParamsMs", - () => this.schemaProcessor.createDefaultPathParamsSchema(pathParamNames), - ); - definition.parameters.push(...defaultPathParams); + const resolvedPathParams = + pathParams?.properties && Object.keys(pathParams.properties).length > 0 + ? pathParams + : undefined; + + if (!resolvedPathParams) { + const candidatePathParams = this.createPathParamsFromIndividualCandidates(pathParamNames); + if (candidatePathParams) { + const candidateParams = measurePerformance( + this.performanceProfile, + "createRequestParamsMs", + () => this.schemaProcessor.createRequestParamsSchema(candidatePathParams, true), + ); + definition.parameters.push(...candidateParams); + } else { + this.addPathParamCandidateDiagnostics(pathParamNames, routePath, filePath); + const defaultPathParams = measurePerformance( + this.performanceProfile, + "createRequestParamsMs", + () => this.schemaProcessor.createDefaultPathParamsSchema(pathParamNames), + ); + definition.parameters.push(...defaultPathParams); + } } else { const moreParams = measurePerformance( this.performanceProfile, "createRequestParamsMs", - () => this.schemaProcessor.createRequestParamsSchema(pathParams, true), + () => this.schemaProcessor.createRequestParamsSchema(resolvedPathParams, true), ); definition.parameters.push(...moreParams); } @@ -218,7 +273,7 @@ export class OperationProcessor { } if (this.responseProcessor.supportsRequestBody(method)) { - const requestBody = this.createRequestBody(dataTypes); + const requestBody = this.createRequestBody({ ...dataTypes, bodyType }, routePath); if (requestBody) { definition.requestBody = requestBody; } @@ -275,6 +330,98 @@ export class OperationProcessor { return [...mergedTags]; } + private findQueryParamsCandidate(rootPath: string): string | undefined { + return this.findFirstSchemaCandidate([ + `${rootPath}QuerySchema`, + `${rootPath}ParamsSchema`, + `${rootPath}QueryParamsSchema`, + ]); + } + + private findPathParamsObjectCandidate( + rootPath: string, + pathParamNames: string[], + ): string | undefined { + const candidates = [ + `${rootPath}PathParamsSchema`, + `${rootPath}ParamsSchema`, + ...pathParamNames.map((name) => `${capitalize(name)}ParamsSchema`), + ]; + return this.findFirstSchemaCandidate(candidates); + } + + private createPathParamsFromIndividualCandidates( + pathParamNames: string[], + ): + | { type: "object"; required: string[]; properties: Record } + | undefined { + const properties: Record = {}; + + for (const name of pathParamNames) { + const schemaName = this.findFirstSchemaCandidate([ + `${name}Schema`, + `${capitalize(name)}Schema`, + ]); + if (!schemaName) { + return undefined; + } + + properties[name] = { + $ref: `#/components/schemas/${this.schemaProcessor.getSchemaReferenceName( + schemaName, + "pathParams", + )}`, + }; + } + + return { + type: "object", + required: pathParamNames, + properties, + }; + } + + private addPathParamCandidateDiagnostics( + pathParamNames: string[], + routePath: string, + filePath: string | undefined, + ): void { + pathParamNames.forEach((name) => { + const schemaName = this.findFirstSchemaCandidate([ + `${name}Schema`, + `${capitalize(name)}Schema`, + ]); + if (!schemaName) { + return; + } + + this.diagnostics?.add({ + code: "path-param-schema-conflict", + severity: "info", + message: `Path parameter "${name}" is using fallback schema inference even though "${schemaName}" exists. Add @pathParams or validate context.params with that schema to preserve constraints.`, + filePath, + routePath, + metadata: { + parameterName: name, + schemaName, + suggestedFix: `Add @pathParams ${schemaName}Params or validate context.params with a schema that includes "${name}".`, + }, + }); + }); + } + + private findFirstSchemaCandidate(candidateNames: string[]): string | undefined { + const hasSchemaCandidate = + "hasSchemaCandidate" in this.schemaProcessor + ? this.schemaProcessor.hasSchemaCandidate.bind(this.schemaProcessor) + : undefined; + if (!hasSchemaCandidate) { + return undefined; + } + + return candidateNames.find((candidateName) => hasSchemaCandidate(candidateName)); + } + private appendDeprecationReason( description: string | undefined, deprecated: boolean | undefined, @@ -376,16 +523,64 @@ export class OperationProcessor { } } + private addInferenceDiagnostics(dataTypes: DataTypes, routePath: string): void { + if ( + !resolveAnnotationTypeName(dataTypes.pathParamsType) && + dataTypes.inferredPathParamsType?.trim() + ) { + this.diagnostics?.add({ + code: "inferred-path-params", + severity: "info", + message: `Inferred path parameter schema from handler validation: ${dataTypes.inferredPathParamsType}`, + routePath, + metadata: { schemaName: dataTypes.inferredPathParamsType }, + }); + } + + if ( + !resolveAnnotationTypeName(dataTypes.paramsType) && + dataTypes.inferredQueryParamsType?.trim() + ) { + this.diagnostics?.add({ + code: "inferred-query-params", + severity: "info", + message: `Inferred query parameter schema from handler validation: ${dataTypes.inferredQueryParamsType}`, + routePath, + metadata: { schemaName: dataTypes.inferredQueryParamsType }, + }); + } + + if (!resolveAnnotationTypeName(dataTypes.bodyType) && dataTypes.inferredBodyType?.trim()) { + this.diagnostics?.add({ + code: "inferred-body", + severity: "info", + message: `Inferred request body schema from handler validation: ${dataTypes.inferredBodyType}`, + routePath, + metadata: { schemaName: dataTypes.inferredBodyType }, + }); + } + } + private applyPreset(scheme: string): string { return this.authPresets[scheme.toLowerCase()] ?? scheme; } - private createRequestBody(dataTypes: DataTypes): OpenApiRequestBody | undefined { + private createRequestBody( + dataTypes: DataTypes, + routePath: string, + ): OpenApiRequestBody | undefined { if (dataTypes.bodyType) { return this.createSchemaBackedRequestBody(dataTypes); } if (dataTypes.contentType?.toLowerCase() === "multipart/form-data") { + this.diagnostics?.add({ + code: "multipart-missing-body-schema", + severity: "warning", + message: + "Route declares @contentType multipart/form-data without @body; using the default file-only multipart request body.", + routePath, + }); return this.createDefaultMultipartRequestBody(dataTypes.bodyDescription); } diff --git a/packages/openapi-core/src/routes/response-processor.ts b/packages/openapi-core/src/routes/response-processor.ts index fe260abd..1c10921e 100644 --- a/packages/openapi-core/src/routes/response-processor.ts +++ b/packages/openapi-core/src/routes/response-processor.ts @@ -21,6 +21,8 @@ const DEFAULT_ERROR_DESCRIPTIONS: Record = { }; export class ResponseProcessor { + private readonly schemaReferenceCache = new Map(); + constructor( private readonly config: ResolvedOpenApiConfig, private readonly schemaProcessor: SchemaProcessor, @@ -191,9 +193,18 @@ export class ResponseProcessor { !response.itemTypeName && !dataTypes.responseItemType) ) { - return { + const responseObject: OpenApiResponseDefinition = { description, }; + if (this.isRedirectStatus(statusCode)) { + responseObject.headers = { + Location: { + description: "Redirect target URL", + schema: { type: "string", format: "uri" }, + }, + }; + } + return responseObject; } const mediaType = this.createResponseMediaType(response, dataTypes); @@ -205,6 +216,11 @@ export class ResponseProcessor { }; } + private isRedirectStatus(statusCode: string): boolean { + const numericStatus = Number(statusCode); + return numericStatus >= 300 && numericStatus < 400; + } + private createResponseMediaType( response: InferredResponseDefinition, dataTypes: DataTypes, @@ -252,6 +268,12 @@ export class ResponseProcessor { } private buildSchemaReference(typeName: string, contentType: "response"): OpenApiSchemaLike { + const cacheKey = `${contentType}:${typeName}`; + const cachedSchema = this.schemaReferenceCache.get(cacheKey); + if (cachedSchema) { + return structuredClone(cachedSchema); + } + let baseType = typeName; let arrayDepth = 0; @@ -268,6 +290,7 @@ export class ResponseProcessor { }; } + this.schemaReferenceCache.set(cacheKey, schema); return schema; } diff --git a/packages/openapi-core/src/routes/route-processor.ts b/packages/openapi-core/src/routes/route-processor.ts index 7d291786..b92187a4 100644 --- a/packages/openapi-core/src/routes/route-processor.ts +++ b/packages/openapi-core/src/routes/route-processor.ts @@ -3,20 +3,20 @@ import fs from "fs"; import { normalizeOpenApiConfig } from "../config/normalize.js"; import type { FrameworkSourceFactory } from "../core/adapters.js"; import { measurePerformance, type GenerationPerformanceProfile } from "../core/performance.js"; -import type { SharedGenerationRuntime } from "../core/runtime.js"; +import type { CachedRouteFragment, SharedGenerationRuntime } from "../core/runtime.js"; import type { DiagnosticsCollector } from "../diagnostics/collector.js"; import type { FrameworkSource } from "../frameworks/types.js"; import { SchemaProcessor } from "../schema/typescript/schema-processor.js"; import { logger } from "../shared/logger.js"; import type { DataTypes, - OpenApiTagDefinition, OpenApiConfig, OpenApiPathDefinition, + OpenApiTagDefinition, ResolvedOpenApiConfig, RouteDefinition, } from "../shared/types.js"; -import { capitalize, extractPathParameters } from "../shared/utils.js"; +import { capitalize, extractPathParameters, resolveAnnotationTypeName } from "../shared/utils.js"; import { OperationProcessor } from "./operation-processor.js"; import { sortPathDefinitions } from "./path-sort.js"; import { ResponseProcessor } from "./response-processor.js"; @@ -30,7 +30,10 @@ export type RouteScanPerformanceProfile = { export class RouteProcessor { private pathDefinitions: Record = {}; + private webhookDefinitions: Record = {}; private tagDefinitions: Record = {}; + private cachedSchemaDefinitions: Record = {}; + private cachedInternalSchemaDefinitions: Record = {}; private schemaProcessor: SchemaProcessor; private config: ResolvedOpenApiConfig; private source: FrameworkSource; @@ -39,6 +42,7 @@ export class RouteProcessor { private responseProcessor: ResponseProcessor; private operationProcessor: OperationProcessor; private performanceProfile: GenerationPerformanceProfile | undefined; + private runtime: SharedGenerationRuntime | undefined; private directoryCache: Record = {}; private statCache: Record = {}; @@ -54,6 +58,7 @@ export class RouteProcessor { this.config = normalizeOpenApiConfig(config); this.diagnostics = diagnostics; this.performanceProfile = performanceProfile; + this.runtime = runtime; if (runtime) { this.directoryCache = runtime.routeScan.directoryCache; this.statCache = runtime.routeScan.statCache; @@ -65,6 +70,8 @@ export class RouteProcessor { this.config.apiDir, undefined, runtime, + this.diagnostics, + this.performanceProfile, ); this.source = (createFrameworkSource ?? missingFrameworkSourceFactory)( this.config, @@ -77,6 +84,7 @@ export class RouteProcessor { this.responseProcessor = new ResponseProcessor(this.config, this.schemaProcessor); this.operationProcessor = new OperationProcessor(this.schemaProcessor, this.responseProcessor, { authPresets: this.config.authPresets, + diagnostics: this.diagnostics, performanceProfile: this.performanceProfile, }); } @@ -156,13 +164,24 @@ export class RouteProcessor { const pathParams = extractPathParameters(routePath); this.registerTagMetadata(routePath, dataTypes); - if (pathParams.length > 0 && !dataTypes.pathParamsType) { + this.registerRouteFeatureDiagnostics(filePath, routePath, dataTypes); + if ( + pathParams.length > 0 && + !resolveAnnotationTypeName(dataTypes.pathParamsType) && + !resolveAnnotationTypeName(dataTypes.inferredPathParamsType) && + !this.canAutoWirePathParams(routePath, pathParams) + ) { this.diagnostics?.add({ code: "missing-path-params-type", severity: "warning", message: `Route ${routePath} contains path parameters ${pathParams.join(", ")} but no @pathParams type is defined.`, filePath, routePath, + metadata: { + pathParams, + suggestedFix: + "Add @pathParams , validate context.params in the handler, or export matching Schema helpers.", + }, }); logger.debug( `Route ${routePath} contains path parameters ${pathParams.join( @@ -171,7 +190,33 @@ export class RouteProcessor { ); } - this.addRouteToPaths(method, routePath, dataTypes, pathParams); + this.addRouteToPaths(method, routePath, dataTypes, pathParams, filePath); + } + + private canAutoWirePathParams(routePath: string, pathParams: string[]): boolean { + const hasSchemaCandidate = + "hasSchemaCandidate" in this.schemaProcessor + ? this.schemaProcessor.hasSchemaCandidate.bind(this.schemaProcessor) + : undefined; + if (!hasSchemaCandidate) { + return false; + } + + const rootPath = capitalize(routePath.split("/")[1] || ""); + const objectCandidates = [ + `${rootPath}PathParamsSchema`, + `${rootPath}ParamsSchema`, + ...pathParams.map((name) => `${capitalize(name)}ParamsSchema`), + ]; + if (objectCandidates.some((candidate) => hasSchemaCandidate(candidate))) { + return true; + } + + return pathParams.every((name) => + [`${name}Schema`, `${capitalize(name)}Schema`].some((candidate) => + hasSchemaCandidate(candidate), + ), + ); } public scanApiRoutes(dir: string): RouteScanPerformanceProfile { @@ -208,17 +253,37 @@ export class RouteProcessor { return; } + const cachedFragment = this.getReusableRouteFragment(filePath, routePath); + if (cachedFragment) { + this.applyRouteFragment(cachedFragment); + return; + } + let phaseStartedAt = performance.now(); const discoveredRoutes = this.source.processFile(filePath, routePath); processRouteFilesMs += performance.now() - phaseStartedAt; phaseStartedAt = performance.now(); + const pathsBefore = structuredClone(this.pathDefinitions); + const webhooksBefore = structuredClone(this.webhookDefinitions); + const tagsBefore = structuredClone(this.tagDefinitions); + const schemasBefore = this.schemaProcessor.getDefinedSchemas(); + const internalSchemasBefore = this.schemaProcessor.getInternalSchemas(); + const diagnosticsBefore = this.diagnostics?.getAll().length ?? 0; discoveredRoutes.forEach(({ method, filePath: routeFilePath, routePath, dataTypes }) => { measurePerformance(this.performanceProfile, "registerRouteMs", () => { this.registerRoute(method, routeFilePath, routePath, dataTypes); }); }); buildOperationsMs += performance.now() - phaseStartedAt; + this.writeRouteFragment(filePath, routePath, { + diagnosticsBefore, + internalSchemasBefore, + pathsBefore, + schemasBefore, + tagsBefore, + webhooksBefore, + }); }); return { @@ -235,6 +300,8 @@ export class RouteProcessor { buildOperationsMs: 0, }; + this.schemaProcessor.preprocessZodSchemas(); + this.source.getScanRoots().forEach((rootDir) => { if (fs.existsSync(rootDir)) { const routeProfile = this.scanApiRoutes(rootDir); @@ -252,6 +319,7 @@ export class RouteProcessor { discoveredRoutePath: string, dataTypes: DataTypes, pathParamNames: string[] = [], + filePath?: string, ): void { const normalizedRoutePath = discoveredRoutePath.includes("{") || discoveredRoutePath.startsWith("/") @@ -265,15 +333,120 @@ export class RouteProcessor { normalizedRoutePath, dataTypes, resolvedPathParamNames, + filePath, ); + if (dataTypes.isWebhook) { + const webhookKey = dataTypes.webhookName?.trim() || routePath; + if (!this.webhookDefinitions[webhookKey]) { + this.webhookDefinitions[webhookKey] = {}; + } + this.webhookDefinitions[webhookKey][method] = definition; + return; + } + if (!this.pathDefinitions[routePath]) { this.pathDefinitions[routePath] = {}; } + if (method === "query") { + const pathItem = this.pathDefinitions[routePath] as OpenApiPathDefinition & { + additionalOperations?: Record; + }; + pathItem.additionalOperations ??= {}; + pathItem.additionalOperations.query = definition; + return; + } + this.pathDefinitions[routePath][method] = definition; } + public getWebhooks(): Record { + return sortPathDefinitions(this.webhookDefinitions); + } + + private getReusableRouteFragment( + filePath: string, + routePath: string, + ): CachedRouteFragment | undefined { + const fragment = this.runtime?.routeScan.routeFragments.get(filePath); + if (!fragment) { + return undefined; + } + + const stat = fs.statSync(filePath); + if ( + fragment.mtimeMs !== stat.mtimeMs || + fragment.size !== stat.size || + fragment.cacheKey !== this.getRouteFragmentCacheKey(routePath) + ) { + return undefined; + } + + return fragment; + } + + private applyRouteFragment(fragment: CachedRouteFragment): void { + Object.assign(this.pathDefinitions, structuredClone(fragment.paths)); + Object.assign(this.webhookDefinitions, structuredClone(fragment.webhooks)); + Object.assign(this.tagDefinitions, structuredClone(fragment.tags)); + Object.assign(this.cachedSchemaDefinitions, structuredClone(fragment.schemas)); + Object.assign(this.cachedInternalSchemaDefinitions, structuredClone(fragment.internalSchemas)); + fragment.diagnostics.forEach((diagnostic) => this.diagnostics?.add(diagnostic)); + } + + private writeRouteFragment( + filePath: string, + routePath: string, + previous: { + diagnosticsBefore: number; + internalSchemasBefore: Record; + pathsBefore: Record; + schemasBefore: Record; + tagsBefore: Record; + webhooksBefore: Record; + }, + ): void { + if (!this.runtime) { + return; + } + + const stat = fs.statSync(filePath); + const currentSchemas = this.schemaProcessor.getDefinedSchemas(); + const currentInternalSchemas = this.schemaProcessor.getInternalSchemas(); + const diagnostics = this.diagnostics?.getAll().slice(previous.diagnosticsBefore) ?? []; + + this.runtime.routeScan.routeFragments.set(filePath, { + cacheKey: this.getRouteFragmentCacheKey(routePath), + diagnostics: structuredClone(diagnostics), + internalSchemas: getSchemaDelta(previous.internalSchemasBefore, currentInternalSchemas), + mtimeMs: stat.mtimeMs, + paths: getRecordDelta(previous.pathsBefore, this.pathDefinitions), + schemas: getSchemaDelta(previous.schemasBefore, currentSchemas), + size: stat.size, + tags: getRecordDelta(previous.tagsBefore, this.tagDefinitions), + webhooks: getRecordDelta(previous.webhooksBefore, this.webhookDefinitions), + }); + } + + private getRouteFragmentCacheKey(routePath: string): string { + return JSON.stringify({ + authPresets: this.config.authPresets, + defaultResponseSet: this.config.defaultResponseSet, + errorConfig: this.config.errorConfig, + errorDefinitions: this.config.errorDefinitions, + excludeSchemas: this.config.excludeSchemas, + framework: this.config.framework, + ignoreRoutes: this.config.ignoreRoutes, + includeOpenApiRoutes: this.config.includeOpenApiRoutes, + openapiVersion: this.config.openapiVersion, + responseSets: this.config.responseSets, + routePath, + schemaBackends: this.config.schemaBackends, + schemaFiles: this.config.schemaFiles, + }); + } + public getPaths(): Record { return sortPathDefinitions(this.pathDefinitions); } @@ -288,6 +461,51 @@ export class RouteProcessor { return this.getPaths(); } + public getCachedSchemas(): Record { + return this.cachedSchemaDefinitions; + } + + public getCachedInternalSchemas(): Record { + return this.cachedInternalSchemaDefinitions; + } + + private registerRouteFeatureDiagnostics( + filePath: string, + routePath: string, + _dataTypes: DataTypes, + ): void { + const normalizedFilePath = filePath.replaceAll("\\", "/"); + if (normalizedFilePath.includes("/[[...")) { + this.diagnostics?.add({ + code: "unsupported-route-feature", + severity: "info", + message: `Route ${routePath} uses an optional catch-all segment ([[...]]). OpenAPI path parameters are always required; verify the emitted parameter semantics match your runtime.`, + filePath, + routePath, + }); + } + + if (/\/@[^/]+/.test(normalizedFilePath)) { + this.diagnostics?.add({ + code: "unsupported-route-feature", + severity: "info", + message: `Route ${routePath} uses a parallel route segment (@folder). Parallel route folders are stripped from the generated OpenAPI path.`, + filePath, + routePath, + }); + } + + if (/\/\(\.+[^)]*\)/.test(normalizedFilePath)) { + this.diagnostics?.add({ + code: "unsupported-route-feature", + severity: "info", + message: `Route ${routePath} uses an intercepting route segment. Intercepting route folders are stripped from the generated OpenAPI path.`, + filePath, + routePath, + }); + } + } + private registerTagMetadata(routePath: string, dataTypes: DataTypes): void { const routeTag = dataTypes.tag || capitalize(routePath.split("/")[1] || ""); if (!routeTag) { @@ -304,6 +522,23 @@ export class RouteProcessor { } } +function getSchemaDelta( + before: Record, + after: Record, +): Record { + return getRecordDelta(before, after); +} + +function getRecordDelta(before: Record, after: Record): Record { + const delta: Record = {}; + for (const [key, value] of Object.entries(after)) { + if (JSON.stringify(before[key]) !== JSON.stringify(value)) { + delta[key] = value; + } + } + return delta as Record; +} + function missingFrameworkSourceFactory(): never { throw new Error("A framework source factory is required to scan routes."); } diff --git a/packages/openapi-core/src/routes/router-strategy.ts b/packages/openapi-core/src/routes/router-strategy.ts index 55565289..b3fe16a0 100644 --- a/packages/openapi-core/src/routes/router-strategy.ts +++ b/packages/openapi-core/src/routes/router-strategy.ts @@ -1,6 +1,6 @@ import type { DataTypes } from "../shared/types.js"; -export const HTTP_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"]; +export const HTTP_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]; export interface RouterStrategy { /** Cheap precheck before full parsing and analysis */ diff --git a/packages/openapi-core/src/schema/typescript/helpers.ts b/packages/openapi-core/src/schema/typescript/helpers.ts index f966be26..809779eb 100644 --- a/packages/openapi-core/src/schema/typescript/helpers.ts +++ b/packages/openapi-core/src/schema/typescript/helpers.ts @@ -4,6 +4,7 @@ import type { ContentType, OpenAPIDefinition, OpenApiMediaTypeDefinition, + OpenApiSchemaLike, PropertyOptions, SchemaType, } from "../../shared/types.js"; @@ -198,7 +199,18 @@ export function getPropertyOptions(node: any, contentType: ContentType): Propert return options; } -export function getExampleForParam(paramName: string, type: string = "string"): any { +export function getExampleForParam( + paramName: string, + typeOrSchema: string | OpenApiSchemaLike = "string", +): any { + const schema = typeof typeOrSchema === "string" ? { type: typeOrSchema } : typeOrSchema; + const type = getPrimaryType(schema.type); + const format = typeof schema.format === "string" ? schema.format : undefined; + + if (format === "uuid" || paramName.toLowerCase().includes("uuid")) { + return "123e4567-e89b-12d3-a456-426614174000"; + } + if (paramName === "id" || paramName.endsWith("Id") || paramName.endsWith("_id")) { return type === "string" ? "123" : 123; } @@ -222,12 +234,20 @@ export function getExampleForParam(paramName: string, type: string = "string"): return "admin"; default: if (type === "string") return "example"; - if (type === "number") return 1; + if (type === "number" || type === "integer") return 1; if (type === "boolean") return true; return "example"; } } +function getPrimaryType(type: OpenApiSchemaLike["type"]): string { + if (Array.isArray(type)) { + return type.find((entry) => entry !== "null") || type[0] || "string"; + } + + return typeof type === "string" ? type : "string"; +} + export function detectContentType(bodyType: string, explicitContentType?: string): string { if (explicitContentType) { return explicitContentType; @@ -296,6 +316,11 @@ function getMultipartPartContentType( propertyName: string, value: OpenAPIDefinition, ): string | undefined { + const mediaTypes = getMultipartPartContentMediaTypes(value); + if (mediaTypes.length > 0) { + return mediaTypes.join(", "); + } + if (typeof value.contentMediaType === "string") { return value.contentMediaType; } @@ -304,6 +329,10 @@ function getMultipartPartContentType( return "application/octet-stream"; } + if (value.type === "array" && value.items && typeof value.items === "object") { + return getMultipartPartContentType(propertyName, value.items); + } + if ( value.type === "object" && (propertyName.toLowerCase().includes("file") || @@ -315,6 +344,19 @@ function getMultipartPartContentType( return undefined; } +function getMultipartPartContentMediaTypes(value: OpenAPIDefinition): string[] { + const mediaTypes = value["x-contentMediaTypes"]; + if (Array.isArray(mediaTypes)) { + return mediaTypes.filter((mediaType): mediaType is string => typeof mediaType === "string"); + } + + if (value.type === "array" && value.items && typeof value.items === "object") { + return getMultipartPartContentMediaTypes(value.items); + } + + return []; +} + export function isDateString(node: any): boolean { if (t.isStringLiteral(node)) { const dateRegex = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?Z)?$/; diff --git a/packages/openapi-core/src/schema/typescript/schema-content.ts b/packages/openapi-core/src/schema/typescript/schema-content.ts index 64533794..2cef1c51 100644 --- a/packages/openapi-core/src/schema/typescript/schema-content.ts +++ b/packages/openapi-core/src/schema/typescript/schema-content.ts @@ -39,26 +39,14 @@ export function createMultipleResponsesSchema( export function createDefaultPathParamsSchema(paramNames: string[]): ParamSchema[] { return paramNames.map((paramName) => { - let type = "string"; - if ( - paramName === "id" || - paramName.endsWith("Id") || - paramName === "page" || - paramName === "limit" || - paramName === "size" || - paramName === "count" - ) { - type = "number"; - } + const schema: OpenApiSchemaLike = { type: "string" }; return { name: paramName, in: "path", required: true, - schema: { - type, - }, - example: getExampleForParam(paramName, type), + schema, + example: getExampleForParam(paramName, schema), description: `Path parameter: ${paramName}`, }; }); @@ -123,10 +111,10 @@ export function createRequestParamsSchema( param.explode = true; } - if (isPathLike) { - param.example = getExampleForParam(name, getPrimarySchemaType(value.type)); - } else if (typeof value.example !== "undefined") { + if (typeof value.example !== "undefined") { param.example = value.example; + } else if (param.schema) { + param.example = getExampleForParam(name, param.schema); } if (value.examples && typeof value.examples === "object" && !Array.isArray(value.examples)) { @@ -311,26 +299,16 @@ export function getSchemaContent( const querystring = baseQuerystringType ? context.openapiDefinitions[baseQuerystringType] || {} : {}; - const pathParams = pathParamsType ? context.openapiDefinitions[pathParamsType] || {} : {}; + let pathParams = pathParamsType ? context.openapiDefinitions[pathParamsType] || {} : {}; const body = baseBodyType ? context.openapiDefinitions[baseBodyType] || {} : {}; const responses = baseResponseType ? context.openapiDefinitions[baseResponseType] || {} : {}; - if (context.schemaTypes.includes("zod")) { - if (paramsType && !context.openapiDefinitions[paramsType]) { - context.findSchemaDefinition(paramsType, "params"); - } - if (baseQuerystringType && !context.openapiDefinitions[baseQuerystringType]) { - context.findSchemaDefinition(baseQuerystringType, "params"); - } - if (pathParamsType && !context.openapiDefinitions[pathParamsType]) { - context.findSchemaDefinition(pathParamsType, "pathParams"); - } - if (baseBodyType && !context.openapiDefinitions[baseBodyType]) { - context.findSchemaDefinition(baseBodyType, "body"); - } - if (baseResponseType && !context.openapiDefinitions[baseResponseType]) { - context.findSchemaDefinition(baseResponseType, "response"); - } + if ( + pathParamsType && + (!pathParams.properties || Object.keys(pathParams.properties).length === 0) + ) { + context.findSchemaDefinition(pathParamsType, "pathParams"); + pathParams = context.openapiDefinitions[pathParamsType] || pathParams; } return { diff --git a/packages/openapi-core/src/schema/typescript/schema-processor.ts b/packages/openapi-core/src/schema/typescript/schema-processor.ts index a151834c..d26bb54f 100644 --- a/packages/openapi-core/src/schema/typescript/schema-processor.ts +++ b/packages/openapi-core/src/schema/typescript/schema-processor.ts @@ -4,13 +4,17 @@ import path from "path"; import * as t from "@babel/types"; import type * as ts from "typescript"; +import type { GenerationPerformanceProfile } from "../../core/performance.js"; import type { SharedGenerationRuntime } from "../../core/runtime.js"; +import type { DiagnosticsCollector } from "../../diagnostics/collector.js"; +import { traverse } from "../../shared/babel-traverse.js"; import { logger } from "../../shared/logger.js"; import { SymbolResolver } from "../../shared/symbol-resolver.js"; import type { ContentType, OpenAPIDefinition, OpenApiExampleMap, + OpenApiSchemaLike, ParamSchema, PropertyOptions, SchemaType, @@ -80,6 +84,8 @@ export class SchemaProcessor { private fileASTCache: Map = new Map(); private processingTypes: Set = new Set(); private inlineTypeCache: Map = new Map(); + private schemaContentCache: Map> = new Map(); + private resolvedSchemaCache: Set = new Set(); private zodSchemaConverter: ZodSchemaConverter | null = null; private zodSchemaProcessor: ZodSchemaProcessor | null = null; @@ -89,11 +95,13 @@ export class SchemaProcessor { private internalSchemaNames: Set = new Set(); private readonly fileAccess: SchemaProcessorFileAccess; private readonly symbolResolver: SymbolResolver; + private readonly diagnostics: DiagnosticsCollector | undefined; // Track imports per file for resolving ReturnType private importMap: Record> = {}; // { filePath: { importName: importPath } } // Inverted index: typeName → first filePath that imports it (O(1) lookup for findFileImportingType) private typeToFileIndex: Map = new Map(); + private indexedReExportFiles: Set = new Set(); private currentFilePath: string = ""; // Track the file being processed constructor( @@ -103,12 +111,15 @@ export class SchemaProcessor { apiDir?: string, fileAccess: SchemaProcessorFileAccess = defaultFileAccess, runtime?: SharedGenerationRuntime, + diagnostics?: DiagnosticsCollector, + performanceProfile?: GenerationPerformanceProfile, ) { this.schemaDirs = normalizeSchemaDirs(schemaDir).map((d) => path.isAbsolute(d) ? d : path.resolve(d), ); this.schemaTypes = normalizeSchemaTypes(schemaType); this.fileAccess = fileAccess; + this.diagnostics = diagnostics; this.sharedRuntime = runtime; if (runtime) { this.directoryCache = runtime.schema.directoryCache; @@ -123,7 +134,15 @@ export class SchemaProcessor { // Initialize Zod converter if Zod is enabled if (this.schemaTypes.includes("zod")) { - this.zodSchemaConverter = new ZodSchemaConverter(schemaDir, apiDir); + this.zodSchemaConverter = new ZodSchemaConverter( + schemaDir, + apiDir, + undefined, + diagnostics, + this.fileASTCache, + runtime?.schema.zod, + performanceProfile, + ); this.zodSchemaProcessor = new ZodSchemaProcessor(this.zodSchemaConverter); // Share the AST cache across TS + Zod converters so each file is parsed once. this.symbolResolver = this.zodSchemaConverter.symbolResolver; @@ -179,6 +198,14 @@ export class SchemaProcessor { return result; } + public preprocessZodSchemas(): void { + this.zodSchemaConverter?.preprocessSchemaDirectories(); + const zodDefinitions = this.zodSchemaProcessor?.getDefinedSchemas(); + if (zodDefinitions) { + Object.assign(this.openapiDefinitions, zodDefinitions); + } + } + public findSchemaDefinition(schemaName: string, contentType: ContentType): OpenAPIDefinition { // Assign type that is actually processed this.contentType = contentType; @@ -194,8 +221,9 @@ export class SchemaProcessor { return this.findSchemaDefinition(overrideId, contentType); } - if (this.openapiDefinitions[schemaName]) { - return this.openapiDefinitions[schemaName]; + const cachedDefinition = this.openapiDefinitions[schemaName]; + if (cachedDefinition && this.isConcreteOpenApiDefinition(cachedDefinition)) { + return cachedDefinition; } // Priority 1: Check custom schemas first (highest priority) @@ -231,6 +259,13 @@ export class SchemaProcessor { return this.openapiDefinitions[schemaName] || {}; } + public hasSchemaCandidate(schemaName: string): boolean { + this.ensureSchemaIndex(); + return Boolean( + this.openapiDefinitions[schemaName] || this.schemaDefinitionIndex[schemaName]?.length, + ); + } + private scanAllSchemaDirs(schemaName: string) { this.ensureSchemaIndex(); @@ -256,10 +291,26 @@ export class SchemaProcessor { for (const dir of this.schemaDirs) { if (!this.fileAccess.existsSync(dir)) { logger.warn(`Schema directory not found: ${dir}`); + this.diagnostics?.add({ + code: "schema-dir-empty", + severity: "warning", + message: `Configured schema directory does not exist: ${dir}`, + filePath: dir, + }); continue; } + const definitionCountBefore = Object.keys(this.schemaDefinitionIndex).length; this.scanSchemaDir(dir); + const definitionCountAfter = Object.keys(this.schemaDefinitionIndex).length; + if (definitionCountAfter === definitionCountBefore) { + this.diagnostics?.add({ + code: "schema-dir-empty", + severity: "warning", + message: `Configured schema directory produced no concrete schema declarations: ${dir}`, + filePath: dir, + }); + } } } @@ -324,6 +375,42 @@ export class SchemaProcessor { this.schemaDefinitionIndex[aliasName].push(filePath); } }); + + this.followSchemaReExports(ast, filePath); + } + + private followSchemaReExports(ast: t.File, filePath: string): void { + const normalizedPath = path.normalize(filePath); + if (this.indexedReExportFiles.has(normalizedPath)) { + return; + } + + this.indexedReExportFiles.add(normalizedPath); + + traverse(ast, { + ExportAllDeclaration: (nodePath) => { + const source = nodePath.node.source?.value; + if (typeof source !== "string") { + return; + } + + const resolvedPath = resolveImportPath(source, filePath, this.fileAccess); + if (resolvedPath) { + this.indexSchemaFile(resolvedPath); + } + }, + ExportNamedDeclaration: (nodePath) => { + if (!nodePath.node.source) { + return; + } + + const source = nodePath.node.source.value; + const resolvedPath = resolveImportPath(source, filePath, this.fileAccess); + if (resolvedPath) { + this.indexSchemaFile(resolvedPath); + } + }, + }); } private getParsedSchemaFile(filePath: string): t.File { @@ -381,6 +468,34 @@ export class SchemaProcessor { collectTypeDefinitions(ast, schemaName, this.typeDefinitions, filePath || this.currentFilePath); } + private isConcreteOpenApiDefinition(definition: OpenAPIDefinition): boolean { + if (definition.$ref) { + return true; + } + + if (definition.properties && Object.keys(definition.properties).length > 0) { + return true; + } + + if (definition.enum || definition.const) { + return true; + } + + if (definition.allOf || definition.oneOf || definition.anyOf) { + return true; + } + + if (definition.items || definition.prefixItems) { + return true; + } + + if (definition.type && definition.type !== "object") { + return true; + } + + return false; + } + private resolveType(typeName: string): OpenAPIDefinition { if (this.processingTypes.has(typeName)) { // Return reference to type to avoid infinite recursion @@ -427,6 +542,18 @@ export class SchemaProcessor { logger.debug( `resolveType: no TypeScript definition found for "${typeName}" in ${this.currentFilePath}; returning empty schema`, ); + this.diagnostics?.add({ + code: "schema-not-found", + severity: "warning", + message: `No TypeScript or Zod schema definition found for "${typeName}"; emitting an empty schema.`, + filePath: this.currentFilePath || undefined, + metadata: { + typeName, + contextFile, + suggestedFix: + "Add the type to schemaDir, export it from an indexed schema file, or reference an explicit @response/@body/@params schema.", + }, + }); return {}; } const typeNode = typeDefEntry.node || typeDefEntry; // Support both old and new format @@ -506,6 +633,7 @@ export class SchemaProcessor { : (typeNode as any).members; if (members) { + let additionalProperties: OpenAPIDefinition | boolean | undefined; (members || []).forEach((member: any) => { if (t.isTSPropertySignature(member) && t.isIdentifier(member.key)) { const propName = member.key.name; @@ -521,8 +649,24 @@ export class SchemaProcessor { if (!member.optional) { required.push(propName); } + return; + } + + if (t.isTSIndexSignature(member)) { + additionalProperties = member.typeAnnotation?.typeAnnotation + ? this.resolveTSNodeType(member.typeAnnotation.typeAnnotation) + : true; } }); + + const result: OpenAPIDefinition = { type: "object", properties }; + if (required.length > 0) { + result.required = required; + } + if (additionalProperties !== undefined) { + result.additionalProperties = additionalProperties; + } + return result; } return required.length > 0 @@ -665,6 +809,16 @@ export class SchemaProcessor { return `^${parts.join("")}$`; } + private addTypeResolutionFallbackDiagnostic(message: string, metadata?: Record) { + this.diagnostics?.add({ + code: "type-resolution-fallback", + severity: "info", + message, + filePath: this.currentFilePath || undefined, + metadata, + }); + } + /** * Follow `$ref` back to its target schema (if known) and return the properties * map, so callers like `keyof` can enumerate the keys. Returns `null` when no @@ -709,10 +863,16 @@ export class SchemaProcessor { private shouldUseTypeScriptChecker(node: t.Node): boolean { return ( t.isTSConditionalType(node) || + t.isTSIndexedAccessType(node) || t.isTSMappedType(node) || t.isTSTemplateLiteralType(node) || t.isTSImportType(node) || - (t.isTSTypeOperator(node) && node.operator === "keyof") + t.isTSInferType(node) || + t.isTSInstantiationExpression(node) || + t.isTSFunctionType(node) || + t.isTSConstructorType(node) || + t.isTSIntersectionType(node) || + (t.isTSTypeOperator(node) && (node.operator === "keyof" || node.operator === "readonly")) ); } @@ -1179,6 +1339,32 @@ export class SchemaProcessor { return this.resolveTSNodeType(node.typeAnnotation); } + if (t.isTSTypeReference(node) && t.isTSQualifiedName(node.typeName)) { + const left = node.typeName.left; + const right = node.typeName.right; + if ( + t.isIdentifier(left, { name: "z" }) && + t.isIdentifier(right, { name: "infer" }) && + node.typeParameters?.params.length + ) { + const firstTypeParameter = node.typeParameters.params[0]; + if ( + t.isTSTypeQuery(firstTypeParameter) && + t.isIdentifier(firstTypeParameter.exprName) && + this.schemaTypes.includes("zod") && + this.zodSchemaConverter + ) { + const schema = this.zodSchemaConverter.convertZodSchemaToOpenApi( + firstTypeParameter.exprName.name, + this.contentType, + ); + if (schema) { + return schema; + } + } + } + } + if (t.isTSTypeReference(node) && t.isIdentifier(node.typeName)) { const typeName = node.typeName.name; @@ -1206,6 +1392,35 @@ export class SchemaProcessor { return { type: "array" }; } + if (typeName === "Map" || typeName === "ReadonlyMap") { + if (node.typeParameters && node.typeParameters.params.length > 1) { + const keyType = this.resolveTSNodeType(node.typeParameters.params[0]); + const valueType = this.resolveTSNodeType(node.typeParameters.params[1]); + const schema: OpenAPIDefinition = { + type: "object", + additionalProperties: valueType, + }; + const isTrivialStringKey = + keyType.type === "string" && !keyType.enum && !keyType.pattern && !keyType.format; + if (!isTrivialStringKey) { + schema.propertyNames = keyType; + } + return schema; + } + return { type: "object", additionalProperties: true }; + } + + if (typeName === "Set" || typeName === "ReadonlySet") { + if (node.typeParameters && node.typeParameters.params.length > 0) { + return { + type: "array", + items: this.resolveTSNodeType(node.typeParameters.params[0]), + uniqueItems: true, + }; + } + return { type: "array", uniqueItems: true }; + } + if (typeName === "Record") { if (node.typeParameters && node.typeParameters.params.length > 1) { const keyType = this.resolveTSNodeType(node.typeParameters.params[0]); @@ -1430,6 +1645,21 @@ export class SchemaProcessor { } if (t.isTSIntersectionType(node)) { + const primitiveMember = node.types + .map((typeNode: any) => this.resolveTSNodeType(typeNode)) + .find((schema) => schema.type && schema.type !== "object"); + const objectMembers = node.types + .map((typeNode: any) => this.resolveTSNodeType(typeNode)) + .filter((schema) => schema.type === "object" && schema.properties); + const hasOnlyBrandObjects = + objectMembers.length > 0 && + objectMembers.every((schema) => + Object.keys(schema.properties ?? {}).every((key) => key === "__brand" || key === "brand"), + ); + if (primitiveMember && hasOnlyBrandObjects) { + return primitiveMember; + } + // For intersection types, we combine properties const allProperties: Record = {}; const requiredProperties: string[] = []; @@ -1468,6 +1698,13 @@ export class SchemaProcessor { } logger.debug("Unrecognized TypeScript type node:", node); + this.addTypeResolutionFallbackDiagnostic( + "Unrecognized TypeScript type node; emitting object schema.", + { + nodeType: node.type, + suggestedFix: "Use an exported named interface/type or add an explicit schema annotation.", + }, + ); return { type: "object" }; // By default we return an object } @@ -1546,8 +1783,11 @@ export class SchemaProcessor { /** * Generate example values based on parameter type and name */ - public getExampleForParam(paramName: string, type: string = "string"): any { - return getExampleForParam(paramName, type); + public getExampleForParam( + paramName: string, + typeOrSchema: string | OpenApiSchemaLike = "string", + ): any { + return getExampleForParam(paramName, typeOrSchema); } public detectContentType(bodyType: string, explicitContentType?: string): string { @@ -1648,7 +1888,20 @@ export class SchemaProcessor { body: OpenAPIDefinition; responses: OpenAPIDefinition; } { - return getSchemaContent( + const cacheKey = JSON.stringify({ + tag, + paramsType, + querystringType, + pathParamsType, + bodyType, + responseType, + }); + const cachedContent = this.schemaContentCache.get(cacheKey); + if (cachedContent) { + return cachedContent; + } + + const content = getSchemaContent( { tag, paramsType, querystringType, pathParamsType, bodyType, responseType }, { openapiDefinitions: this.openapiDefinitions, @@ -1657,6 +1910,8 @@ export class SchemaProcessor { this.findSchemaDefinition(schemaName, contentType as ContentType), }, ); + this.schemaContentCache.set(cacheKey, content); + return content; } public ensureSchemaResolved(typeName: string, contentType: ContentType = "response"): void { @@ -1669,9 +1924,15 @@ export class SchemaProcessor { return; } + const cacheKey = `${contentType}:${baseTypeName}`; + if (this.resolvedSchemaCache.has(cacheKey)) { + return; + } + if (!this.openapiDefinitions[baseTypeName]) { this.findSchemaDefinition(baseTypeName, contentType); } + this.resolvedSchemaCache.add(cacheKey); } public getSchemaReferenceName(typeName: string, contentType: ContentType = "response"): string { diff --git a/packages/openapi-core/src/schema/zod/compat.ts b/packages/openapi-core/src/schema/zod/compat.ts index 6d9a2c20..6c6fe29e 100644 --- a/packages/openapi-core/src/schema/zod/compat.ts +++ b/packages/openapi-core/src/schema/zod/compat.ts @@ -1,4 +1,4 @@ -export const ZOD_IMPORT_PATHS = ["zod", "zod/v3", "zod/v4"] as const; +export const ZOD_IMPORT_PATHS = ["zod", "zod/v3", "zod/v4", "zod/mini", "zod/v4/mini"] as const; export function isZodImportPath(importPath: string): boolean { return ZOD_IMPORT_PATHS.includes(importPath as (typeof ZOD_IMPORT_PATHS)[number]); diff --git a/packages/openapi-core/src/schema/zod/converter-runtime.ts b/packages/openapi-core/src/schema/zod/converter-runtime.ts index 31d538b8..f72e1444 100644 --- a/packages/openapi-core/src/schema/zod/converter-runtime.ts +++ b/packages/openapi-core/src/schema/zod/converter-runtime.ts @@ -51,8 +51,13 @@ export function resolveImportPath( const currentDir = pathOps.dirname(currentFilePath); const resolvedPath = pathOps.resolve(currentDir, importSource); const extensions = [".ts", ".tsx", ".js", ".jsx"]; + const hasSourceExtension = extensions.some((extension) => resolvedPath.endsWith(extension)); - if (!pathOps.extname(resolvedPath)) { + if (hasSourceExtension && fileAccess.existsSync(resolvedPath)) { + return resolvedPath; + } + + if (!hasSourceExtension) { for (const ext of extensions) { const withExt = resolvedPath + ext; if (fileAccess.existsSync(withExt)) { @@ -66,8 +71,6 @@ export function resolveImportPath( return indexPath; } } - } else if (fileAccess.existsSync(resolvedPath)) { - return resolvedPath; } } @@ -222,8 +225,26 @@ export function expandFactoryCall( if (t.isIdentifier(param) && arg) { paramMap.set(param.name, arg); logger.debug(`[Factory] Mapped parameter '${param.name}' to argument`); - } else if (t.isObjectPattern(param)) { - logger.debug(`[Factory] Skipping destructured parameter (not yet supported)`); + } else if (t.isObjectPattern(param) && t.isObjectExpression(arg)) { + for (const property of param.properties) { + if (!t.isObjectProperty(property) || !t.isIdentifier(property.value)) { + continue; + } + + const keyName = getObjectKeyName(property.key); + if (!keyName) { + continue; + } + + const matchingArgProperty = arg.properties.find( + (argProperty): argProperty is t.ObjectProperty => + t.isObjectProperty(argProperty) && getObjectKeyName(argProperty.key) === keyName, + ); + if (matchingArgProperty) { + paramMap.set(property.value.name, matchingArgProperty.value); + logger.debug(`[Factory] Mapped destructured parameter '${property.value.name}'`); + } + } } } @@ -249,3 +270,15 @@ export function expandFactoryCall( return result; } + +function getObjectKeyName(key: t.Node): string | null { + if (t.isIdentifier(key)) { + return key.name; + } + + if (t.isStringLiteral(key)) { + return key.value; + } + + return null; +} diff --git a/packages/openapi-core/src/schema/zod/drizzle-zod-processor.ts b/packages/openapi-core/src/schema/zod/drizzle-zod-processor.ts index e73efe15..647addf9 100644 --- a/packages/openapi-core/src/schema/zod/drizzle-zod-processor.ts +++ b/packages/openapi-core/src/schema/zod/drizzle-zod-processor.ts @@ -3,6 +3,7 @@ import * as t from "@babel/types"; import { logger } from "../../shared/logger.js"; import type { OpenApiSchema } from "../../shared/types.js"; import { resolveTypeScriptModule } from "../../shared/typescript-project.js"; +import { applyNullableWrapper } from "./nullability.js"; type DrizzleZodProcessingContext = { currentAST?: t.File | undefined; @@ -32,6 +33,15 @@ type DrizzleColumnMetadata = { * This processor extracts field definitions and refinements to generate OpenAPI schemas. */ export class DrizzleZodProcessor { + private static readonly tableSchemaCache = new WeakMap< + t.CallExpression, + Map + >(); + private static readonly variableInitializerCache = new WeakMap< + t.File, + Map + >(); + /** * Known drizzle-zod helper function names */ @@ -113,7 +123,11 @@ export class DrizzleZodProcessor { tableArgument: t.CallExpression["arguments"][number] | undefined, context: DrizzleZodProcessingContext, ): OpenApiSchema { - if (functionName !== "createSelectSchema") { + if ( + functionName !== "createSelectSchema" && + functionName !== "createInsertSchema" && + functionName !== "createUpdateSchema" + ) { return { type: "object", properties: {}, @@ -122,7 +136,7 @@ export class DrizzleZodProcessor { } const tableCall = tableArgument ? this.resolveTableCall(tableArgument, context) : null; - const schema = tableCall ? this.extractSelectSchemaFromTable(tableCall) : null; + const schema = tableCall ? this.extractSchemaFromTable(tableCall, functionName) : null; if (schema) { return schema; } @@ -157,8 +171,10 @@ export class DrizzleZodProcessor { } const resolvedPath = - context.resolveImportPath?.(context.currentFilePath, importSource) || - resolveTypeScriptModule(importSource, context.currentFilePath); + context.resolveImportPath?.(context.currentFilePath, importSource) ?? + (importSource.startsWith(".") + ? null + : resolveTypeScriptModule(importSource, context.currentFilePath)); if (!resolvedPath) { return null; } @@ -178,6 +194,12 @@ export class DrizzleZodProcessor { return null; } + const cachedInitializers = this.variableInitializerCache.get(ast); + if (cachedInitializers) { + return cachedInitializers.get(name) ?? null; + } + + const initializers = new Map(); for (const statement of ast.program.body) { const declaration = t.isExportNamedDeclaration(statement) && statement.declaration @@ -189,24 +211,33 @@ export class DrizzleZodProcessor { } for (const declarator of declaration.declarations) { - if ( - t.isIdentifier(declarator.id, { name }) && - declarator.init && - t.isExpression(declarator.init) - ) { - return declarator.init; + if (t.isIdentifier(declarator.id)) { + initializers.set( + declarator.id.name, + declarator.init && t.isExpression(declarator.init) ? declarator.init : null, + ); } } } - return null; + this.variableInitializerCache.set(ast, initializers); + return initializers.get(name) ?? null; } private static isPgTableCall(node: t.CallExpression): boolean { return t.isIdentifier(node.callee, { name: "pgTable" }); } - private static extractSelectSchemaFromTable(node: t.CallExpression): OpenApiSchema | null { + private static extractSchemaFromTable( + node: t.CallExpression, + functionName: string, + ): OpenApiSchema | null { + const cachedByFunction = this.tableSchemaCache.get(node); + const cachedSchema = cachedByFunction?.get(functionName); + if (cachedSchema) { + return structuredClone(cachedSchema); + } + const columnsArgument = node.arguments[1]; if (!t.isObjectExpression(columnsArgument)) { return null; @@ -234,14 +265,35 @@ export class DrizzleZodProcessor { ...column.schema, ...(column.isNotNull ? {} : { nullable: true }), }; - required.push(key); + if (this.isRequiredColumnForSchema(column, functionName)) { + required.push(key); + } }); - return { + const schema = { type: "object", properties, required, }; + const schemaMap = cachedByFunction ?? new Map(); + schemaMap.set(functionName, schema); + this.tableSchemaCache.set(node, schemaMap); + return structuredClone(schema); + } + + private static isRequiredColumnForSchema( + column: DrizzleColumnMetadata, + functionName: string, + ): boolean { + if (functionName === "createUpdateSchema") { + return false; + } + + if (functionName === "createInsertSchema") { + return column.isNotNull && !column.hasDefault && !column.isGenerated; + } + + return true; } private static extractColumnMetadata(node: t.Expression): DrizzleColumnMetadata | null { @@ -629,11 +681,9 @@ export class DrizzleZodProcessor { // Handled by isFieldOptional check, no schema modification needed break; case "nullable": - result.nullable = true; - break; + return applyNullableWrapper(result); case "nullish": - result.nullable = true; - break; + return applyNullableWrapper(result); case "describe": if (args.length > 0 && t.isStringLiteral(args[0])) { diff --git a/packages/openapi-core/src/schema/zod/functional-checks.ts b/packages/openapi-core/src/schema/zod/functional-checks.ts new file mode 100644 index 00000000..d532ca47 --- /dev/null +++ b/packages/openapi-core/src/schema/zod/functional-checks.ts @@ -0,0 +1,74 @@ +/** Maps Zod Mini functional check names to classic chain method names. */ +export const FUNCTIONAL_CHECK_TO_CHAIN_METHOD: Record = { + minLength: "min", + maxLength: "max", + length: "length", + minSize: "minSize", + maxSize: "maxSize", + size: "length", + gte: "min", + minimum: "min", + gt: "min", + lte: "max", + maximum: "max", + lt: "max", + lowercase: "toLowerCase", + uppercase: "toUpperCase", + normalize: "trim", +}; + +/** Format helpers that can appear as zero-arg functional checks inside `.check()`. */ +export const FUNCTIONAL_FORMAT_CHECKS = new Set([ + "email", + "url", + "uri", + "uuid", + "uuidv4", + "uuidv6", + "uuidv7", + "guid", + "cuid", + "cuid2", + "ipv4", + "ipv6", + "datetime", + "date", + "time", + "duration", + "ulid", + "nanoid", + "jwt", + "xid", + "ksuid", + "hostname", + "hex", + "hash", + "base64", + "base64url", + "emoji", + "ip", + "cidr", + "cidrv4", + "cidrv6", + "e164", + "httpUrl", +]); + +/** Mutations inside `.check()` that do not change the wire shape. */ +export const FUNCTIONAL_NOOP_CHECKS = new Set([ + "trim", + "toLowerCase", + "toUpperCase", + "overwrite", + "normalize", +]); + +/** Functional wrapper helpers at the top level (`z.readonly(inner)`, etc.). */ +export const FUNCTIONAL_WRAPPER_HELPERS = new Set([ + "extend", + "readonly", + "default", + "prefault", + "catch", + "describe", +]); diff --git a/packages/openapi-core/src/schema/zod/import-processor.ts b/packages/openapi-core/src/schema/zod/import-processor.ts index 49699308..4159238f 100644 --- a/packages/openapi-core/src/schema/zod/import-processor.ts +++ b/packages/openapi-core/src/schema/zod/import-processor.ts @@ -2,6 +2,7 @@ import type { NodePath } from "@babel/traverse"; import * as t from "@babel/types"; import { traverse } from "../../shared/babel-traverse.js"; +import { isZodImportPath } from "./compat.js"; type ZodImportProcessingResult = { importedModules: Record; @@ -13,12 +14,15 @@ type ZodImportProcessingResult = { * Defaults to `"z"` for files that don't import `z` (e.g. barrel re-exports). */ zodLocalName: string; + /** Import path for the Zod package when present (`zod`, `zod/mini`, etc.). */ + zodImportSource?: string; }; export function processImports(ast: t.File): ZodImportProcessingResult { const importedModules: Record = {}; const drizzleZodImports = new Set(); let zodLocalName = "z"; + let zodImportSource: string | undefined; traverse(ast, { ImportDeclaration: (path: NodePath) => { @@ -32,7 +36,8 @@ export function processImports(ast: t.File): ZodImportProcessingResult { }); } - if (source === "zod") { + if (isZodImportPath(source)) { + zodImportSource = source; path.node.specifiers.forEach((specifier: t.ImportDeclaration["specifiers"][number]) => { if (t.isImportSpecifier(specifier)) { // `{ z }` or `{ z as zod }` — imported === "z" @@ -63,9 +68,13 @@ export function processImports(ast: t.File): ZodImportProcessingResult { }, }); - return { + const result: ZodImportProcessingResult = { importedModules, drizzleZodImports: [...drizzleZodImports], zodLocalName, }; + if (zodImportSource) { + result.zodImportSource = zodImportSource; + } + return result; } diff --git a/packages/openapi-core/src/schema/zod/node-helpers.ts b/packages/openapi-core/src/schema/zod/node-helpers.ts index d295b1f4..0b1d22a5 100644 --- a/packages/openapi-core/src/schema/zod/node-helpers.ts +++ b/packages/openapi-core/src/schema/zod/node-helpers.ts @@ -1,6 +1,7 @@ import * as t from "@babel/types"; import type { OpenApiSchema } from "../../shared/types.js"; +import { applyNullableWrapper } from "./nullability.js"; // Broader detection for binary payloads passed to `z.custom()`: matches common runtime // types people annotate uploaded bytes with. We treat them all as `string` + `format: binary` @@ -64,6 +65,33 @@ export function processZodLiteral( if (t.isNullLiteral(arg)) { return { type: "null", enum: [null] }; } + if (t.isArrayExpression(arg)) { + const enumValues = arg.elements.flatMap((element) => { + if ( + t.isStringLiteral(element) || + t.isNumericLiteral(element) || + t.isBooleanLiteral(element) + ) { + return [element.value]; + } + if (t.isNullLiteral(element)) { + return [null]; + } + return []; + }); + if (enumValues.length > 0) { + const nonNullValues = enumValues.filter((value) => value !== null); + const firstValue = nonNullValues[0]; + const type = firstValue === undefined ? "null" : typeof firstValue; + return { + type: + type === "number" && enumValues.every((value) => Number.isInteger(value)) + ? "integer" + : type, + enum: enumValues, + }; + } + } // Unwrap `as const` / `satisfies` wrappers if (t.isTSAsExpression(arg) || t.isTSSatisfiesExpression(arg)) { return processZodLiteral( @@ -254,6 +282,42 @@ export function processZodIntersection( }; } +function isZodHelperCall(node: t.Node, helperName: string, zodLocalName: string = "z"): boolean { + return ( + t.isCallExpression(node) && + t.isMemberExpression(node.callee) && + t.isIdentifier(node.callee.object) && + isZodLocalBinding(node.callee.object.name, zodLocalName) && + t.isIdentifier(node.callee.property) && + node.callee.property.name === helperName + ); +} + +export function isUndefinedBranchNode(node: t.Node, zodLocalName: string = "z"): boolean { + return ( + isZodHelperCall(node, "undefined", zodLocalName) || isZodHelperCall(node, "void", zodLocalName) + ); +} + +export function isNullBranchNode(node: t.Node, zodLocalName: string = "z"): boolean { + return isZodHelperCall(node, "null", zodLocalName); +} + +export function isOptionalUnionCall(node: t.CallExpression, zodLocalName: string = "z"): boolean { + if (!isZodHelperCall(node, "union", zodLocalName) || node.arguments.length === 0) { + return false; + } + + const arrayExpr = resolveArrayOfSchemas(node.arguments[0]); + if (!arrayExpr) { + return false; + } + + return arrayExpr.elements.some( + (element) => isProcessableZodNode(element) && isUndefinedBranchNode(element, zodLocalName), + ); +} + export function processZodUnion( node: t.CallExpression, processNode: ProcessZodNode, @@ -281,8 +345,28 @@ export function processZodUnion( return { type: "object" }; } + const zodLocalName = context?.zodLocalName ?? "z"; + const valueElements = arrayExpr.elements.filter( + (element) => + isProcessableZodNode(element) && + !isUndefinedBranchNode(element, zodLocalName) && + !isNullBranchNode(element, zodLocalName), + ); + const hasNullBranch = arrayExpr.elements.some( + (element) => isProcessableZodNode(element) && isNullBranchNode(element, zodLocalName), + ); + + if (valueElements.length === 1) { + const baseSchema = processNode(valueElements[0]!); + if (hasNullBranch) { + return applyNullableWrapper(baseSchema); + } + return baseSchema; + } + const unionItems = arrayExpr.elements .filter(isProcessableZodNode) + .filter((element) => !isUndefinedBranchNode(element, zodLocalName)) .map((element) => processNode(element)); if (unionItems.length === 2) { @@ -318,10 +402,31 @@ export function processZodUnion( } return { - oneOf: unionItems, + anyOf: unionItems, }; } +export { applyNullableWrapper }; + +function isZodLocalBinding(name: string, zodLocalName: string = "z"): boolean { + return name === "z" || name === zodLocalName; +} + +function isZodFunctionalWrapper( + node: t.CallExpression, + methodName: "optional" | "nullable" | "nullish", + zodLocalName: string = "z", +): boolean { + if (!t.isMemberExpression(node.callee) || !t.isIdentifier(node.callee.property)) { + return false; + } + if (node.callee.property.name !== methodName) { + return false; + } + const object = node.callee.object; + return t.isIdentifier(object) && isZodLocalBinding(object.name, zodLocalName); +} + export function extractDescriptionFromArguments(node: t.CallExpression): string | null { if ( t.isMemberExpression(node.callee) && @@ -344,11 +449,18 @@ export function escapeRegExp(value: string): string { return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } -export function hasOptionalMethod(node: t.CallExpression): boolean { +export function hasOptionalMethod(node: t.CallExpression, zodLocalName: string = "z"): boolean { if (!t.isCallExpression(node)) { return false; } + if (isZodFunctionalWrapper(node, "optional", zodLocalName)) { + return true; + } + if (isZodFunctionalWrapper(node, "nullish", zodLocalName)) { + return true; + } + if ( t.isMemberExpression(node.callee) && t.isIdentifier(node.callee.property) && @@ -358,13 +470,17 @@ export function hasOptionalMethod(node: t.CallExpression): boolean { } if (t.isMemberExpression(node.callee) && t.isCallExpression(node.callee.object)) { - return hasOptionalMethod(node.callee.object); + return hasOptionalMethod(node.callee.object, zodLocalName); } return false; } -export function isOptionalCall(node: t.CallExpression): boolean { +export function isOptionalCall(node: t.CallExpression, zodLocalName: string = "z"): boolean { + if (isZodFunctionalWrapper(node, "optional", zodLocalName)) { + return true; + } + if ( t.isCallExpression(node) && t.isMemberExpression(node.callee) && @@ -379,7 +495,7 @@ export function isOptionalCall(node: t.CallExpression): boolean { t.isMemberExpression(node.callee) && t.isCallExpression(node.callee.object) ) { - return hasOptionalMethod(node); + return hasOptionalMethod(node, zodLocalName); } return false; @@ -437,6 +553,27 @@ export function processZodPrimitiveNode( case "number": schema = { type: "number" }; break; + case "float32": + schema = { type: "number", format: "float" }; + break; + case "float64": + schema = { type: "number", format: "double" }; + break; + case "int": + schema = { type: "integer" }; + break; + case "int32": + schema = { type: "integer", format: "int32" }; + break; + case "int64": + schema = { type: "integer", format: "int64" }; + break; + case "uint32": + schema = { type: "integer", minimum: 0, maximum: 4294967295 }; + break; + case "uint64": + schema = { type: "integer", format: "int64", minimum: 0 }; + break; case "boolean": case "stringbool": schema = { type: "boolean" }; @@ -455,6 +592,9 @@ export function processZodPrimitiveNode( schema = { type: "string", format: "uri" }; break; case "uuid": + case "uuidv4": + case "uuidv6": + case "uuidv7": case "guid": schema = { type: "string", format: "uuid" }; break; @@ -470,9 +610,27 @@ export function processZodPrimitiveNode( case "nanoid": schema = { type: "string", format: "nanoid" }; break; + case "xid": + schema = { type: "string", format: "xid" }; + break; + case "ksuid": + schema = { type: "string", format: "ksuid" }; + break; case "jwt": schema = { type: "string", format: "jwt" }; break; + case "hostname": + schema = { type: "string", format: "hostname" }; + break; + case "httpUrl": + schema = { type: "string", format: "uri" }; + break; + case "hex": + schema = { type: "string", format: "hex" }; + break; + case "hash": + schema = { type: "string", format: "hash" }; + break; case "base64": schema = { type: "string", format: "byte" }; break; @@ -524,10 +682,14 @@ export function processZodPrimitiveNode( break; case "any": case "unknown": + case "json": // Truly any / unknown — an empty schema accepts anything. Emit {} rather than // `{ type: "object" }` so we don't pin the type for free-form values. schema = {}; break; + case "symbol": + schema = { type: "string" }; + break; case "null": case "undefined": schema = { type: "null" }; @@ -601,6 +763,16 @@ export function processZodPrimitiveNode( } break; } + case "pipe": + case "codec": { + const target = node.arguments[node.arguments.length - 1]; + if (target && isProcessableZodNode(target)) { + schema = context.processNode(target); + } else { + schema = {}; + } + break; + } case "lazy": { // `z.lazy(() => Schema)` — unwrap the body expression so the reference is followed. const arrow = node.arguments[0]; @@ -648,16 +820,19 @@ export function processZodPrimitiveNode( enum: enumValues, }; } else if (node.arguments.length > 0 && t.isObjectExpression(node.arguments[0])) { - const enumValues: string[] = []; + const enumValues: Array = []; node.arguments[0].properties.forEach((prop) => { if (t.isObjectProperty(prop) && t.isStringLiteral(prop.value)) { enumValues.push(prop.value.value); + } else if (t.isObjectProperty(prop) && t.isNumericLiteral(prop.value)) { + enumValues.push(prop.value.value); } }); + const firstValue = enumValues[0]; schema = enumValues.length > 0 ? { - type: "string", + type: typeof firstValue === "number" ? "number" : "string", enum: enumValues, } : { type: "string" }; @@ -677,6 +852,7 @@ export function processZodPrimitiveNode( schema = { type: "string" }; } break; + case "partialRecord": case "record": { // Zod 4: `z.record(keyType, valueType)` — keep propertyNames + additionalProperties. // Zod 3 / single-arg form: `z.record(valueType)`. @@ -735,14 +911,17 @@ export function processZodPrimitiveNode( break; } case "strictObject": + case "looseObject": case "object": schema = node.arguments.length > 0 ? context.processObject(node) : { type: "object" }; if (zodType === "strictObject") { schema.additionalProperties = false; + } else if (zodType === "looseObject") { + schema.additionalProperties = true; } break; case "templateLiteral": - schema = { type: "string" }; + schema = processZodTemplateLiteral(node, context); break; case "custom": if (node.typeParameters && node.typeParameters.params.length > 0) { @@ -777,3 +956,48 @@ export function processZodPrimitiveNode( return schema; } + +function processZodTemplateLiteral( + node: t.CallExpression, + context: PrimitiveHelperContext, +): OpenApiSchema { + const partsArg = node.arguments[0]; + if (!t.isArrayExpression(partsArg)) { + return { type: "string" }; + } + + const parts = partsArg.elements.flatMap((element) => { + if (!element || t.isSpreadElement(element)) { + return []; + } + + if (t.isStringLiteral(element) || t.isNumericLiteral(element)) { + return [escapeRegExp(String(element.value))]; + } + + if (!t.isCallExpression(element)) { + return [".+"]; + } + + const schema = context.processNode(element); + if (Array.isArray(schema.enum) && schema.enum.length > 0) { + return [`(?:${schema.enum.map((value) => escapeRegExp(String(value))).join("|")})`]; + } + + if (schema.type === "integer") { + return ["-?\\d+"]; + } + + if (schema.type === "number") { + return ["-?\\d+(?:\\.\\d+)?"]; + } + + if (schema.type === "boolean") { + return ["(?:true|false)"]; + } + + return [".+"]; + }); + + return parts.length > 0 ? { type: "string", pattern: `^${parts.join("")}$` } : { type: "string" }; +} diff --git a/packages/openapi-core/src/schema/zod/nullability.ts b/packages/openapi-core/src/schema/zod/nullability.ts new file mode 100644 index 00000000..4897e645 --- /dev/null +++ b/packages/openapi-core/src/schema/zod/nullability.ts @@ -0,0 +1,26 @@ +import type { OpenApiSchema } from "../../shared/types.js"; + +/** + * Wrap a schema as nullable. Uses `anyOf` when the base is a `$ref` composition (`allOf`), + * otherwise sets `nullable: true` on inline schemas. + */ +export function applyNullableWrapper(schema: OpenApiSchema): OpenApiSchema { + if (schema.$ref) { + return { + anyOf: [{ $ref: schema.$ref }, { type: "null" }], + }; + } + if (schema.allOf) { + return { anyOf: [...schema.allOf, { type: "null" }] }; + } + return { ...schema, nullable: true }; +} + +/** + * Apply nullable semantics to a named schema reference, preserving the `$ref` branch. + */ +export function applyNullableToRef(ref: string): OpenApiSchema { + return { + anyOf: [{ $ref: ref }, { type: "null" }], + }; +} diff --git a/packages/openapi-core/src/schema/zod/prescan.ts b/packages/openapi-core/src/schema/zod/prescan.ts index fb6f6460..210318d9 100644 --- a/packages/openapi-core/src/schema/zod/prescan.ts +++ b/packages/openapi-core/src/schema/zod/prescan.ts @@ -5,6 +5,7 @@ import type { NodePath } from "@babel/traverse"; import * as t from "@babel/types"; import { traverse } from "../../shared/babel-traverse.js"; +import { processImports } from "./import-processor.js"; type FileAccess = { existsSync: (filePath: string) => boolean; @@ -77,53 +78,23 @@ export function collectImportMetadata(ast: t.File): { importedModules: Record; drizzleZodImports: Set; zodLocalName: string; + zodImportSource?: string; } { - const importedModules: Record = {}; - const drizzleZodImports = new Set(); - let zodLocalName = "z"; - - traverse(ast, { - ImportDeclaration: (path: NodePath) => { - const source = path.node.source.value; - - if (source === "drizzle-zod") { - path.node.specifiers.forEach((specifier) => { - if (t.isImportSpecifier(specifier) || t.isImportDefaultSpecifier(specifier)) { - drizzleZodImports.add(specifier.local.name); - } - }); - } - - if (source === "zod") { - path.node.specifiers.forEach((specifier) => { - if (t.isImportSpecifier(specifier)) { - const imported = specifier.imported; - const importedName = t.isIdentifier(imported) - ? imported.name - : t.isStringLiteral(imported) - ? imported.value - : ""; - if (importedName === "z") { - zodLocalName = specifier.local.name; - } - } else if ( - t.isImportDefaultSpecifier(specifier) || - t.isImportNamespaceSpecifier(specifier) - ) { - zodLocalName = specifier.local.name; - } - }); - } - - path.node.specifiers.forEach((specifier) => { - if (t.isImportSpecifier(specifier) || t.isImportDefaultSpecifier(specifier)) { - importedModules[specifier.local.name] = source; - } - }); - }, - }); - - return { importedModules, drizzleZodImports, zodLocalName }; + const { importedModules, drizzleZodImports, zodLocalName, zodImportSource } = processImports(ast); + const metadata: { + importedModules: Record; + drizzleZodImports: Set; + zodLocalName: string; + zodImportSource?: string; + } = { + importedModules, + drizzleZodImports: new Set(drizzleZodImports), + zodLocalName, + }; + if (zodImportSource) { + metadata.zodImportSource = zodImportSource; + } + return metadata; } export function isZodSchemaNode( diff --git a/packages/openapi-core/src/schema/zod/runtime-exporter.ts b/packages/openapi-core/src/schema/zod/runtime-exporter.ts index 8db5f713..1ba5944f 100644 --- a/packages/openapi-core/src/schema/zod/runtime-exporter.ts +++ b/packages/openapi-core/src/schema/zod/runtime-exporter.ts @@ -6,10 +6,14 @@ import type { ContentType, JsonValue, OpenApiSchema } from "../../shared/types.j type RuntimeExportOptions = { contentType: ContentType; + zodLocalName?: string; }; export class ZodRuntimeExporter { + private zodLocalName = "z"; + public exportSchema(node: t.Node, options: RuntimeExportOptions): OpenApiSchema | null { + this.zodLocalName = options.zodLocalName ?? "z"; const runtimeSchema = this.buildSchema(node); if (!runtimeSchema) { return null; @@ -35,7 +39,7 @@ export class ZodRuntimeExporter { private buildSchema(node: t.Node): z.ZodTypeAny | null { if (t.isCallExpression(node)) { - const helperPath = getZodHelperPath(node); + const helperPath = getZodHelperPath(node, this.zodLocalName); if (helperPath) { return this.buildRootSchema(node, helperPath); } @@ -61,6 +65,34 @@ export class ZodRuntimeExporter { return z.string(); case "number": return z.number(); + case "float32": + return typeof (z as { float32?: () => z.ZodTypeAny }).float32 === "function" + ? (z as { float32: () => z.ZodTypeAny }).float32() + : z.number(); + case "float64": + return typeof (z as { float64?: () => z.ZodTypeAny }).float64 === "function" + ? (z as { float64: () => z.ZodTypeAny }).float64() + : z.number(); + case "int": + return typeof (z as { int?: () => z.ZodTypeAny }).int === "function" + ? (z as { int: () => z.ZodTypeAny }).int() + : z.number().int(); + case "int32": + return typeof (z as { int32?: () => z.ZodTypeAny }).int32 === "function" + ? (z as { int32: () => z.ZodTypeAny }).int32() + : z.number().int(); + case "int64": + return typeof (z as { int64?: () => z.ZodTypeAny }).int64 === "function" + ? (z as { int64: () => z.ZodTypeAny }).int64() + : z.bigint(); + case "uint32": + return typeof (z as { uint32?: () => z.ZodTypeAny }).uint32 === "function" + ? (z as { uint32: () => z.ZodTypeAny }).uint32() + : z.number().int().nonnegative().max(4294967295); + case "uint64": + return typeof (z as { uint64?: () => z.ZodTypeAny }).uint64 === "function" + ? (z as { uint64: () => z.ZodTypeAny }).uint64() + : z.bigint().nonnegative(); case "boolean": return z.boolean(); case "any": @@ -135,6 +167,25 @@ export class ZodRuntimeExporter { return this.buildIntersection(node); case "tuple": return this.buildTuple(node); + case "optional": + case "nullable": + case "nullish": { + const arg = node.arguments[0]; + if (!arg || !isProcessableNode(arg)) { + return null; + } + const innerSchema = this.buildSchema(arg); + if (!innerSchema) { + return null; + } + if (helper === "optional") { + return innerSchema.optional(); + } + if (helper === "nullable") { + return innerSchema.nullable(); + } + return innerSchema.nullish(); + } case "templateLiteral": return this.buildTemplateLiteral(node); default: @@ -561,7 +612,7 @@ export class ZodRuntimeExporter { } } -function getZodHelperPath(node: t.CallExpression): string[] | null { +function getZodHelperPath(node: t.CallExpression, zodLocalName: string = "z"): string[] | null { if (!t.isMemberExpression(node.callee) || !t.isIdentifier(node.callee.property)) { return null; } @@ -577,7 +628,11 @@ function getZodHelperPath(node: t.CallExpression): string[] | null { currentObject = currentObject.object; } - return t.isIdentifier(currentObject, { name: "z" }) ? path : null; + if (!t.isIdentifier(currentObject)) { + return null; + } + + return currentObject.name === "z" || currentObject.name === zodLocalName ? path : null; } function getObjectKey(key: t.ObjectProperty["key"]): string | null { diff --git a/packages/openapi-core/src/schema/zod/zod-converter.ts b/packages/openapi-core/src/schema/zod/zod-converter.ts index 224daea8..f9716971 100644 --- a/packages/openapi-core/src/schema/zod/zod-converter.ts +++ b/packages/openapi-core/src/schema/zod/zod-converter.ts @@ -4,6 +4,9 @@ import path from "path"; import type { NodePath } from "@babel/traverse"; import * as t from "@babel/types"; +import { measurePerformance, type GenerationPerformanceProfile } from "../../core/performance.js"; +import type { SharedZodGenerationRuntime } from "../../core/runtime.js"; +import type { DiagnosticsCollector } from "../../diagnostics/collector.js"; import { traverse } from "../../shared/babel-traverse.js"; import { logger } from "../../shared/logger.js"; import { SymbolResolver } from "../../shared/symbol-resolver.js"; @@ -21,12 +24,19 @@ import { collectZodRouteFiles, processZodSchemaFilesInDirectory, } from "./file-processor.js"; +import { + FUNCTIONAL_CHECK_TO_CHAIN_METHOD, + FUNCTIONAL_FORMAT_CHECKS, + FUNCTIONAL_NOOP_CHECKS, + FUNCTIONAL_WRAPPER_HELPERS, +} from "./functional-checks.js"; import { processImports } from "./import-processor.js"; import { escapeRegExp, extractDescriptionFromArguments, hasOptionalMethod, isOptionalCall, + isOptionalUnionCall, processZodDiscriminatedUnion, processZodIntersection, processZodLiteral, @@ -34,6 +44,7 @@ import { processZodTuple, processZodUnion, } from "./node-helpers.js"; +import { applyNullableWrapper } from "./nullability.js"; import { collectImportMetadata, extractTypeMappingsFromAST, @@ -51,6 +62,191 @@ type ZodConverterFileAccess = Pick< const defaultFileAccess: ZodConverterFileAccess = fs; +const SUPPORTED_ZOD_HELPERS = new Set([ + "any", + "array", + "base64", + "base64url", + "bigint", + "boolean", + "cidr", + "cidrv4", + "cidrv6", + "codec", + "custom", + "catch", + "cuid", + "cuid2", + "date", + "datetime", + "default", + "describe", + "discriminatedUnion", + "e164", + "email", + "emoji", + "enum", + "extend", + "file", + "float32", + "float64", + "function", + "guid", + "hash", + "hex", + "hostname", + "httpUrl", + "ip", + "instanceof", + "int", + "int32", + "int64", + "intersection", + "ipv4", + "ipv6", + "iso.date", + "iso.datetime", + "iso.duration", + "iso.time", + "json", + "jwt", + "ksuid", + "lazy", + "literal", + "looseObject", + "map", + "nan", + "nanoid", + "nativeEnum", + "never", + "null", + "nullable", + "nullish", + "number", + "object", + "optional", + "partialRecord", + "pipe", + "pipeline", + "prefault", + "preprocess", + "promise", + "readonly", + "record", + "set", + "strictObject", + "string", + "stringbool", + "symbol", + "templateLiteral", + "tuple", + "uint32", + "uint64", + "undefined", + "union", + "unknown", + "ulid", + "url", + "uuid", + "uuidv4", + "uuidv6", + "uuidv7", + "void", + "xid", +]); + +const SUPPORTED_ZOD_CHAIN_METHODS = new Set([ + "and", + "base64", + "base64url", + "brand", + "catch", + "catchall", + "check", + "cidr", + "cidrv4", + "cidrv6", + "cuid", + "cuid2", + "date", + "datetime", + "deepPartial", + "default", + "deprecated", + "describe", + "duration", + "e164", + "email", + "emoji", + "endsWith", + "extend", + "finite", + "guid", + "hash", + "hex", + "hostname", + "httpUrl", + "includes", + "int", + "ip", + "ipv4", + "ipv6", + "jwt", + "keyof", + "ksuid", + "length", + "max", + "maxSize", + "merge", + "meta", + "mime", + "min", + "minSize", + "multipleOf", + "nanoid", + "negative", + "nonempty", + "nonnegative", + "nonoptional", + "nonpositive", + "nullable", + "nullish", + "omit", + "optional", + "or", + "overwrite", + "partial", + "passthrough", + "pick", + "pipe", + "positive", + "prefault", + "readonly", + "refine", + "regex", + "required", + "rest", + "safe", + "startsWith", + "step", + "strict", + "strip", + "superRefine", + "time", + "toLowerCase", + "toUpperCase", + "transform", + "trim", + "ulid", + "uri", + "url", + "uuid", + "uuidv4", + "uuidv6", + "uuidv7", + "xid", +]); + /** * Class for converting Zod schemas to OpenAPI specifications */ @@ -76,11 +272,14 @@ export class ZodSchemaConverter { schemaNameToFiles: Map> = new Map(); /** Per-file import alias for the `zod` module (`import { z as zod }` sets this to `"zod"`). */ zodImportAlias: Map = new Map(); + /** Per-file Zod import source (`zod`, `zod/mini`, etc.). */ + zodImportSource: Map = new Map(); /** Schema variable names whose component name was overridden via .meta({ id }). These must * NOT be copied back under the original variable name in the OpenAPI components object. */ metaIdSchemaNames: Set = new Set(); /** Schema variable names marked @internal — excluded from components/schemas output. */ internalSchemaNames: Set = new Set(); + variantSensitiveSchemaNames: Set = new Set(); // Current processing context (set during file processing) currentFilePath?: string; currentAST?: t.File; @@ -88,6 +287,12 @@ export class ZodSchemaConverter { currentContentType: ContentType = "response"; private readonly fileAccess: ZodConverterFileAccess; private readonly runtimeExporter = new ZodRuntimeExporter(); + private readonly diagnostics: DiagnosticsCollector | undefined; + private readonly emittedUnknownDiagnostics = new Set(); + private readonly performanceProfile: GenerationPerformanceProfile | undefined; + private readonly runtimeState: SharedZodGenerationRuntime | undefined; + private hasPreScanned = false; + private currentSchemaUsedRuntimeExport = false; /** Shared symbol resolver — replaces ad-hoc per-call AST traversals. */ readonly symbolResolver: SymbolResolver; @@ -95,11 +300,36 @@ export class ZodSchemaConverter { schemaDir: string | string[], apiDir?: string, fileAccess: ZodConverterFileAccess = defaultFileAccess, + diagnostics?: DiagnosticsCollector, + fileASTCache?: Map, + runtimeState?: SharedZodGenerationRuntime, + performanceProfile?: GenerationPerformanceProfile, ) { const dirs = Array.isArray(schemaDir) ? schemaDir : [schemaDir]; this.schemaDirs = dirs.map((d) => path.resolve(d)); this.apiDir = apiDir ? path.resolve(apiDir) : undefined; this.fileAccess = fileAccess; + this.diagnostics = diagnostics; + this.performanceProfile = performanceProfile; + this.runtimeState = runtimeState; + if (fileASTCache) { + this.fileASTCache = fileASTCache; + } + if (runtimeState) { + this.zodSchemas = runtimeState.convertedSchemas; + this.drizzleZodImports = runtimeState.drizzleZodImports; + this.fileImportsCache = runtimeState.fileImportsCache; + this.preprocessedFiles = runtimeState.preprocessedFiles; + this.processedFileSchemaPairs = runtimeState.processedFileSchemaPairs; + this.schemaVariantRefs = runtimeState.schemaVariantRefs; + this.schemaNameToFiles = runtimeState.schemaNameToFiles; + this.zodImportAlias = runtimeState.zodImportAlias; + this.metaIdSchemaNames = runtimeState.metaIdSchemaNames; + this.internalSchemaNames = runtimeState.internalSchemaNames; + this.variantSensitiveSchemaNames = runtimeState.variantSensitiveSchemaNames; + this.typeToSchemaMapping = runtimeState.typeToSchemaMapping; + this.hasPreScanned = runtimeState.preScanned; + } this.symbolResolver = new SymbolResolver( fileAccess as Pick, this.fileASTCache, @@ -113,11 +343,17 @@ export class ZodSchemaConverter { schemaName: string, contentType: ContentType = this.currentContentType, ): OpenApiSchema | null { + const conversionStartedAt = performance.now(); this.currentContentType = contentType || "response"; - // Run pre-scan only one time - if (Object.keys(this.typeToSchemaMapping).length === 0) { - this.preScanForTypeMappings(); + if (!this.hasPreScanned) { + measurePerformance(this.performanceProfile, "zodPreScanMs", () => { + this.preScanForTypeMappings(); + }); + this.hasPreScanned = true; + if (this.runtimeState) { + this.runtimeState.preScanned = true; + } } logger.debug(`Looking for Zod schema: ${schemaName}`); @@ -144,6 +380,7 @@ export class ZodSchemaConverter { const cachedSchema = this.getStoredSchema(schemaName, this.currentContentType, false); if (cachedSchema) { + this.applyTypeAliasComponent(requestedSchemaName, schemaName, mappedSchemaName); return cachedSchema; } @@ -169,9 +406,21 @@ export class ZodSchemaConverter { } } - // Find all route files and process them first - const routeFiles = this.findRouteFiles(); + // Schema modules are the common case. Prefer them before falling back to + // route files so JSDoc-only references do not trigger route-file parsing. + for (const dir of this.schemaDirs) { + this.scanDirectoryForZodSchema(dir, schemaName); + if (this.getStoredSchema(schemaName)) break; + } + + const schemaDirSchema = this.getStoredSchema(schemaName); + if (schemaDirSchema) { + logger.debug(`Found and processed Zod schema: ${schemaName}`); + return schemaDirSchema; + } + // Fallback for projects that define Zod schemas inline in route files. + const routeFiles = this.findRouteFiles(); for (const routeFile of routeFiles) { this.processFileForZodSchema(routeFile, schemaName); @@ -182,12 +431,6 @@ export class ZodSchemaConverter { } } - // Scan schema directories - for (const dir of this.schemaDirs) { - this.scanDirectoryForZodSchema(dir, schemaName); - if (this.getStoredSchema(schemaName)) break; - } - // Return the schema if found, or null if not const resolvedSchema = this.getStoredSchema(schemaName); if (resolvedSchema) { @@ -198,28 +441,44 @@ export class ZodSchemaConverter { logger.debug(`Could not find Zod schema: ${schemaName}`); return null; } finally { + if (this.performanceProfile) { + this.performanceProfile.zodConvertMs += performance.now() - conversionStartedAt; + } // Remove from processing set this.processingSchemas.delete(schemaName); - if (mappedSchemaName && requestedSchemaName !== schemaName) { - const resolvedReference = this.getSchemaReferenceName(schemaName, this.currentContentType); - // Copy schema under alias name so OpenAPI components use the alias — but only for - // type-alias mappings (z.infer), not for .meta({ id }) overrides which - // intentionally rename the component and must not reintroduce the original name. - if ( - !this.metaIdSchemaNames.has(requestedSchemaName) && - this.zodSchemas[resolvedReference] && - !this.zodSchemas[requestedSchemaName] - ) { - this.zodSchemas[requestedSchemaName] = this.zodSchemas[resolvedReference]; - } - this.schemaVariantRefs.set( - this.getVariantKey(requestedSchemaName, this.currentContentType), - this.zodSchemas[requestedSchemaName] ? requestedSchemaName : resolvedReference, - ); - } + this.applyTypeAliasComponent(requestedSchemaName, schemaName, mappedSchemaName); } } + private applyTypeAliasComponent( + requestedSchemaName: string, + resolvedSchemaName: string, + mappedSchemaName: string | undefined, + ): void { + if (!mappedSchemaName || requestedSchemaName === resolvedSchemaName) { + return; + } + + const resolvedReference = this.getSchemaReferenceName( + resolvedSchemaName, + this.currentContentType, + ); + // Copy schema under alias name so OpenAPI components use the alias — but only for + // type-alias mappings (z.infer), not for .meta({ id }) overrides which + // intentionally rename the component and must not reintroduce the original name. + if ( + !this.metaIdSchemaNames.has(requestedSchemaName) && + this.zodSchemas[resolvedReference] && + !this.zodSchemas[requestedSchemaName] + ) { + this.zodSchemas[requestedSchemaName] = this.zodSchemas[resolvedReference]; + } + this.schemaVariantRefs.set( + this.getVariantKey(requestedSchemaName, this.currentContentType), + this.zodSchemas[requestedSchemaName] ? requestedSchemaName : resolvedReference, + ); + } + public getSchemaReferenceName( schemaName: string, contentType: ContentType = this.currentContentType, @@ -253,7 +512,10 @@ export class ZodSchemaConverter { return this.zodSchemas[explicitReferenceName] ?? null; } - return allowBaseFallback ? (this.zodSchemas[normalizedName] ?? null) : null; + if (allowBaseFallback || !this.variantSensitiveSchemaNames.has(normalizedName)) { + return this.zodSchemas[normalizedName] ?? null; + } + return null; } private storeResolvedSchema( @@ -262,12 +524,20 @@ export class ZodSchemaConverter { contentType: ContentType = this.currentContentType, ): string { const normalizedName = this.typeToSchemaMapping[schemaName] ?? schemaName; + const schemaUsesRuntimeExport = this.currentSchemaUsedRuntimeExport; + this.currentSchemaUsedRuntimeExport = false; + if (schemaUsesRuntimeExport) { + this.variantSensitiveSchemaNames.add(normalizedName); + } const variantKey = this.getVariantKey(normalizedName, contentType); const existingBaseSchema = this.zodSchemas[normalizedName]; if (!existingBaseSchema) { this.zodSchemas[normalizedName] = schema; this.schemaVariantRefs.set(variantKey, normalizedName); + if (!this.variantSensitiveSchemaNames.has(normalizedName)) { + this.registerCommonVariantRefs(normalizedName); + } return normalizedName; } @@ -294,6 +564,13 @@ export class ZodSchemaConverter { return normalizedName; } + private registerCommonVariantRefs(schemaName: string): void { + this.schemaVariantRefs.set(this.getVariantKey(schemaName, "response"), schemaName); + this.schemaVariantRefs.set(this.getVariantKey(schemaName, "body"), schemaName); + this.schemaVariantRefs.set(this.getVariantKey(schemaName, "params"), schemaName); + this.schemaVariantRefs.set(this.getVariantKey(schemaName, "pathParams"), schemaName); + } + /** * Find all route files in the project */ @@ -368,6 +645,29 @@ export class ZodSchemaConverter { }); } + preprocessSchemaDirectories(): void { + if (!this.hasPreScanned) { + measurePerformance(this.performanceProfile, "zodPreScanMs", () => { + this.preScanForTypeMappings(); + }); + this.hasPreScanned = true; + if (this.runtimeState) { + this.runtimeState.preScanned = true; + } + } + + for (const dir of this.schemaDirs) { + if (this.runtimeState?.preprocessedSchemaDirectories.has(dir)) { + continue; + } + + this.getSchemaFiles(dir).forEach((filePath) => { + this.preprocessAllSchemasInFile(filePath); + }); + this.runtimeState?.preprocessedSchemaDirectories.add(dir); + } + } + /** * Process a file to find Zod schema definitions */ @@ -381,8 +681,7 @@ export class ZodSchemaConverter { try { const content = this.fileAccess.readFileSync(filePath, "utf-8"); - // Check if file contains schema we are looking for - if (!content.includes(schemaName)) { + if (!this.fileMayDefineSchema(filePath, content, schemaName)) { return; } @@ -409,6 +708,9 @@ export class ZodSchemaConverter { }); this.fileImportsCache.set(filePath, importedModules); this.zodImportAlias.set(filePath, resolution.zodLocalName); + if (resolution.zodImportSource) { + this.zodImportSource.set(filePath, resolution.zodImportSource); + } } // Set current processing context for use by processZodNode during factory expansion @@ -660,9 +962,7 @@ export class ZodSchemaConverter { if (propSchema) { extensionProperties[key] = propSchema; - const isOptional = - // @ts-ignore - this.isOptional(prop.value) || this.hasOptionalMethod(prop.value); + const isOptional = this.isPropertyOptional(prop.value); if (!isOptional) { extensionRequired.push(key); @@ -959,8 +1259,10 @@ export class ZodSchemaConverter { if (this.shouldUseRuntimeExport(node)) { const runtimeSchema = this.runtimeExporter.exportSchema(node, { contentType: this.currentContentType, + zodLocalName: this.getCurrentZodLocalName(), }); if (runtimeSchema) { + this.currentSchemaUsedRuntimeExport = true; return runtimeSchema; } } @@ -971,7 +1273,8 @@ export class ZodSchemaConverter { t.isMemberExpression(node.callee) && t.isIdentifier(node.callee.object) && t.isIdentifier(node.callee.property) && - node.callee.property.name === "extend" + node.callee.property.name === "extend" && + !this.isZodLocalName(node.callee.object.name) ) { const baseSchemaName = node.callee.object.name; @@ -1049,7 +1352,28 @@ export class ZodSchemaConverter { return this.processZodDiscriminatedUnion(node); } else if (methodName === "literal" && node.arguments.length > 0) { return this.processZodLiteral(node); + } else if (methodName === "optional" && node.arguments.length > 0) { + const firstArgument = node.arguments[0]; + if (!firstArgument || t.isArgumentPlaceholder(firstArgument)) { + return { type: "object" }; + } + return this.processZodNode(firstArgument); + } else if (methodName === "nullable" && node.arguments.length > 0) { + const firstArgument = node.arguments[0]; + if (!firstArgument || t.isArgumentPlaceholder(firstArgument)) { + return { type: "object" }; + } + return applyNullableWrapper(this.processZodNode(firstArgument)); + } else if (methodName === "nullish" && node.arguments.length > 0) { + const firstArgument = node.arguments[0]; + if (!firstArgument || t.isArgumentPlaceholder(firstArgument)) { + return { type: "object" }; + } + return applyNullableWrapper(this.processZodNode(firstArgument)); + } else if (FUNCTIONAL_WRAPPER_HELPERS.has(methodName)) { + return this.processZodFunctionalWrapper(methodName, node); } else { + this.warnIfUnknownZodHelper(methodName); return this.processZodPrimitive(node); } } @@ -1183,6 +1507,45 @@ export class ZodSchemaConverter { return { type: "object" }; } + private warnIfUnknownZodHelper(helperName: string): void { + if (SUPPORTED_ZOD_HELPERS.has(helperName)) { + return; + } + + this.addUnknownZodDiagnostic("unknown-zod-helper", helperName); + } + + private warnIfUnknownZodMethod(methodName: string): void { + if (SUPPORTED_ZOD_CHAIN_METHODS.has(methodName)) { + return; + } + + this.addUnknownZodDiagnostic("unknown-zod-method", methodName); + } + + private addUnknownZodDiagnostic(code: "unknown-zod-helper" | "unknown-zod-method", name: string) { + if (!this.diagnostics) { + return; + } + + const key = `${code}:${this.currentFilePath ?? ""}:${name}`; + if (this.emittedUnknownDiagnostics.has(key)) { + return; + } + this.emittedUnknownDiagnostics.add(key); + + this.diagnostics.add({ + code, + severity: "warning", + message: + code === "unknown-zod-helper" + ? `Unknown Zod helper "${name}" was approximated as a string schema.` + : `Unknown Zod chain method "${name}" was ignored during OpenAPI schema conversion.`, + ...(this.currentFilePath ? { filePath: this.currentFilePath } : {}), + metadata: { name }, + }); + } + /** * Process a Zod lazy schema: z.lazy(() => Schema) */ @@ -1349,16 +1712,37 @@ export class ZodSchemaConverter { if (t.isObjectProperty(prop)) { let propName: string | undefined; - // Handle both identifier and string literal keys - if (t.isIdentifier(prop.key)) { + // Handle identifier, string literal, and statically known computed keys. + if (t.isIdentifier(prop.key) && !prop.computed) { propName = prop.key.name; } else if (t.isStringLiteral(prop.key)) { propName = prop.key.value; + } else if (prop.computed && t.isIdentifier(prop.key)) { + const resolved = this.resolveLiteralValue(prop.key.name); + if (typeof resolved === "string" || typeof resolved === "number") { + propName = String(resolved); + } } else { logger.debug(`Skipping property ${index} - unsupported key type`); + this.diagnostics?.add({ + code: "zod-computed-key-skipped", + severity: "info", + message: + "Skipped a Zod object property because its computed key is not statically resolvable.", + ...(this.currentFilePath ? { filePath: this.currentFilePath } : {}), + metadata: { + propertyIndex: index, + suggestedFix: + "Use a string literal key or a const string identifier for computed Zod object keys.", + }, + }); return; // Skip if key is not identifier or string literal } + if (!propName) { + return; + } + if ( t.isCallExpression(prop.value) && t.isMemberExpression(prop.value.callee) && @@ -1396,7 +1780,7 @@ export class ZodSchemaConverter { const processedSchema = this.processZodNode(prop.value); if (processedSchema) { properties[propName] = processedSchema; - const isOptional = this.isOptional(prop.value) || this.hasOptionalMethod(prop.value); + const isOptional = this.isPropertyOptional(prop.value); if (!isOptional) { required.push(propName); } @@ -1415,7 +1799,10 @@ export class ZodSchemaConverter { properties[propName] = { $ref: `#/components/schemas/${this.getSchemaReferenceName(referencedSchemaName)}`, }; - required.push(propName); // Assuming it's required unless marked optional + const referencedInit = this.resolveObjectSchemaNode(referencedSchemaName); + if (!referencedInit || !this.isPropertyOptional(referencedInit)) { + required.push(propName); + } return; // Skip further processing for this property } @@ -1442,7 +1829,7 @@ export class ZodSchemaConverter { }; properties[propName] = arraySchema; - const isOptional = this.isOptional(prop.value) || this.hasOptionalMethod(prop.value); + const isOptional = this.isPropertyOptional(prop.value); if (!isOptional) { required.push(propName); } @@ -1456,9 +1843,7 @@ export class ZodSchemaConverter { properties[propName] = propSchema; // If the property is not marked as optional, add it to required list - const isOptional = - // @ts-ignore - this.isOptional(prop.value) || this.hasOptionalMethod(prop.value); + const isOptional = this.isPropertyOptional(prop.value); if (!isOptional) { required.push(propName); @@ -1513,6 +1898,17 @@ export class ZodSchemaConverter { * Always returns true for the canonical `"z"` — callers should use this * instead of comparing to `"z"` directly. */ + private isPropertyOptional(node: t.Node): boolean { + if (!t.isCallExpression(node)) { + return false; + } + return ( + this.isOptional(node) || + this.hasOptionalMethod(node) || + isOptionalUnionCall(node, this.getCurrentZodLocalName()) + ); + } + private isZodLocalName(name: string | undefined): boolean { if (!name) return false; if (name === "z") return true; @@ -1629,6 +2025,29 @@ export class ZodSchemaConverter { return undefined; } + private resolveStringArrayArg(arg: t.Node | null | undefined): string[] | undefined { + if (!arg) return undefined; + const node = this.unwrapTypeAssertion(arg); + if (t.isStringLiteral(node)) return [node.value]; + if (t.isArrayExpression(node)) { + const values = node.elements.flatMap((element) => { + const value = this.resolveStringArg(element); + return value === undefined ? [] : [value]; + }); + return values.length > 0 ? values : undefined; + } + if (t.isIdentifier(node)) { + const literal = this.resolveLiteralValue(node.name); + if (typeof literal === "string") return [literal]; + + const values = this.resolveConstArrayValues(node.name); + if (values && values.every((value) => typeof value === "string")) { + return values; + } + } + return undefined; + } + /** * Resolve an identifier referring to a `z.object({...})` (or similar) call expression. * This lets callers inline the referenced object's shape. @@ -1783,19 +2202,20 @@ export class ZodSchemaConverter { return false; } - const helperPath = getZodRuntimeHelperPath(node); + const zodLocalName = this.getCurrentZodLocalName(); + const helperPath = getZodRuntimeHelperPath(node, zodLocalName); if (helperPath) { const helperName = helperPath.join("."); return ( helperName.startsWith("coerce.") || helperName === "templateLiteral" || - helperName === "stringbool" + helperName === "stringbool" || + helperName === "prefault" ); } if (t.isMemberExpression(node.callee) && t.isIdentifier(node.callee.property)) { - const runtimeMethods = new Set(["pipe"]); - if (runtimeMethods.has(node.callee.property.name)) { + if (node.callee.property.name === "pipe") { return true; } @@ -1820,7 +2240,16 @@ export class ZodSchemaConverter { // Process the parent chain first let schema = this.processZodNode(node.callee.object); - // Apply the current method + schema = this.applyZodChainMethod(schema, methodName, node); + this.reconcileNumericBounds(schema); + return schema; + } + + private applyZodChainMethod( + schema: OpenApiSchema, + methodName: string, + node: t.CallExpression, + ): OpenApiSchema { switch (methodName) { case "optional": // optional means T | undefined — not in required array, no nullable flag @@ -1828,21 +2257,11 @@ export class ZodSchemaConverter { break; case "nullable": // nullable means T | null — field stays required but can be null - if (schema.allOf) { - // Transform allOf to anyOf with null branch to preserve null type - schema = { anyOf: [...schema.allOf, { type: "null" }] }; - } else { - schema.nullable = true; - } + schema = applyNullableWrapper(schema); break; case "nullish": // T | null | undefined // Not in required array (handled by hasOptionalMethod) AND can be null - if (schema.allOf) { - // Transform allOf to anyOf with null branch to preserve null type - schema = { anyOf: [...schema.allOf, { type: "null" }] }; - } else { - schema.nullable = true; - } + schema = applyNullableWrapper(schema); break; case "describe": { const descVal = this.resolveStringArg(node.arguments[0]); @@ -1938,6 +2357,9 @@ export class ZodSchemaConverter { schema.format = "uri"; break; case "uuid": + case "uuidv4": + case "uuidv6": + case "uuidv7": case "guid": schema.format = "uuid"; break; @@ -1958,6 +2380,11 @@ export class ZodSchemaConverter { case "ulid": case "nanoid": case "jwt": + case "xid": + case "ksuid": + case "hostname": + case "hex": + case "hash": case "base64": case "base64url": case "emoji": @@ -1968,6 +2395,9 @@ export class ZodSchemaConverter { case "e164": schema.format = methodName; break; + case "httpUrl": + schema.format = "uri"; + break; case "datetime": schema.format = "date-time"; break; @@ -2003,6 +2433,19 @@ export class ZodSchemaConverter { } break; } + case "trim": + case "toLowerCase": + case "toUpperCase": + // String normalization changes runtime values, not the accepted wire shape. + break; + case "multipleOf": + case "step": { + const multipleOf = this.resolveNumericArg(node.arguments[0]); + if (multipleOf !== undefined) { + schema.multipleOf = multipleOf; + } + break; + } case "int": schema.type = "integer"; break; @@ -2026,6 +2469,33 @@ export class ZodSchemaConverter { schema.minimum = -9007199254740991; // -(2^53 - 1) schema.maximum = 9007199254740991; // 2^53 - 1 break; + case "mime": { + const mimeTypes = node.arguments.flatMap((argument) => { + const values = this.resolveStringArrayArg(argument); + return values ?? []; + }); + if (mimeTypes.length === 1) { + schema.contentMediaType = mimeTypes[0]; + } else if (mimeTypes.length > 1) { + delete schema.contentMediaType; + schema["x-contentMediaTypes"] = mimeTypes; + } + break; + } + case "minSize": { + const minSize = this.resolveNumericArg(node.arguments[0]); + if (minSize !== undefined) { + schema.minLength = minSize; + } + break; + } + case "maxSize": { + const maxSize = this.resolveNumericArg(node.arguments[0]); + if (maxSize !== undefined) { + schema.maxLength = maxSize; + } + break; + } case "default": if (node.arguments.length > 0) { const defaultArg = this.unwrapTypeAssertion(node.arguments[0]); @@ -2083,80 +2553,58 @@ export class ZodSchemaConverter { if (node.arguments.length > 0) { const metadata = this.extractStaticJsonValue(node.arguments[0]); if (metadata && typeof metadata === "object" && !Array.isArray(metadata)) { - const { id: _id, ...rest } = metadata as Record; + const { + id: _id, + title, + description, + examples, + deprecated, + ...rest + } = metadata as Record; + if (typeof title === "string") { + schema.title = title; + } + if (typeof description === "string") { + schema.description = description; + } + if (Array.isArray(examples)) { + schema.examples = examples as OpenApiSchema["examples"]; + } + if (deprecated === true) { + schema.deprecated = true; + } Object.assign(schema, rest); - // _id is handled by extractMetaIdFromNode at the call site } } break; case "extend": - if (node.arguments.length > 0 && t.isObjectExpression(node.arguments[0])) { - // Get the base schema by processing the object that extend is called on + if ( + t.isMemberExpression(node.callee) && + t.isExpression(node.callee.object) && + node.arguments.length > 0 && + t.isObjectExpression(node.arguments[0]) + ) { const baseSchemaResult = this.processZodNode(node.callee.object); - - // If it's a reference, resolve it to the actual schema - let baseSchema = baseSchemaResult; - if (baseSchemaResult && baseSchemaResult.$ref) { - const schemaName = baseSchemaResult.$ref.replace("#/components/schemas/", ""); - // Try to convert the base schema if not already processed - if (!this.getStoredSchema(schemaName)) { - logger.debug( - `[extend] Base schema ${schemaName} not found, attempting to convert it`, - ); - this.convertZodSchemaToOpenApi(schemaName); - } - // Now retrieve the converted schema - if (this.getStoredSchema(schemaName)) { - baseSchema = this.getStoredSchema(schemaName)!; - } else { - logger.debug(`Could not resolve reference for extend: ${schemaName}`); - } - } - - // Process the extension object - const extendNode: any = { - type: "CallExpression", - callee: { - type: "MemberExpression", - object: { type: "Identifier", name: "z" }, - property: { type: "Identifier", name: "object" }, - computed: false, - optional: false, - }, - arguments: [node.arguments[0]], - }; - - const extendedProps = this.processZodObject(extendNode); - - // Merge base schema and extensions - if (baseSchema && baseSchema.properties) { - schema = { - type: "object", - properties: { - ...baseSchema.properties, - ...extendedProps?.properties, - }, - required: [...(baseSchema.required || []), ...(extendedProps?.required || [])].filter( - (item, index, arr) => arr.indexOf(item) === index, - ), // Remove duplicates - }; - - // Copy other properties from base schema - if (baseSchema.description) schema.description = baseSchema.description; - } else { - logger.debug("Could not resolve base schema for extend"); - schema = extendedProps || { type: "object" }; - } + schema = this.mergeExtendedObject(baseSchemaResult, node.arguments[0]); } break; case "refine": case "superRefine": - // These are custom validators that cannot be easily represented in OpenAPI - // We preserve the schema as is + break; + case "check": + for (const argument of node.arguments) { + if (t.isCallExpression(argument)) { + schema = this.applyFunctionalCheckArg(schema, argument); + } + } break; case "transform": + case "overwrite": // Transform doesn't change the schema validation, only the output format break; + case "nonoptional": + // Required-ness is tracked on parent object schemas; the value schema is unchanged. + break; case "readonly": // `z.readonly()` → JSON Schema `readOnly: true`. Harmless on primitives too. schema.readOnly = true; @@ -2248,6 +2696,14 @@ export class ZodSchemaConverter { schema.required = Object.keys(schema.properties); } break; + case "keyof": + if (schema.type === "object" && schema.properties) { + schema = { + type: "string", + enum: Object.keys(schema.properties), + }; + } + break; case "merge": { // `.merge(OtherObjectSchema)` — inline the other object's properties. // In Zod 4 this is equivalent to `.extend(other.shape)`. @@ -2283,7 +2739,7 @@ export class ZodSchemaConverter { const alternativeSchema = this.processZodNode(firstArgument); if (alternativeSchema) { schema = { - oneOf: [schema, alternativeSchema], + anyOf: [schema, alternativeSchema], }; } } @@ -2302,11 +2758,172 @@ export class ZodSchemaConverter { } } break; + default: + this.warnIfUnknownZodMethod(methodName); + break; } return schema; } + private applyFunctionalCheckArg(schema: OpenApiSchema, arg: t.CallExpression): OpenApiSchema { + if (!t.isMemberExpression(arg.callee) || !t.isIdentifier(arg.callee.property)) { + return schema; + } + + if (!t.isIdentifier(arg.callee.object) || !this.isZodLocalName(arg.callee.object.name)) { + return schema; + } + + const fnName = arg.callee.property.name; + if (fnName === "refine" || fnName === "check" || fnName === "superRefine") { + return schema; + } + + if (FUNCTIONAL_NOOP_CHECKS.has(fnName)) { + return schema; + } + + const chainMethod = FUNCTIONAL_CHECK_TO_CHAIN_METHOD[fnName] ?? fnName; + if (FUNCTIONAL_FORMAT_CHECKS.has(fnName) || SUPPORTED_ZOD_CHAIN_METHODS.has(chainMethod)) { + return this.applyZodChainMethod(schema, chainMethod, arg); + } + + return schema; + } + + private processZodFunctionalWrapper(methodName: string, node: t.CallExpression): OpenApiSchema { + if (methodName === "extend") { + const baseArg = node.arguments[0]; + const shapeArg = node.arguments[1]; + if ( + !baseArg || + !shapeArg || + t.isArgumentPlaceholder(baseArg) || + t.isArgumentPlaceholder(shapeArg) + ) { + return { type: "object" }; + } + return this.mergeExtendedObject(this.processZodNode(baseArg), shapeArg); + } + + const innerArg = node.arguments[0]; + if (!innerArg || t.isArgumentPlaceholder(innerArg)) { + return { type: "object" }; + } + + let schema = this.processZodNode(innerArg); + + switch (methodName) { + case "readonly": + schema.readOnly = true; + return schema; + case "describe": { + const descVal = this.resolveStringArg(node.arguments[1]); + if (descVal !== undefined) { + if (descVal.startsWith("@deprecated")) { + schema.deprecated = true; + schema.description = descVal.replace("@deprecated", "").trim(); + } else { + schema.description = descVal; + } + } + return schema; + } + case "default": { + const valueArg = node.arguments[1]; + if (!valueArg || t.isArgumentPlaceholder(valueArg)) { + return schema; + } + const syntheticNode = t.callExpression( + t.memberExpression(t.identifier("_"), t.identifier("default")), + [valueArg], + ); + return this.applyZodChainMethod(schema, "default", syntheticNode); + } + case "prefault": + case "catch": { + const valueArg = node.arguments[1]; + if (!valueArg || t.isArgumentPlaceholder(valueArg)) { + return schema; + } + const syntheticNode = t.callExpression( + t.memberExpression(t.identifier("_"), t.identifier(methodName)), + [valueArg], + ); + return this.applyZodChainMethod(schema, methodName, syntheticNode); + } + default: + return schema; + } + } + + private mergeExtendedObject( + baseSchemaResult: OpenApiSchema, + shapeArg: t.Node | t.SpreadElement | t.ArgumentPlaceholder, + ): OpenApiSchema { + if (!t.isObjectExpression(shapeArg)) { + return baseSchemaResult; + } + + let baseSchema = baseSchemaResult; + if (baseSchemaResult.$ref) { + const schemaName = baseSchemaResult.$ref.replace("#/components/schemas/", ""); + if (!this.getStoredSchema(schemaName)) { + logger.debug(`[extend] Base schema ${schemaName} not found, attempting to convert it`); + this.convertZodSchemaToOpenApi(schemaName); + } + if (this.getStoredSchema(schemaName)) { + baseSchema = this.getStoredSchema(schemaName)!; + } else { + logger.debug(`Could not resolve reference for extend: ${schemaName}`); + } + } + + const extendNode = t.callExpression( + t.memberExpression(t.identifier(this.getCurrentZodLocalName()), t.identifier("object")), + [shapeArg], + ); + const extendedProps = this.processZodObject(extendNode); + + if (baseSchema.properties) { + const merged: OpenApiSchema = { + type: "object", + properties: { + ...baseSchema.properties, + ...extendedProps?.properties, + }, + required: [...(baseSchema.required || []), ...(extendedProps?.required || [])].filter( + (item, index, arr) => arr.indexOf(item) === index, + ), + }; + if (baseSchema.description) { + merged.description = baseSchema.description; + } + return merged; + } + + return extendedProps || { type: "object" }; + } + + private reconcileNumericBounds(schema: OpenApiSchema): void { + if (typeof schema.minimum === "number" && typeof schema.exclusiveMinimum === "number") { + if (schema.exclusiveMinimum >= schema.minimum) { + delete schema.minimum; + } else { + delete schema.exclusiveMinimum; + } + } + + if (typeof schema.maximum === "number" && typeof schema.exclusiveMaximum === "number") { + if (schema.exclusiveMaximum <= schema.maximum) { + delete schema.maximum; + } else { + delete schema.exclusiveMaximum; + } + } + } + /** Recursively clear `required` arrays on nested object schemas. */ private applyDeepPartial(schema: OpenApiSchema): void { if (!schema || typeof schema !== "object") return; @@ -2345,14 +2962,18 @@ export class ZodSchemaConverter { * Check if a Zod schema is optional */ isOptional(node: t.CallExpression) { - return isOptionalCall(node); + return isOptionalCall(node, this.getCurrentZodLocalName()); } /** * Check if a node has .optional() in its method chain */ hasOptionalMethod(node: t.CallExpression): boolean { - return hasOptionalMethod(node); + return hasOptionalMethod(node, this.getCurrentZodLocalName()); + } + + private getCurrentZodLocalName(): string { + return this.currentFilePath ? (this.zodImportAlias.get(this.currentFilePath) ?? "z") : "z"; } /** @@ -2382,7 +3003,10 @@ export class ZodSchemaConverter { // Scan schema directories for (const dir of this.schemaDirs) { - this.getSchemaFiles(dir).forEach((filePath) => this.scanFileForTypeMappings(filePath)); + this.getSchemaFiles(dir).forEach((filePath) => { + this.scanFileForTypeMappings(filePath); + this.indexSchemaNamesInFile(filePath); + }); } } @@ -2398,57 +3022,132 @@ export class ZodSchemaConverter { } } - /** - * Pre-process all Zod schemas in a file - */ - preprocessAllSchemasInFile(filePath: string, content?: string): void { - if (this.preprocessedFiles.has(filePath)) { - return; - } - + private indexSchemaNamesInFile(filePath: string): void { try { - const ast = this.getParsedFile(filePath, content); - - const { importedModules, drizzleZodImports, zodLocalName } = collectImportMetadata(ast); + const ast = this.getParsedFile(filePath); + const { importedModules, drizzleZodImports, zodLocalName, zodImportSource } = + collectImportMetadata(ast); drizzleZodImports.forEach((importName) => { this.drizzleZodImports.add(importName); }); - - // Cache imports + alias for this file this.fileImportsCache.set(filePath, importedModules); this.zodImportAlias.set(filePath, zodLocalName); + if (zodImportSource) { + this.zodImportSource.set(filePath, zodImportSource); + } - // Set current processing context for factory function expansion this.currentFilePath = filePath; this.currentAST = ast; this.currentImports = importedModules; - // Mark file as preprocessed BEFORE traversal so recursive lookups (e.g. when - // resolving cross-references like `SafeRedirectPathSchema.optional()` inside - // another schema in the same file) don't re-enter preprocessing on a half-built - // state and emit spurious "conflicts with an existing schema" warnings. - this.preprocessedFiles.add(filePath); - - // Collect all exported Zod schemas traverse(ast, { - ExportNamedDeclaration: (path: NodePath) => { - if (t.isVariableDeclaration(path.node.declaration)) { - path.node.declaration.declarations.forEach((declaration: t.VariableDeclarator) => { + VariableDeclarator: (path: NodePath) => { + if (t.isIdentifier(path.node.id) && path.node.init && this.isZodSchema(path.node.init)) { + this.indexSchemaName(path.node.id.name, filePath); + } + }, + }); + } catch (error) { + logger.error(`Error indexing Zod schemas in file ${filePath}: ${error}`); + } + } + + /** + * Pre-process all Zod schemas in a file + */ + preprocessAllSchemasInFile(filePath: string, content?: string): void { + if (this.preprocessedFiles.has(filePath)) { + return; + } + + measurePerformance(this.performanceProfile, "zodPreprocessMs", () => { + try { + const ast = this.getParsedFile(filePath, content); + + const { importedModules, drizzleZodImports, zodLocalName, zodImportSource } = + collectImportMetadata(ast); + drizzleZodImports.forEach((importName) => { + this.drizzleZodImports.add(importName); + }); + + // Cache imports + alias for this file + this.fileImportsCache.set(filePath, importedModules); + this.zodImportAlias.set(filePath, zodLocalName); + if (zodImportSource) { + this.zodImportSource.set(filePath, zodImportSource); + } + + // Set current processing context for factory function expansion + this.currentFilePath = filePath; + this.currentAST = ast; + this.currentImports = importedModules; + + // Mark file as preprocessed BEFORE traversal so recursive lookups (e.g. when + // resolving cross-references like `SafeRedirectPathSchema.optional()` inside + // another schema in the same file) don't re-enter preprocessing on a half-built + // state and emit spurious "conflicts with an existing schema" warnings. + this.preprocessedFiles.add(filePath); + + // Collect all exported Zod schemas + traverse(ast, { + ExportNamedDeclaration: (path: NodePath) => { + if (t.isVariableDeclaration(path.node.declaration)) { + path.node.declaration.declarations.forEach((declaration: t.VariableDeclarator) => { + if (t.isIdentifier(declaration.id) && declaration.init) { + const schemaName = declaration.id.name; + + // Check if is Zod schema + if (this.isZodSchema(declaration.init)) { + const decl = path.node.declaration; + const allComments = [ + ...(path.node.leadingComments ?? []), + ...(decl?.leadingComments ?? []), + ...(declaration.leadingComments ?? []), + ]; + if (extractInternalFlagFromComments(allComments)) { + this.internalSchemaNames.add(schemaName); + } + if (!this.getStoredSchema(schemaName)) { + logger.debug(`Pre-processing Zod schema: ${schemaName}`); + this.processingSchemas.add(schemaName); + // Restore context in case a recursive preprocessAllSchemasInFile call + // (triggered by processZodNode resolving an import) overwrote these fields. + this.currentFilePath = filePath; + this.currentAST = ast; + this.currentImports = importedModules; + const schema = this.processZodNode(declaration.init); + this.processingSchemas.delete(schemaName); + if (schema) { + const overrideId = this.extractMetaIdFromNode(declaration.init); + this.applyMetaIdOverride(schemaName, schema, overrideId, filePath); + } else { + this.indexSchemaName(schemaName, filePath); + } + } else { + this.indexSchemaName(schemaName, filePath); + } + } + } + }); + } + }, + // Also process non-exported const declarations + VariableDeclaration: (path: NodePath) => { + path.node.declarations.forEach((declaration: t.VariableDeclarator) => { if (t.isIdentifier(declaration.id) && declaration.init) { const schemaName = declaration.id.name; - - // Check if is Zod schema if (this.isZodSchema(declaration.init)) { - const decl = path.node.declaration; const allComments = [ ...(path.node.leadingComments ?? []), - ...(decl?.leadingComments ?? []), ...(declaration.leadingComments ?? []), ]; if (extractInternalFlagFromComments(allComments)) { this.internalSchemaNames.add(schemaName); } - if (!this.getStoredSchema(schemaName)) { + if ( + !this.getStoredSchema(schemaName) && + !this.processingSchemas.has(schemaName) + ) { logger.debug(`Pre-processing Zod schema: ${schemaName}`); this.processingSchemas.add(schemaName); // Restore context in case a recursive preprocessAllSchemasInFile call @@ -2470,48 +3169,12 @@ export class ZodSchemaConverter { } } }); - } - }, - // Also process non-exported const declarations - VariableDeclaration: (path: NodePath) => { - path.node.declarations.forEach((declaration: t.VariableDeclarator) => { - if (t.isIdentifier(declaration.id) && declaration.init) { - const schemaName = declaration.id.name; - if (this.isZodSchema(declaration.init)) { - const allComments = [ - ...(path.node.leadingComments ?? []), - ...(declaration.leadingComments ?? []), - ]; - if (extractInternalFlagFromComments(allComments)) { - this.internalSchemaNames.add(schemaName); - } - if (!this.getStoredSchema(schemaName) && !this.processingSchemas.has(schemaName)) { - logger.debug(`Pre-processing Zod schema: ${schemaName}`); - this.processingSchemas.add(schemaName); - // Restore context in case a recursive preprocessAllSchemasInFile call - // (triggered by processZodNode resolving an import) overwrote these fields. - this.currentFilePath = filePath; - this.currentAST = ast; - this.currentImports = importedModules; - const schema = this.processZodNode(declaration.init); - this.processingSchemas.delete(schemaName); - if (schema) { - const overrideId = this.extractMetaIdFromNode(declaration.init); - this.applyMetaIdOverride(schemaName, schema, overrideId, filePath); - } else { - this.indexSchemaName(schemaName, filePath); - } - } else { - this.indexSchemaName(schemaName, filePath); - } - } - } - }); - }, - }); - } catch (error) { - logger.error(`Error pre-processing file ${filePath}: ${error}`); - } + }, + }); + } catch (error) { + logger.error(`Error pre-processing file ${filePath}: ${error}`); + } + }); } /** @@ -2535,6 +3198,11 @@ export class ZodSchemaConverter { filePath: string, ): void { const finalName = overrideId && overrideId !== schemaName ? overrideId : schemaName; + const schemaUsesRuntimeExport = this.currentSchemaUsedRuntimeExport; + this.currentSchemaUsedRuntimeExport = false; + if (schemaUsesRuntimeExport) { + this.variantSensitiveSchemaNames.add(finalName); + } this.indexSchemaName(schemaName, filePath); if (finalName !== schemaName) { this.indexSchemaName(finalName, filePath); @@ -2553,6 +3221,9 @@ export class ZodSchemaConverter { const variantKey = this.getVariantKey(finalName, this.currentContentType); this.zodSchemas[finalName] = schema; this.schemaVariantRefs.set(variantKey, finalName); + if (!this.variantSensitiveSchemaNames.has(finalName)) { + this.registerCommonVariantRefs(finalName); + } } else { logger.warn( `Schema component name '${overrideId ?? finalName}' conflicts with an existing schema, ignoring .meta({ id }) on '${schemaName}'`, @@ -2584,21 +3255,32 @@ export class ZodSchemaConverter { if (this.schemaNameToFiles.has(candidate)) { return true; } - for (const dir of this.schemaDirs) { - for (const filePath of this.getSchemaFiles(dir)) { - try { - const content = this.fileAccess.readFileSync(filePath, "utf-8"); - if (content.includes(candidate)) { - return true; - } - } catch { - // ignore unreadable files - } - } - } return false; } + private fileMayDefineSchema(filePath: string, content: string, schemaName: string): boolean { + if (!content.includes(schemaName)) { + return false; + } + if (this.isSchemaFilePath(filePath)) { + return true; + } + + const escapedName = escapeRegExp(schemaName); + return new RegExp( + `(?:^|\\n)\\s*(?:export\\s+)?(?:const|let|var|type|interface)\\s+${escapedName}\\b`, + ).test(content); + } + + private isSchemaFilePath(filePath: string): boolean { + return this.schemaDirs.some((dir) => { + const relativePath = path.relative(dir, filePath); + return ( + relativePath === "" || (!relativePath.startsWith("..") && !path.isAbsolute(relativePath)) + ); + }); + } + /** * Check if node is Zod schema */ @@ -2704,7 +3386,10 @@ function areSchemasEquivalent(left: OpenApiSchema, right: OpenApiSchema): boolea return JSON.stringify(left) === JSON.stringify(right); } -function getZodRuntimeHelperPath(node: t.CallExpression): string[] | null { +function getZodRuntimeHelperPath( + node: t.CallExpression, + zodLocalName: string = "z", +): string[] | null { if (!t.isMemberExpression(node.callee) || !t.isIdentifier(node.callee.property)) { return null; } @@ -2720,5 +3405,9 @@ function getZodRuntimeHelperPath(node: t.CallExpression): string[] | null { currentObject = currentObject.object; } - return t.isIdentifier(currentObject, { name: "z" }) ? path : null; + if (!t.isIdentifier(currentObject)) { + return null; + } + + return currentObject.name === "z" || currentObject.name === zodLocalName ? path : null; } diff --git a/packages/openapi-core/src/shared/native-typescript-adapter.ts b/packages/openapi-core/src/shared/native-typescript-adapter.ts index 5ff0f968..8233587e 100644 --- a/packages/openapi-core/src/shared/native-typescript-adapter.ts +++ b/packages/openapi-core/src/shared/native-typescript-adapter.ts @@ -1,4 +1,5 @@ import fs from "fs"; +import { createRequire } from "module"; import os from "os"; import path from "path"; @@ -10,6 +11,8 @@ import type { } from "./typescript-adapter.js"; import type { NativeTypeScriptRuntime } from "./typescript-runtime.js"; +const moduleRequire = createRequire(import.meta.url); + type NativeProject = { configPath: string | null; project: NativeProjectApi; @@ -165,6 +168,7 @@ class NativeTypeScriptAdapter implements TypeScriptCompilerAdapter { disposeNativeProject(cachedProject); } this.projectCache.clear(); + this.api.close(); } public invalidate(filePath: string): void { @@ -187,7 +191,10 @@ class NativeTypeScriptAdapter implements TypeScriptCompilerAdapter { } const project = this.getProject(fromFilePath); - return resolvePathMappedModule(importPath, fromFilePath, project.project.compilerOptions); + return ( + resolvePathMappedModule(importPath, fromFilePath, project.project.compilerOptions) ?? + resolveNodeModule(importPath, fromFilePath) + ); } public resolveValueReference( @@ -1250,6 +1257,17 @@ function resolvePathMappedModule( return null; } +function resolveNodeModule(importPath: string, fromFilePath: string): string | null { + try { + const resolvedPath = moduleRequire.resolve(importPath, { + paths: [path.dirname(path.resolve(fromFilePath))], + }); + return resolvedPath.endsWith(".d.ts") ? null : resolvedPath; + } catch { + return null; + } +} + function resolveFileCandidate(basePath: string): string | null { const candidates = [ basePath, @@ -1299,5 +1317,7 @@ function isIgnoredRuntimeType(typeName: string): boolean { } function isUsableTypeName(typeName: string): boolean { - return typeName !== "__type" && /^[A-Za-z_$][\w$]*$/.test(typeName); + return ( + typeName !== "__type" && !typeName.startsWith("__object") && /^[A-Za-z_$][\w$]*$/.test(typeName) + ); } diff --git a/packages/openapi-core/src/shared/symbol-resolver.ts b/packages/openapi-core/src/shared/symbol-resolver.ts index 252804fe..85f02fd2 100644 --- a/packages/openapi-core/src/shared/symbol-resolver.ts +++ b/packages/openapi-core/src/shared/symbol-resolver.ts @@ -167,8 +167,11 @@ export class SymbolResolver { const currentDir = pathOps.dirname(currentFilePath); const base = pathOps.resolve(currentDir, importSource); const extensions = [".ts", ".tsx", ".js", ".jsx"]; + const hasSourceExtension = extensions.some((extension) => base.endsWith(extension)); - if (!pathOps.extname(base)) { + if (this.fileAccess.existsSync(base)) { + resolved = base; + } else if (!hasSourceExtension) { for (const ext of extensions) { const withExt = base + ext; if (this.fileAccess.existsSync(withExt)) { @@ -185,8 +188,6 @@ export class SymbolResolver { } } } - } else if (this.fileAccess.existsSync(base)) { - resolved = base; } } diff --git a/packages/openapi-core/src/shared/types.ts b/packages/openapi-core/src/shared/types.ts index c2f7a12b..8c92e6c1 100644 --- a/packages/openapi-core/src/shared/types.ts +++ b/packages/openapi-core/src/shared/types.ts @@ -5,6 +5,7 @@ export type SchemaType = "typescript" | "zod"; export type RouterType = "app" | "pages"; export type OpenApiVersion = "3.0" | "3.1" | "3.2" | "4.0"; export type DiagnosticSeverity = "info" | "warning" | "error"; +export type DiagnosticFailOn = "error" | "warning" | "never"; export type JsonPrimitive = string | number | boolean | null; export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue | undefined }; @@ -18,6 +19,7 @@ export type LegacyFrameworkKind = "next" | "tanstack" | "react-router"; export type DiagnosticsConfig = { enabled?: boolean | undefined; + failOn?: DiagnosticFailOn | undefined; }; export type NextFrameworkConfig = { @@ -75,6 +77,9 @@ export type OpenApiConfig = { adapterPath?: string | undefined; }; diagnostics?: DiagnosticsConfig | undefined; + /** Reuse process-local and disk-backed caches when inputs are unchanged. */ + cache?: boolean | undefined; + experimental?: GeneratorExperimentalConfig | undefined; /** Override or extend the default JSDoc @auth → security-scheme-name mapping. * Defaults: { bearer: "BearerAuth", basic: "BasicAuth", apikey: "ApiKeyAuth" }. * User keys win on conflict; lookup is case-insensitive. */ @@ -82,6 +87,11 @@ export type OpenApiConfig = { debug: boolean; }; +export type GeneratorExperimentalConfig = { + /** Prototype flag reserved for benchmark-only route parsing experiments. */ + parallelRoutes?: boolean | undefined; +}; + export type ResolvedOpenApiConfig = Omit< OpenApiConfig, "routerType" | "schemaType" | "framework" | "next" | "diagnostics" | "authPresets" @@ -186,6 +196,8 @@ export type OpenApiTemplate = OpenApiDocument & { adapterPath?: string | undefined; }; diagnostics?: DiagnosticsConfig | undefined; + cache?: boolean | undefined; + experimental?: GeneratorExperimentalConfig | undefined; authPresets?: Record | undefined; debug?: boolean | undefined; }; @@ -399,6 +411,9 @@ export type DataTypes = { requestExamples?: OpenApiExampleMap | undefined; responseExamples?: OpenApiExampleMap | undefined; querystringExamples?: OpenApiExampleMap | undefined; + inferredPathParamsType?: string | undefined; + inferredQueryParamsType?: string | undefined; + inferredBodyType?: string | undefined; inferredResponses?: InferredResponseDefinition[] | undefined; inferredQueryParamNames?: string[] | undefined; summary?: string | undefined; diff --git a/packages/openapi-core/src/shared/typescript-runtime.ts b/packages/openapi-core/src/shared/typescript-runtime.ts index 1e161e4e..065df876 100644 --- a/packages/openapi-core/src/shared/typescript-runtime.ts +++ b/packages/openapi-core/src/shared/typescript-runtime.ts @@ -14,13 +14,20 @@ export type NativeTypeScriptRuntime = { export type TypeScriptVersionSupport = "supported" | "too-old" | "too-new"; export type ResolvedTypeScriptRuntime = { + fallbackReason?: string; native?: NativeTypeScriptRuntime; ts?: TypeScriptRuntime; packagePath: string; + requestedPackagePath?: string; + requestedVersion?: string; version: string; support: TypeScriptVersionSupport; }; +type LoadedTypeScriptRuntime = Omit & { + packagePath?: string; +}; + const MINIMUM_TYPESCRIPT_MAJOR = 5; const MINIMUM_TYPESCRIPT_MINOR = 9; const MAXIMUM_TYPESCRIPT_MAJOR_EXCLUSIVE = 8; @@ -53,7 +60,7 @@ export function resolveTypeScriptRuntime(fromPath: string): ResolvedTypeScriptRu const loadedPackage = loadTypeScriptPackage(packageRoot); const resolvedRuntime = { ...loadedPackage, - packagePath: packageRoot, + packagePath: loadedPackage.packagePath ?? packageRoot, }; runtimeCache.set(packageRoot, resolvedRuntime); return resolvedRuntime; @@ -110,34 +117,83 @@ function resolveFallbackTypeScriptPackageRoot(): string { return fallbackTypeScriptPackageRoot; } -function loadTypeScriptPackage( - packageRoot: string, -): Omit { - const packageJson = JSON.parse( - fs.readFileSync(path.join(packageRoot, "package.json"), "utf8"), - ) as { version?: string }; - const version = packageJson.version ?? "0.0.0"; +function loadTypeScriptPackage(packageRoot: string): LoadedTypeScriptRuntime { + const version = readTypeScriptPackageVersion(packageRoot); const support = getTypeScriptVersionSupport(version); if (support !== "supported") { return { version, support }; } if (parseTypeScriptVersion(version)?.major === 7) { + const nativeRuntime = tryLoadNativeTypeScriptPackage(packageRoot); + if (nativeRuntime.runtime) { + return { + native: nativeRuntime.runtime, + version, + support, + }; + } + + const fallbackRuntime = tryLoadBundledClassicTypeScriptPackage(packageRoot); + if (fallbackRuntime) { + return { + ...fallbackRuntime, + fallbackReason: `TypeScript ${version} at ${packageRoot} does not expose the native compiler API (${formatLoadError(nativeRuntime.error)}); using bundled TypeScript ${fallbackRuntime.version} at ${fallbackRuntime.packagePath}.`, + requestedPackagePath: packageRoot, + requestedVersion: version, + }; + } + return { - native: loadNativeTypeScriptPackage(packageRoot), version, support, + fallbackReason: `TypeScript ${version} at ${packageRoot} does not expose the native compiler API (${formatLoadError(nativeRuntime.error)}) and no bundled TypeScript 6 compatibility package could be loaded.`, }; } + return loadClassicTypeScriptPackage(packageRoot, version); +} + +function readTypeScriptPackageVersion(packageRoot: string): string { + const packageJson = JSON.parse( + fs.readFileSync(path.join(packageRoot, "package.json"), "utf8"), + ) as { version?: string }; + return packageJson.version ?? "0.0.0"; +} + +function loadClassicTypeScriptPackage( + packageRoot: string, + version: string = readTypeScriptPackageVersion(packageRoot), +): LoadedTypeScriptRuntime { const classicTypeScriptPath = require.resolve(path.join(packageRoot, "lib", "typescript.js")); return { + packagePath: packageRoot, ts: require(classicTypeScriptPath) as TypeScriptRuntime, version, - support, + support: getTypeScriptVersionSupport(version), }; } +function tryLoadBundledClassicTypeScriptPackage( + originalPackageRoot: string, +): LoadedTypeScriptRuntime | null { + try { + const fallbackPackageRoot = resolveFallbackTypeScriptPackageRoot(); + if (fallbackPackageRoot === originalPackageRoot) { + return null; + } + + const fallbackVersion = readTypeScriptPackageVersion(fallbackPackageRoot); + if (getTypeScriptVersionSupport(fallbackVersion) !== "supported") { + return null; + } + + return loadClassicTypeScriptPackage(fallbackPackageRoot, fallbackVersion); + } catch { + return null; + } +} + function loadNativeTypeScriptPackage(packageRoot: string): NativeTypeScriptRuntime { const syncPath = require.resolve("typescript/unstable/sync", { paths: [packageRoot] }); const astPath = require.resolve("typescript/unstable/ast", { paths: [packageRoot] }); @@ -147,14 +203,36 @@ function loadNativeTypeScriptPackage(packageRoot: string): NativeTypeScriptRunti }; } +function tryLoadNativeTypeScriptPackage(packageRoot: string): { + error?: unknown; + runtime?: NativeTypeScriptRuntime; +} { + try { + return { runtime: loadNativeTypeScriptPackage(packageRoot) }; + } catch (error) { + return { error }; + } +} + function getTypeScriptUnavailableMessage(runtime: ResolvedTypeScriptRuntime): string { if (runtime.support === "too-old") { return `TypeScript ${runtime.version} is too old for next-openapi-gen. Install TypeScript 5.9 or newer.`; } + if (runtime.fallbackReason) { + return `TypeScript checker features are unavailable. ${runtime.fallbackReason}`; + } + return `TypeScript ${runtime.version} is not supported by next-openapi-gen.`; } +function formatLoadError(error: unknown): string { + if (error instanceof Error) { + return error.message; + } + return String(error); +} + function parseTypeScriptVersion(version: string): { major: number; minor: number } | null { const match = /^(\d+)\.(\d+)/.exec(version); if (!match?.[1] || !match[2]) { diff --git a/packages/openapi-core/src/shared/utils.ts b/packages/openapi-core/src/shared/utils.ts index a337d4e9..6576f00d 100644 --- a/packages/openapi-core/src/shared/utils.ts +++ b/packages/openapi-core/src/shared/utils.ts @@ -1,5 +1,5 @@ -import { parse } from "@babel/parser"; import type { ParserOptions } from "@babel/parser"; +import { parse } from "@babel/parser"; import type { NodePath } from "@babel/traverse"; import type * as t from "@babel/types"; @@ -18,6 +18,16 @@ export function capitalize(string: string) { return string.charAt(0).toUpperCase() + string.slice(1); } +export function resolveAnnotationTypeName(primary?: string, fallback?: string): string | undefined { + const normalizedPrimary = primary?.trim(); + if (normalizedPrimary) { + return normalizedPrimary; + } + + const normalizedFallback = fallback?.trim(); + return normalizedFallback || undefined; +} + /** * Extract path parameters from a route path * e.g. /users/{id}/posts/{postId} -> ['id', 'postId'] diff --git a/packages/openapi-framework-next/src/routes/app-router-strategy.ts b/packages/openapi-framework-next/src/routes/app-router-strategy.ts index a55cf4ce..0d27ec59 100644 --- a/packages/openapi-framework-next/src/routes/app-router-strategy.ts +++ b/packages/openapi-framework-next/src/routes/app-router-strategy.ts @@ -7,28 +7,36 @@ import { measurePerformance, type GenerationPerformanceProfile, } from "@workspace/openapi-core/core/performance.js"; -import { HTTP_METHODS } from "@workspace/openapi-core/routes/router-strategy.js"; +import { collectHandlerInsights } from "@workspace/openapi-core/frameworks/shared/handler-insights.js"; import type { RouterStrategy } from "@workspace/openapi-core/routes/router-strategy.js"; +import { HTTP_METHODS } from "@workspace/openapi-core/routes/router-strategy.js"; import { inferResponsesForExports } from "@workspace/openapi-core/routes/typescript-response-inference.js"; import { traverse } from "@workspace/openapi-core/shared/babel-traverse.js"; -import type { - DataTypes, - InferredResponseDefinition, - OpenApiConfig, - OpenApiSchemaLike, -} from "@workspace/openapi-core/shared/types.js"; +import type { DataTypes, OpenApiConfig } from "@workspace/openapi-core/shared/types.js"; import { extractJSDocComments, parseTypeScriptFile } from "@workspace/openapi-core/shared/utils.js"; +type CachedFileContent = { + content: string; + mtimeMs: number; + size: number; +}; + +const moduleFileASTCache = new Map(); +const moduleFileContentCache = new Map(); + export class AppRouterStrategy implements RouterStrategy { private config: OpenApiConfig; private normalizedApiDir: string; - private readonly fileContentCache = new Map(); + private readonly fileASTCache: Map; + private readonly fileContentCache: Map; constructor( config: OpenApiConfig, private readonly performanceProfile?: GenerationPerformanceProfile, ) { this.config = config; + this.fileASTCache = moduleFileASTCache; + this.fileContentCache = moduleFileContentCache; this.normalizedApiDir = config.apiDir .replaceAll("\\", "/") .replace(/^\.\//, "") @@ -45,7 +53,7 @@ export class AppRouterStrategy implements RouterStrategy { return false; } - return /export\s+(?:async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)\b|export\s+const\s+(GET|POST|PUT|PATCH|DELETE)\b(?:\s*:\s*(?:=>|[^=;])+)?\s*=(?!=|>)/.test( + return /export\s+(?:async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\b|export\s+const\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\b(?:\s*:\s*(?:=>|[^=;])+)?\s*=(?!=|>)/.test( content, ); } @@ -54,10 +62,7 @@ export class AppRouterStrategy implements RouterStrategy { filePath: string, addRoute: (method: string, filePath: string, dataTypes: DataTypes) => void, ): void { - const content = this.readFile(filePath); - const ast = measurePerformance(this.performanceProfile, "parseRouteFilesMs", () => - parseTypeScriptFile(content), - ); + const ast = this.parseFile(filePath); const directRoutes: Array<{ method: string; dataTypes: DataTypes }> = []; const checkerCandidates: Array<{ exportName: string; @@ -201,6 +206,15 @@ export class AppRouterStrategy implements RouterStrategy { // Remove Next.js route groups (folders in parentheses like (authenticated)) relativePath = relativePath.replace(/\/\([^)]+\)/g, ""); + // Strip parallel route segments (@folder) + relativePath = relativePath.replace(/\/@[^/]+/g, ""); + + // Strip intercepting route segments like (.)segment, (..)segment, (...segment) + relativePath = relativePath.replace(/\/\(\.+[^)]*\)/g, ""); + + // Optional catch-all routes [[...slug]] before required catch-all + relativePath = relativePath.replace(/\/\[\[\.\.\.(.*?)\]\]/g, "/{$1}"); + // Handle catch-all routes before dynamic routes relativePath = relativePath.replace(/\/\[\.\.\.(.*?)\]/g, "/{$1}"); @@ -221,16 +235,32 @@ export class AppRouterStrategy implements RouterStrategy { inferredQueryParamNames: string[]; inferredResponseType: string; } { - const handlerInsights = this.collectHandlerInsights(handlerNode); - const { inferredQueryParamNames, inferredResponses, requiresTypeScriptChecker } = - handlerInsights; + const handlerInsights = collectHandlerInsights(handlerNode, { + hasPathParams: Boolean(dataTypes.pathParamsType?.trim()), + }); + const { + inferredBodyType, + inferredPathParamsType, + inferredQueryParamNames, + inferredQueryParamsType, + inferredResponses, + handlerDiagnostics, + requiresTypeScriptChecker, + } = handlerInsights; + const inferredDataTypes: DataTypes = { + ...dataTypes, + ...(inferredBodyType && !dataTypes.bodyType ? { inferredBodyType } : {}), + ...(inferredPathParamsType && !dataTypes.pathParamsType ? { inferredPathParamsType } : {}), + ...(inferredQueryParamsType && !dataTypes.paramsType ? { inferredQueryParamsType } : {}), + ...(inferredQueryParamNames.length > 0 ? { inferredQueryParamNames } : {}), + ...(handlerDiagnostics.length > 0 + ? { diagnostics: [...(dataTypes.diagnostics ?? []), ...handlerDiagnostics] } + : {}), + }; if (dataTypes.responseType || dataTypes.responseItemType || dataTypes.successCode === "204") { return { kind: "direct", - dataTypes: { - ...dataTypes, - ...(inferredQueryParamNames.length > 0 ? { inferredQueryParamNames } : {}), - }, + dataTypes: inferredDataTypes, }; } @@ -239,9 +269,8 @@ export class AppRouterStrategy implements RouterStrategy { return { kind: "direct", dataTypes: { - ...dataTypes, + ...inferredDataTypes, responseType: inferredResponseType, - ...(inferredQueryParamNames.length > 0 ? { inferredQueryParamNames } : {}), }, }; } @@ -250,145 +279,20 @@ export class AppRouterStrategy implements RouterStrategy { return { kind: "direct", dataTypes: { - ...dataTypes, + ...inferredDataTypes, ...(inferredResponses.length > 0 ? { inferredResponses } : {}), - ...(inferredQueryParamNames.length > 0 ? { inferredQueryParamNames } : {}), }, }; } return { kind: "needs-checker", - dataTypes, + dataTypes: inferredDataTypes, inferredQueryParamNames, inferredResponseType, }; } - private collectHandlerInsights(handlerNode: t.Node): { - inferredQueryParamNames: string[]; - inferredResponses: InferredResponseDefinition[]; - requiresTypeScriptChecker: boolean; - } { - const functionLike = this.getFunctionLikeNode(handlerNode); - - if (!functionLike || !functionLike.body) { - return { - inferredQueryParamNames: [], - inferredResponses: [], - requiresTypeScriptChecker: false, - }; - } - - const queryParamNames = new Set(); - const inferredResponses: InferredResponseDefinition[] = []; - let requiresTypeScriptChecker = false; - if (!t.isBlockStatement(functionLike.body)) { - this.visitHandlerNode(functionLike.body, queryParamNames, (expression) => { - const inferredResponse = this.inferResponseFromExpression(expression); - if (inferredResponse) { - inferredResponses.push(inferredResponse); - } - if (this.requiresCheckerForExpression(expression)) { - requiresTypeScriptChecker = true; - } - }); - if (this.requiresCheckerForExpression(functionLike.body)) { - requiresTypeScriptChecker = true; - } - - return { - inferredQueryParamNames: Array.from(queryParamNames), - inferredResponses, - requiresTypeScriptChecker, - }; - } - - this.visitHandlerNode(functionLike.body, queryParamNames, (expression) => { - const inferredResponse = this.inferResponseFromExpression(expression); - if (inferredResponse) { - inferredResponses.push(inferredResponse); - } - if (this.requiresCheckerForExpression(expression)) { - requiresTypeScriptChecker = true; - } - }); - - return { - inferredQueryParamNames: Array.from(queryParamNames), - inferredResponses, - requiresTypeScriptChecker, - }; - } - - private visitHandlerNode( - node: t.Node | null | undefined, - queryParamNames: Set, - onReturnExpression: (expression: t.Expression) => void, - ): void { - if (!node) { - return; - } - - if (t.isCallExpression(node)) { - const name = this.getSearchParamName(node); - if (name) { - queryParamNames.add(name); - } - } - - if (t.isReturnStatement(node) && node.argument) { - onReturnExpression(node.argument); - return; - } - - if (this.isNestedFunctionNode(node)) { - return; - } - - const visitorKeys = t.VISITOR_KEYS[node.type]; - if (!visitorKeys) { - return; - } - - visitorKeys.forEach((key) => { - const value = node[key as keyof typeof node]; - if (Array.isArray(value)) { - value.forEach((child) => { - if (this.isTraversableNode(child)) { - this.visitHandlerNode(child, queryParamNames, onReturnExpression); - } - }); - return; - } - - if (this.isTraversableNode(value)) { - this.visitHandlerNode(value, queryParamNames, onReturnExpression); - } - }); - } - - private getSearchParamName(node: t.CallExpression): string | null { - if (!t.isMemberExpression(node.callee) || !t.isIdentifier(node.callee.property)) { - return null; - } - - const methodName = node.callee.property.name; - if (methodName !== "get" && methodName !== "getAll" && methodName !== "has") { - return null; - } - - if ( - !t.isMemberExpression(node.callee.object) || - !t.isIdentifier(node.callee.object.property, { name: "searchParams" }) - ) { - return null; - } - - const firstArgument = node.arguments[0]; - return t.isStringLiteral(firstArgument) ? firstArgument.value : null; - } - private inferResponseTypeFromHandler(handlerNode: t.Node): string { const functionLike = this.getFunctionLikeNode(handlerNode); if ( @@ -408,162 +312,6 @@ export class AppRouterStrategy implements RouterStrategy { return ""; } - - private requiresCheckerForExpression(expression: t.Expression): boolean { - if (t.isCallExpression(expression) && t.isMemberExpression(expression.callee)) { - const property = expression.callee.property; - if (!t.isIdentifier(property)) { - return false; - } - - const object = expression.callee.object; - if (!t.isIdentifier(object)) { - return false; - } - - const isResponseFactory = object.name === "Response" || object.name === "NextResponse"; - if (!isResponseFactory) { - return false; - } - - if (property.name === "redirect") { - return true; - } - - if (property.name === "json") { - return Boolean(expression.arguments[1]); - } - } - - return t.isNewExpression(expression) && t.isIdentifier(expression.callee, { name: "Response" }); - } - - private inferResponseFromExpression( - expression: t.Expression, - ): InferredResponseDefinition | undefined { - if (!t.isCallExpression(expression) || !t.isMemberExpression(expression.callee)) { - return undefined; - } - - if (!t.isIdentifier(expression.callee.property, { name: "json" })) { - return undefined; - } - - const calleeObject = expression.callee.object; - if (!t.isIdentifier(calleeObject)) { - return undefined; - } - - if (calleeObject.name !== "Response" && calleeObject.name !== "NextResponse") { - return undefined; - } - - const statusCode = this.getLiteralResponseStatusCode(expression.arguments[1]); - const schema = this.inferSchemaFromJsonArgument(expression.arguments[0]); - if (!schema && statusCode === "204") { - return { - statusCode, - source: "typescript", - }; - } - - if (!schema) { - return undefined; - } - - return { - statusCode: statusCode || "200", - schema, - source: "typescript", - }; - } - - private getLiteralResponseStatusCode( - argument: t.CallExpression["arguments"][number] | undefined, - ): string | undefined { - if (!argument || !t.isObjectExpression(argument)) { - return undefined; - } - - for (const property of argument.properties) { - if (!t.isObjectProperty(property) || !this.isPropertyNamed(property, "status")) { - continue; - } - - const value = property.value; - if (t.isNumericLiteral(value)) { - return String(value.value); - } - } - - return undefined; - } - - private inferSchemaFromJsonArgument( - argument: t.CallExpression["arguments"][number] | undefined, - ): OpenApiSchemaLike | undefined { - if (!argument) { - return { type: "object" }; - } - - if (t.isSpreadElement(argument)) { - return undefined; - } - - if (t.isNullLiteral(argument)) { - return { type: "null" }; - } - - if (t.isStringLiteral(argument) || t.isTemplateLiteral(argument)) { - return { type: "string" }; - } - - if (t.isNumericLiteral(argument)) { - return { type: "number" }; - } - - if (t.isBooleanLiteral(argument)) { - return { type: "boolean" }; - } - - if (t.isArrayExpression(argument)) { - const itemSchema = argument.elements - .map((element) => - element && !t.isSpreadElement(element) - ? this.inferSchemaFromJsonArgument(element) - : undefined, - ) - .find((schema): schema is OpenApiSchemaLike => Boolean(schema)); - return { - type: "array", - ...(itemSchema ? { items: itemSchema } : {}), - }; - } - - if (t.isObjectExpression(argument)) { - return { type: "object" }; - } - - if ( - t.isIdentifier(argument) || - t.isCallExpression(argument) || - t.isMemberExpression(argument) || - t.isAwaitExpression(argument) - ) { - return { type: "object" }; - } - - return undefined; - } - - private isPropertyNamed(property: t.ObjectProperty, name: string): boolean { - if (t.isIdentifier(property.key)) { - return property.key.name === name; - } - - return t.isStringLiteral(property.key) && property.key.value === name; - } - private getFunctionLikeNode( handlerNode: t.Node, ): t.FunctionDeclaration | t.FunctionExpression | t.ArrowFunctionExpression | null { @@ -577,26 +325,6 @@ export class AppRouterStrategy implements RouterStrategy { return null; } - - private isNestedFunctionNode(node: t.Node): boolean { - return ( - t.isFunctionDeclaration(node) || - t.isFunctionExpression(node) || - t.isArrowFunctionExpression(node) || - t.isObjectMethod(node) || - t.isClassMethod(node) - ); - } - - private isTraversableNode(value: unknown): value is t.Node { - if (!value || typeof value !== "object" || !("type" in value)) { - return false; - } - - const { type } = value; - return typeof type === "string" && type in t.VISITOR_KEYS; - } - private getReturnTypeAnnotation( returnType: t.Noop | t.TSTypeAnnotation | t.TypeAnnotation | null | undefined, ): t.TSType | null | undefined { @@ -655,15 +383,39 @@ export class AppRouterStrategy implements RouterStrategy { } private readFile(filePath: string): string { + const stat = fs.statSync(filePath); const cachedContent = this.fileContentCache.get(filePath); - if (cachedContent) { - return cachedContent; + if ( + cachedContent && + cachedContent.mtimeMs === stat.mtimeMs && + cachedContent.size === stat.size + ) { + return cachedContent.content; } const content = measurePerformance(this.performanceProfile, "readRouteFilesMs", () => fs.readFileSync(filePath, "utf-8"), ); - this.fileContentCache.set(filePath, content); + this.fileContentCache.set(filePath, { + content, + mtimeMs: stat.mtimeMs, + size: stat.size, + }); + this.fileASTCache.delete(filePath); return content; } + + private parseFile(filePath: string): t.File { + const content = this.readFile(filePath); + const cachedAst = this.fileASTCache.get(filePath); + if (cachedAst) { + return cachedAst; + } + + const ast = measurePerformance(this.performanceProfile, "parseRouteFilesMs", () => + parseTypeScriptFile(content), + ); + this.fileASTCache.set(filePath, ast); + return ast; + } } diff --git a/packages/openapi-framework-next/src/routes/pages-router-strategy.ts b/packages/openapi-framework-next/src/routes/pages-router-strategy.ts index 3be2e092..b2fee6a6 100644 --- a/packages/openapi-framework-next/src/routes/pages-router-strategy.ts +++ b/packages/openapi-framework-next/src/routes/pages-router-strategy.ts @@ -1,28 +1,41 @@ import fs from "fs"; import type { NodePath } from "@babel/traverse"; -import type * as t from "@babel/types"; +import * as t from "@babel/types"; import { measurePerformance, type GenerationPerformanceProfile, } from "@workspace/openapi-core/core/performance.js"; -import { HTTP_METHODS } from "@workspace/openapi-core/routes/router-strategy.js"; +import { applyHandlerInsightsToDataTypes } from "@workspace/openapi-core/frameworks/shared/handler-insights.js"; import type { RouterStrategy } from "@workspace/openapi-core/routes/router-strategy.js"; +import { HTTP_METHODS } from "@workspace/openapi-core/routes/router-strategy.js"; import { traverse } from "@workspace/openapi-core/shared/babel-traverse.js"; import type { DataTypes, OpenApiConfig } from "@workspace/openapi-core/shared/types.js"; import { parseJSDocBlock, parseTypeScriptFile } from "@workspace/openapi-core/shared/utils.js"; +type CachedFileContent = { + content: string; + mtimeMs: number; + size: number; +}; + +const moduleFileASTCache = new Map(); +const moduleFileContentCache = new Map(); + export class PagesRouterStrategy implements RouterStrategy { private config: OpenApiConfig; private normalizedApiDir: string; - private readonly fileContentCache = new Map(); + private readonly fileASTCache: Map; + private readonly fileContentCache: Map; constructor( config: OpenApiConfig, private readonly performanceProfile?: GenerationPerformanceProfile, ) { this.config = config; + this.fileASTCache = moduleFileASTCache; + this.fileContentCache = moduleFileContentCache; this.normalizedApiDir = config.apiDir .replaceAll("\\", "/") .replace(/^\.\//, "") @@ -50,12 +63,10 @@ export class PagesRouterStrategy implements RouterStrategy { filePath: string, addRoute: (method: string, filePath: string, dataTypes: DataTypes) => void, ): void { - const content = this.readFile(filePath); - const ast = measurePerformance(this.performanceProfile, "parseRouteFilesMs", () => - parseTypeScriptFile(content), - ); + const ast = this.parseFile(filePath); const methodComments: { method: string; dataTypes: DataTypes }[] = []; + const hasPathParams = this.hasPathParams(filePath); measurePerformance(this.performanceProfile, "analyzeRouteFilesMs", () => { traverse(ast, { @@ -71,7 +82,11 @@ export class PagesRouterStrategy implements RouterStrategy { if (dataTypes.method && HTTP_METHODS.includes(dataTypes.method)) { methodComments.push({ method: dataTypes.method, - dataTypes, + dataTypes: applyHandlerInsightsToDataTypes( + dataTypes, + nodePath.node.declaration, + { hasPathParams }, + ), }); } } @@ -108,6 +123,18 @@ export class PagesRouterStrategy implements RouterStrategy { relativePath = relativePath.replace(/\/$/, ""); + // Remove Next.js route groups (folders in parentheses like (authenticated)) + relativePath = relativePath.replace(/\/\([^)]+\)/g, ""); + + // Strip parallel route segments (@folder) + relativePath = relativePath.replace(/\/@[^/]+/g, ""); + + // Strip intercepting route segments like (.)segment, (..)segment, (...segment) + relativePath = relativePath.replace(/\/\(\.+[^)]*\)/g, ""); + + // Optional catch-all routes [[...slug]] before required catch-all + relativePath = relativePath.replace(/\/\[\[\.\.\.(.*?)\]\]/g, "/{$1}"); + // Handle catch-all routes before dynamic routes relativePath = relativePath.replace(/\/\[\.\.\.(.*?)\]/g, "/{$1}"); @@ -124,16 +151,48 @@ export class PagesRouterStrategy implements RouterStrategy { return parseJSDocBlock(commentValue, filePath); } + private hasPathParams(filePath: string): boolean { + try { + return /\/\{[^}]+\}/.test(this.getRoutePath(filePath)); + } catch { + return false; + } + } + private readFile(filePath: string): string { + const stat = fs.statSync(filePath); const cachedContent = this.fileContentCache.get(filePath); - if (cachedContent) { - return cachedContent; + if ( + cachedContent && + cachedContent.mtimeMs === stat.mtimeMs && + cachedContent.size === stat.size + ) { + return cachedContent.content; } const content = measurePerformance(this.performanceProfile, "readRouteFilesMs", () => fs.readFileSync(filePath, "utf-8"), ); - this.fileContentCache.set(filePath, content); + this.fileContentCache.set(filePath, { + content, + mtimeMs: stat.mtimeMs, + size: stat.size, + }); + this.fileASTCache.delete(filePath); return content; } + + private parseFile(filePath: string): t.File { + const content = this.readFile(filePath); + const cachedAst = this.fileASTCache.get(filePath); + if (cachedAst) { + return cachedAst; + } + + const ast = measurePerformance(this.performanceProfile, "parseRouteFilesMs", () => + parseTypeScriptFile(content), + ); + this.fileASTCache.set(filePath, ast); + return ast; + } } diff --git a/packages/typescript-config/nextjs.json b/packages/typescript-config/nextjs.json index 15bfd007..52369b85 100644 --- a/packages/typescript-config/nextjs.json +++ b/packages/typescript-config/nextjs.json @@ -9,6 +9,7 @@ "moduleResolution": "Bundler", "allowJs": true, "jsx": "preserve", - "noEmit": true + "noEmit": true, + "types": ["node"] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 804db00b..10b91691 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,6 +48,9 @@ catalogs: '@types/swagger-ui-react': specifier: ^5.18.0 version: 5.18.0 + '@typescript/native': + specifier: npm:typescript@7.0.2 + version: 7.0.2 '@vitest/coverage-v8': specifier: ^4.1.9 version: 4.1.9 @@ -127,8 +130,8 @@ catalogs: specifier: ^2.10.0 version: 2.10.0 typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: npm:@typescript/typescript6@6.0.2 + version: 6.0.2 vitest: specifier: ^4.1.9 version: 4.1.9 @@ -214,6 +217,9 @@ importers: .: devDependencies: + '@babel/parser': + specifier: 'catalog:' + version: 7.29.7 '@babel/traverse': specifier: 'catalog:' version: 7.29.7 @@ -222,7 +228,7 @@ importers: version: 7.29.7 '@commitlint/cli': specifier: 'catalog:' - version: 21.1.0(@types/node@26.0.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@5.9.3) + version: 21.1.0(@types/node@26.0.1)(@typescript/typescript6@6.0.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@commitlint/config-conventional': specifier: 'catalog:' version: 21.1.0 @@ -235,6 +241,12 @@ importers: '@seriousme/openapi-schema-validator': specifier: 'catalog:' version: 2.9.0 + '@types/node': + specifier: 'catalog:' + version: 26.0.1 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(vitest@4.1.9) @@ -294,7 +306,7 @@ importers: version: 2.10.0 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@26.0.1)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(vite@8.1.0(@types/node@26.0.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)) @@ -303,7 +315,7 @@ importers: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -343,13 +355,13 @@ importers: version: 8.5.15 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/next-app-drizzle-zod: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@3.25.76) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@3.25.76) drizzle-orm: specifier: 'catalog:' version: 0.45.2(@opentelemetry/api@1.9.0)(postgres@3.4.9) @@ -407,13 +419,13 @@ importers: version: 4.3.1 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/next-app-mixed-schemas: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -447,13 +459,13 @@ importers: version: link:../../packages/next-openapi-gen typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/next-app-next-config: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -493,13 +505,13 @@ importers: version: 8.5.15 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/next-app-sandbox: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -542,13 +554,13 @@ importers: version: 8.5.15 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/next-app-scalar: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -588,7 +600,10 @@ importers: version: 8.5.15 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' + zod: + specifier: 'catalog:' + version: 4.4.3 apps/next-app-swagger: dependencies: @@ -628,13 +643,16 @@ importers: version: link:../../packages/next-openapi-gen typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' + zod: + specifier: 'catalog:' + version: 4.4.3 apps/next-app-ts-config: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -674,13 +692,13 @@ importers: version: 8.5.15 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/next-app-typescript: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -720,13 +738,13 @@ importers: version: 8.5.15 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/next-app-zod: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -769,13 +787,13 @@ importers: version: 8.5.15 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/next-pages-router: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@3.25.76) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@3.25.76) next: specifier: catalog:nextjs version: 16.2.9(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -809,13 +827,13 @@ importers: version: link:../../packages/next-openapi-gen typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' apps/react-router-app: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) react: specifier: catalog:react-router version: 19.2.7 @@ -846,7 +864,7 @@ importers: version: link:../../packages/next-openapi-gen typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: catalog:react-router version: 8.1.0(@types/node@26.0.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0) @@ -855,7 +873,7 @@ importers: dependencies: '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + version: 0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3) '@tanstack/react-router': specifier: catalog:tanstack version: 1.170.16(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -889,7 +907,7 @@ importers: version: link:../../packages/next-openapi-gen typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: catalog:tanstack version: 8.1.0(@types/node@26.0.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0) @@ -914,7 +932,7 @@ importers: version: 0.23.0 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/next-openapi-gen: dependencies: @@ -940,8 +958,8 @@ importers: specifier: 'catalog:' version: 9.4.1 typescript: - specifier: '>=5.9 <8' - version: 6.0.3 + specifier: npm:@typescript/typescript6@6.0.2 + version: '@typescript/typescript6@6.0.2' devDependencies: '@types/node': specifier: 'catalog:' @@ -966,7 +984,7 @@ importers: version: 5.0.0(conventional-commits-filter@5.0.0) np: specifier: 'catalog:' - version: 11.2.1(@types/node@26.0.1)(typescript@6.0.3) + version: 11.2.1(@types/node@26.0.1)(@typescript/typescript6@6.0.2) oxfmt: specifier: 'catalog:' version: 0.56.0 @@ -975,7 +993,7 @@ importers: version: 1.71.0(oxlint-tsgolint@0.23.0) tsup: specifier: 'catalog:' - version: 8.5.1(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@6.0.3)(yaml@2.9.0) + version: 8.5.1(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(yaml@2.9.0) packages/openapi-cli: dependencies: @@ -1018,7 +1036,7 @@ importers: version: 1.71.0(oxlint-tsgolint@0.23.0) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/openapi-core: dependencies: @@ -1039,7 +1057,7 @@ importers: version: 5.1.0 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' zod: specifier: 'catalog:' version: 4.4.3 @@ -1089,7 +1107,7 @@ importers: version: 1.71.0(oxlint-tsgolint@0.23.0) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/openapi-framework-react-router: dependencies: @@ -1108,7 +1126,7 @@ importers: version: 1.71.0(oxlint-tsgolint@0.23.0) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/openapi-framework-tanstack: dependencies: @@ -1127,7 +1145,7 @@ importers: version: 1.71.0(oxlint-tsgolint@0.23.0) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/openapi-init: dependencies: @@ -1152,7 +1170,7 @@ importers: version: 1.71.0(oxlint-tsgolint@0.23.0) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/oxfmt-config: devDependencies: @@ -1170,7 +1188,7 @@ importers: version: 0.23.0 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/oxlint-config: devDependencies: @@ -1191,7 +1209,7 @@ importers: version: 0.23.0 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/typescript-config: {} @@ -1280,6 +1298,7 @@ packages: '@babel/parser@7.29.7': resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} + hasBin: true '@babel/runtime-corejs3@7.29.7': resolution: {integrity: sha512-ppj9ouYku+RX0ljtgZd+KMO5mkM2bCqg8H2PYAFWnLsHEIKIdRojqbJ2i3eVHrisuxy7nOFCmngTDdWtUCdXUQ==} @@ -3509,6 +3528,130 @@ packages: '@types/web-bluetooth@0.0.21': resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@typescript/typescript6@6.0.2': + resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==} + hasBin: true + '@ungap/structured-clone@1.3.2': resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==} @@ -6807,15 +6950,16 @@ packages: types-ramda@0.30.1: resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==} - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -7215,21 +7359,21 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/vue@3.0.33(vue@3.5.39(typescript@5.9.3))(zod@3.25.76)': + '@ai-sdk/vue@3.0.33(vue@3.5.39(@typescript/typescript6@6.0.2))(zod@3.25.76)': dependencies: '@ai-sdk/provider-utils': 4.0.5(zod@3.25.76) ai: 6.0.33(zod@3.25.76) - swrv: 1.2.0(vue@3.5.39(typescript@5.9.3)) - vue: 3.5.39(typescript@5.9.3) + swrv: 1.2.0(vue@3.5.39(@typescript/typescript6@6.0.2)) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - zod - '@ai-sdk/vue@3.0.33(vue@3.5.39(typescript@5.9.3))(zod@4.4.3)': + '@ai-sdk/vue@3.0.33(vue@3.5.39(@typescript/typescript6@6.0.2))(zod@4.4.3)': dependencies: '@ai-sdk/provider-utils': 4.0.5(zod@4.4.3) ai: 6.0.33(zod@4.4.3) - swrv: 1.2.0(vue@3.5.39(typescript@5.9.3)) - vue: 3.5.39(typescript@5.9.3) + swrv: 1.2.0(vue@3.5.39(@typescript/typescript6@6.0.2)) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - zod @@ -7443,12 +7587,12 @@ snapshots: style-mod: 4.1.3 w3c-keyname: 2.2.8 - '@commitlint/cli@21.1.0(@types/node@26.0.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@5.9.3)': + '@commitlint/cli@21.1.0(@types/node@26.0.1)(@typescript/typescript6@6.0.2)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: '@commitlint/config-conventional': 21.1.0 '@commitlint/format': 21.1.0 '@commitlint/lint': 21.1.0 - '@commitlint/load': 21.1.0(@types/node@26.0.1)(typescript@5.9.3) + '@commitlint/load': 21.1.0(@types/node@26.0.1)(@typescript/typescript6@6.0.2) '@commitlint/read': 21.1.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@commitlint/types': 21.1.0 tinyexec: 1.2.4 @@ -7493,14 +7637,14 @@ snapshots: '@commitlint/rules': 21.1.0 '@commitlint/types': 21.1.0 - '@commitlint/load@21.1.0(@types/node@26.0.1)(typescript@5.9.3)': + '@commitlint/load@21.1.0(@types/node@26.0.1)(@typescript/typescript6@6.0.2)': dependencies: '@commitlint/config-validator': 21.1.0 '@commitlint/execute-rule': 21.0.1 '@commitlint/resolve-extends': 21.1.0 '@commitlint/types': 21.1.0 - cosmiconfig: 9.0.2(typescript@5.9.3) - cosmiconfig-typescript-loader: 6.3.0(@types/node@26.0.1)(cosmiconfig@9.0.2(typescript@5.9.3))(typescript@5.9.3) + cosmiconfig: 9.0.2(@typescript/typescript6@6.0.2) + cosmiconfig-typescript-loader: 6.3.0(@types/node@26.0.1)(@typescript/typescript6@6.0.2)(cosmiconfig@9.0.2(@typescript/typescript6@6.0.2)) es-toolkit: 1.48.1 is-plain-obj: 4.1.0 picocolors: 1.1.1 @@ -7723,20 +7867,20 @@ snapshots: '@floating-ui/utils@0.2.11': {} - '@floating-ui/vue@1.1.11(vue@3.5.39(typescript@5.9.3))': + '@floating-ui/vue@1.1.11(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: '@floating-ui/dom': 1.7.6 '@floating-ui/utils': 0.2.11 - vue-demi: 0.14.10(vue@3.5.39(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.39(@typescript/typescript6@6.0.2)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@floating-ui/vue@1.1.9(vue@3.5.39(typescript@5.9.3))': + '@floating-ui/vue@1.1.9(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: '@floating-ui/dom': 1.7.6 '@floating-ui/utils': 0.2.11 - vue-demi: 0.14.10(vue@3.5.39(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.39(@typescript/typescript6@6.0.2)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -7745,10 +7889,10 @@ snapshots: dependencies: tailwindcss: 4.3.1 - '@headlessui/vue@1.7.23(vue@3.5.39(typescript@5.9.3))': + '@headlessui/vue@1.7.23(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: - '@tanstack/vue-virtual': 3.13.29(vue@3.5.39(typescript@5.9.3)) - vue: 3.5.39(typescript@5.9.3) + '@tanstack/vue-virtual': 3.13.29(vue@3.5.39(@typescript/typescript6@6.0.2)) + vue: 3.5.39(@typescript/typescript6@6.0.2) '@humanfs/core@0.19.2': dependencies: @@ -8550,27 +8694,27 @@ snapshots: transitivePeerDependencies: - zenObservable - '@scalar/agent-chat@0.12.12(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@3.25.76)': + '@scalar/agent-chat@0.12.12(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)(zod@3.25.76)': dependencies: - '@ai-sdk/vue': 3.0.33(vue@3.5.39(typescript@5.9.3))(zod@3.25.76) - '@scalar/api-client': 3.11.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3) - '@scalar/components': 0.27.3(tailwindcss@4.3.1)(typescript@5.9.3) + '@ai-sdk/vue': 3.0.33(vue@3.5.39(@typescript/typescript6@6.0.2))(zod@3.25.76) + '@scalar/api-client': 3.11.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1) + '@scalar/components': 0.27.3(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/helpers': 0.8.2 - '@scalar/icons': 0.7.3(typescript@5.9.3) + '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/json-magic': 0.12.16 '@scalar/openapi-types': 0.9.1 '@scalar/schemas': 0.6.0 '@scalar/themes': 0.16.1 '@scalar/types': 0.15.0 - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) + '@scalar/use-toasts': 0.10.2(@typescript/typescript6@6.0.2) '@scalar/validation': 0.6.0 - '@scalar/workspace-store': 0.54.5(typescript@5.9.3) - '@vueuse/core': 13.9.0(vue@3.5.39(typescript@5.9.3)) + '@scalar/workspace-store': 0.54.5(@typescript/typescript6@6.0.2) + '@vueuse/core': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) ai: 6.0.33(zod@3.25.76) js-base64: 3.7.8 neverpanic: 0.0.8 truncate-json: 3.0.1 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - '@vue/composition-api' - async-validator @@ -8588,27 +8732,27 @@ snapshots: - universal-cookie - zod - '@scalar/agent-chat@0.12.12(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3)': + '@scalar/agent-chat@0.12.12(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)(zod@4.4.3)': dependencies: - '@ai-sdk/vue': 3.0.33(vue@3.5.39(typescript@5.9.3))(zod@4.4.3) - '@scalar/api-client': 3.11.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3) - '@scalar/components': 0.27.3(tailwindcss@4.3.1)(typescript@5.9.3) + '@ai-sdk/vue': 3.0.33(vue@3.5.39(@typescript/typescript6@6.0.2))(zod@4.4.3) + '@scalar/api-client': 3.11.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1) + '@scalar/components': 0.27.3(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/helpers': 0.8.2 - '@scalar/icons': 0.7.3(typescript@5.9.3) + '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/json-magic': 0.12.16 '@scalar/openapi-types': 0.9.1 '@scalar/schemas': 0.6.0 '@scalar/themes': 0.16.1 '@scalar/types': 0.15.0 - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) + '@scalar/use-toasts': 0.10.2(@typescript/typescript6@6.0.2) '@scalar/validation': 0.6.0 - '@scalar/workspace-store': 0.54.5(typescript@5.9.3) - '@vueuse/core': 13.9.0(vue@3.5.39(typescript@5.9.3)) + '@scalar/workspace-store': 0.54.5(@typescript/typescript6@6.0.2) + '@vueuse/core': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) ai: 6.0.33(zod@4.4.3) js-base64: 3.7.8 neverpanic: 0.0.8 truncate-json: 3.0.1 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - '@vue/composition-api' - async-validator @@ -8626,37 +8770,37 @@ snapshots: - universal-cookie - zod - '@scalar/api-client@3.11.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)': + '@scalar/api-client@3.11.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)': dependencies: '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.3.1) - '@headlessui/vue': 1.7.23(vue@3.5.39(typescript@5.9.3)) - '@scalar/components': 0.27.3(tailwindcss@4.3.1)(typescript@5.9.3) + '@headlessui/vue': 1.7.23(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@scalar/components': 0.27.3(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/helpers': 0.8.2 - '@scalar/icons': 0.7.3(typescript@5.9.3) + '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/json-magic': 0.12.16 - '@scalar/oas-utils': 0.19.0(typescript@5.9.3) + '@scalar/oas-utils': 0.19.0(@typescript/typescript6@6.0.2) '@scalar/openapi-types': 0.9.1 - '@scalar/sidebar': 0.9.24(tailwindcss@4.3.1)(typescript@5.9.3) + '@scalar/sidebar': 0.9.24(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/snippetz': 0.9.18 '@scalar/themes': 0.16.1 '@scalar/typebox': 0.1.3 '@scalar/types': 0.15.0 - '@scalar/use-codemirror': 0.14.12(typescript@5.9.3) - '@scalar/use-hooks': 0.4.7(typescript@5.9.3) - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) - '@scalar/workspace-store': 0.54.5(typescript@5.9.3) + '@scalar/use-codemirror': 0.14.12(@typescript/typescript6@6.0.2) + '@scalar/use-hooks': 0.4.7(@typescript/typescript6@6.0.2) + '@scalar/use-toasts': 0.10.2(@typescript/typescript6@6.0.2) + '@scalar/workspace-store': 0.54.5(@typescript/typescript6@6.0.2) '@types/har-format': 1.2.16 - '@vueuse/core': 13.9.0(vue@3.5.39(typescript@5.9.3)) - '@vueuse/integrations': 13.9.0(axios@1.18.1)(focus-trap@7.8.0)(fuse.js@7.4.2)(vue@3.5.39(typescript@5.9.3)) + '@vueuse/core': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@vueuse/integrations': 13.9.0(axios@1.18.1)(focus-trap@7.8.0)(fuse.js@7.4.2)(vue@3.5.39(@typescript/typescript6@6.0.2)) focus-trap: 7.8.0 fuse.js: 7.4.2 js-base64: 3.7.8 jsonc-parser: 3.3.1 nanoid: 5.1.16 pretty-ms: 9.3.0 - radix-vue: 1.9.17(vue@3.5.39(typescript@5.9.3)) + radix-vue: 1.9.17(vue@3.5.39(@typescript/typescript6@6.0.2)) set-cookie-parser: 3.1.0 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) yaml: 2.9.0 zod: 4.4.3 transitivePeerDependencies: @@ -8675,9 +8819,9 @@ snapshots: - typescript - universal-cookie - '@scalar/api-reference-react@0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@3.25.76)': + '@scalar/api-reference-react@0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@3.25.76)': dependencies: - '@scalar/api-reference': 1.61.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@3.25.76) + '@scalar/api-reference': 1.61.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)(zod@3.25.76) '@scalar/types': 0.15.0 react: 19.2.7 transitivePeerDependencies: @@ -8697,9 +8841,9 @@ snapshots: - universal-cookie - zod - '@scalar/api-reference-react@0.9.48(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3)': + '@scalar/api-reference-react@0.9.48(@typescript/typescript6@6.0.2)(axios@1.18.1)(react@19.2.7)(tailwindcss@4.3.1)(zod@4.4.3)': dependencies: - '@scalar/api-reference': 1.61.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) + '@scalar/api-reference': 1.61.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)(zod@4.4.3) '@scalar/types': 0.15.0 react: 19.2.7 transitivePeerDependencies: @@ -8719,31 +8863,31 @@ snapshots: - universal-cookie - zod - '@scalar/api-reference@1.61.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@3.25.76)': + '@scalar/api-reference@1.61.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)(zod@3.25.76)': dependencies: - '@headlessui/vue': 1.7.23(vue@3.5.39(typescript@5.9.3)) - '@scalar/agent-chat': 0.12.12(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@3.25.76) - '@scalar/api-client': 3.11.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3) + '@headlessui/vue': 1.7.23(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@scalar/agent-chat': 0.12.12(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)(zod@3.25.76) + '@scalar/api-client': 3.11.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1) '@scalar/code-highlight': 0.3.6 - '@scalar/components': 0.27.3(tailwindcss@4.3.1)(typescript@5.9.3) + '@scalar/components': 0.27.3(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/helpers': 0.8.2 - '@scalar/icons': 0.7.3(typescript@5.9.3) - '@scalar/oas-utils': 0.19.0(typescript@5.9.3) + '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) + '@scalar/oas-utils': 0.19.0(@typescript/typescript6@6.0.2) '@scalar/schemas': 0.6.0 - '@scalar/sidebar': 0.9.24(tailwindcss@4.3.1)(typescript@5.9.3) + '@scalar/sidebar': 0.9.24(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/snippetz': 0.9.18 '@scalar/themes': 0.16.1 '@scalar/types': 0.15.0 - '@scalar/use-hooks': 0.4.7(typescript@5.9.3) - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) + '@scalar/use-hooks': 0.4.7(@typescript/typescript6@6.0.2) + '@scalar/use-toasts': 0.10.2(@typescript/typescript6@6.0.2) '@scalar/validation': 0.6.0 - '@scalar/workspace-store': 0.54.5(typescript@5.9.3) - '@unhead/vue': 2.1.15(vue@3.5.39(typescript@5.9.3)) - '@vueuse/core': 13.9.0(vue@3.5.39(typescript@5.9.3)) + '@scalar/workspace-store': 0.54.5(@typescript/typescript6@6.0.2) + '@unhead/vue': 2.1.15(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@vueuse/core': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) fuse.js: 7.4.2 microdiff: 1.5.0 nanoid: 5.1.16 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) yaml: 2.9.0 transitivePeerDependencies: - '@vue/composition-api' @@ -8762,31 +8906,31 @@ snapshots: - universal-cookie - zod - '@scalar/api-reference@1.61.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3)': + '@scalar/api-reference@1.61.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)(zod@4.4.3)': dependencies: - '@headlessui/vue': 1.7.23(vue@3.5.39(typescript@5.9.3)) - '@scalar/agent-chat': 0.12.12(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3)(zod@4.4.3) - '@scalar/api-client': 3.11.0(axios@1.18.1)(tailwindcss@4.3.1)(typescript@5.9.3) + '@headlessui/vue': 1.7.23(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@scalar/agent-chat': 0.12.12(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1)(zod@4.4.3) + '@scalar/api-client': 3.11.0(@typescript/typescript6@6.0.2)(axios@1.18.1)(tailwindcss@4.3.1) '@scalar/code-highlight': 0.3.6 - '@scalar/components': 0.27.3(tailwindcss@4.3.1)(typescript@5.9.3) + '@scalar/components': 0.27.3(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/helpers': 0.8.2 - '@scalar/icons': 0.7.3(typescript@5.9.3) - '@scalar/oas-utils': 0.19.0(typescript@5.9.3) + '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) + '@scalar/oas-utils': 0.19.0(@typescript/typescript6@6.0.2) '@scalar/schemas': 0.6.0 - '@scalar/sidebar': 0.9.24(tailwindcss@4.3.1)(typescript@5.9.3) + '@scalar/sidebar': 0.9.24(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/snippetz': 0.9.18 '@scalar/themes': 0.16.1 '@scalar/types': 0.15.0 - '@scalar/use-hooks': 0.4.7(typescript@5.9.3) - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) + '@scalar/use-hooks': 0.4.7(@typescript/typescript6@6.0.2) + '@scalar/use-toasts': 0.10.2(@typescript/typescript6@6.0.2) '@scalar/validation': 0.6.0 - '@scalar/workspace-store': 0.54.5(typescript@5.9.3) - '@unhead/vue': 2.1.15(vue@3.5.39(typescript@5.9.3)) - '@vueuse/core': 13.9.0(vue@3.5.39(typescript@5.9.3)) + '@scalar/workspace-store': 0.54.5(@typescript/typescript6@6.0.2) + '@unhead/vue': 2.1.15(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@vueuse/core': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) fuse.js: 7.4.2 microdiff: 1.5.0 nanoid: 5.1.16 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) yaml: 2.9.0 transitivePeerDependencies: - '@vue/composition-api' @@ -8825,21 +8969,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@scalar/components@0.27.3(tailwindcss@4.3.1)(typescript@5.9.3)': + '@scalar/components@0.27.3(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1)': dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/vue': 1.1.9(vue@3.5.39(typescript@5.9.3)) + '@floating-ui/vue': 1.1.9(vue@3.5.39(@typescript/typescript6@6.0.2)) '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.3.1) - '@headlessui/vue': 1.7.23(vue@3.5.39(typescript@5.9.3)) + '@headlessui/vue': 1.7.23(vue@3.5.39(@typescript/typescript6@6.0.2)) '@scalar/code-highlight': 0.3.6 '@scalar/helpers': 0.8.2 - '@scalar/icons': 0.7.3(typescript@5.9.3) + '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/themes': 0.16.1 - '@scalar/use-hooks': 0.4.7(typescript@5.9.3) - '@vueuse/core': 13.9.0(vue@3.5.39(typescript@5.9.3)) - cva: 1.0.0-beta.4(typescript@5.9.3) - radix-vue: 1.9.17(vue@3.5.39(typescript@5.9.3)) - vue: 3.5.39(typescript@5.9.3) + '@scalar/use-hooks': 0.4.7(@typescript/typescript6@6.0.2) + '@vueuse/core': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) + cva: 1.0.0-beta.4(@typescript/typescript6@6.0.2) + radix-vue: 1.9.17(vue@3.5.39(@typescript/typescript6@6.0.2)) + vue: 3.5.39(@typescript/typescript6@6.0.2) vue-component-type-helpers: 3.3.5 transitivePeerDependencies: - '@vue/composition-api' @@ -8849,12 +8993,12 @@ snapshots: '@scalar/helpers@0.8.2': {} - '@scalar/icons@0.7.3(typescript@5.9.3)': + '@scalar/icons@0.7.3(@typescript/typescript6@6.0.2)': dependencies: '@phosphor-icons/core': 2.1.1 '@types/node': 24.13.2 chalk: 5.6.2 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - typescript @@ -8864,14 +9008,14 @@ snapshots: pathe: 2.0.3 yaml: 2.9.0 - '@scalar/oas-utils@0.19.0(typescript@5.9.3)': + '@scalar/oas-utils@0.19.0(@typescript/typescript6@6.0.2)': dependencies: '@scalar/helpers': 0.8.2 '@scalar/themes': 0.16.1 '@scalar/types': 0.15.0 - '@scalar/workspace-store': 0.54.5(typescript@5.9.3) + '@scalar/workspace-store': 0.54.5(@typescript/typescript6@6.0.2) flatted: 3.4.2 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) yaml: 2.9.0 transitivePeerDependencies: - typescript @@ -8887,15 +9031,15 @@ snapshots: '@scalar/helpers': 0.8.2 '@scalar/validation': 0.6.0 - '@scalar/sidebar@0.9.24(tailwindcss@4.3.1)(typescript@5.9.3)': + '@scalar/sidebar@0.9.24(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1)': dependencies: - '@scalar/components': 0.27.3(tailwindcss@4.3.1)(typescript@5.9.3) + '@scalar/components': 0.27.3(@typescript/typescript6@6.0.2)(tailwindcss@4.3.1) '@scalar/helpers': 0.8.2 - '@scalar/icons': 0.7.3(typescript@5.9.3) + '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/themes': 0.16.1 - '@scalar/use-hooks': 0.4.7(typescript@5.9.3) - '@scalar/workspace-store': 0.54.5(typescript@5.9.3) - vue: 3.5.39(typescript@5.9.3) + '@scalar/use-hooks': 0.4.7(@typescript/typescript6@6.0.2) + '@scalar/workspace-store': 0.54.5(@typescript/typescript6@6.0.2) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - '@vue/composition-api' - supports-color @@ -8922,7 +9066,7 @@ snapshots: type-fest: 5.7.0 zod: 4.4.3 - '@scalar/use-codemirror@0.14.12(typescript@5.9.3)': + '@scalar/use-codemirror@0.14.12(@typescript/typescript6@6.0.2)': dependencies: '@codemirror/autocomplete': 6.20.3 '@codemirror/commands': 6.10.4 @@ -8938,31 +9082,31 @@ snapshots: '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@replit/codemirror-css-color-picker': 6.3.0(@codemirror/language@6.12.4)(@codemirror/state@6.7.0)(@codemirror/view@6.43.3) - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - typescript - '@scalar/use-hooks@0.4.7(typescript@5.9.3)': + '@scalar/use-hooks@0.4.7(@typescript/typescript6@6.0.2)': dependencies: - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) + '@scalar/use-toasts': 0.10.2(@typescript/typescript6@6.0.2) '@scalar/validation': 0.6.0 - '@vueuse/core': 13.9.0(vue@3.5.39(typescript@5.9.3)) - cva: 1.0.0-beta.4(typescript@5.9.3) + '@vueuse/core': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) + cva: 1.0.0-beta.4(@typescript/typescript6@6.0.2) tailwind-merge: 3.5.0 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - typescript - '@scalar/use-toasts@0.10.2(typescript@5.9.3)': + '@scalar/use-toasts@0.10.2(@typescript/typescript6@6.0.2)': dependencies: - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) vue-sonner: 1.3.2 transitivePeerDependencies: - typescript '@scalar/validation@0.6.0': {} - '@scalar/workspace-store@0.54.5(typescript@5.9.3)': + '@scalar/workspace-store@0.54.5(@typescript/typescript6@6.0.2)': dependencies: '@scalar/helpers': 0.8.2 '@scalar/json-magic': 0.12.16 @@ -8974,7 +9118,7 @@ snapshots: '@scalar/validation': 0.6.0 js-base64: 3.7.8 type-fest: 5.7.0 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) yaml: 2.9.0 transitivePeerDependencies: - typescript @@ -9730,10 +9874,10 @@ snapshots: '@tanstack/virtual-file-routes@1.162.0': {} - '@tanstack/vue-virtual@3.13.29(vue@3.5.39(typescript@5.9.3))': + '@tanstack/vue-virtual@3.13.29(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: '@tanstack/virtual-core': 3.17.1 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) '@tree-sitter-grammars/tree-sitter-yaml@0.7.1(tree-sitter@0.22.4)': dependencies: @@ -9851,13 +9995,77 @@ snapshots: '@types/web-bluetooth@0.0.21': {} + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + + '@typescript/typescript6@6.0.2': + dependencies: + '@typescript/old': typescript@6.0.3 + '@ungap/structured-clone@1.3.2': {} - '@unhead/vue@2.1.15(vue@3.5.39(typescript@5.9.3))': + '@unhead/vue@2.1.15(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: hookable: 6.1.1 unhead: 2.1.15 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) '@vercel/oidc@3.1.0': {} @@ -9981,36 +10189,36 @@ snapshots: '@vue/shared': 3.5.39 csstype: 3.2.3 - '@vue/server-renderer@3.5.39(vue@3.5.39(typescript@5.9.3))': + '@vue/server-renderer@3.5.39(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: '@vue/compiler-ssr': 3.5.39 '@vue/shared': 3.5.39 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) '@vue/shared@3.5.39': {} - '@vueuse/core@10.11.1(vue@3.5.39(typescript@5.9.3))': + '@vueuse/core@10.11.1(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.39(typescript@5.9.3)) - vue-demi: 0.14.10(vue@3.5.39(typescript@5.9.3)) + '@vueuse/shared': 10.11.1(vue@3.5.39(@typescript/typescript6@6.0.2)) + vue-demi: 0.14.10(vue@3.5.39(@typescript/typescript6@6.0.2)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/core@13.9.0(vue@3.5.39(typescript@5.9.3))': + '@vueuse/core@13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 13.9.0 - '@vueuse/shared': 13.9.0(vue@3.5.39(typescript@5.9.3)) - vue: 3.5.39(typescript@5.9.3) + '@vueuse/shared': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) + vue: 3.5.39(@typescript/typescript6@6.0.2) - '@vueuse/integrations@13.9.0(axios@1.18.1)(focus-trap@7.8.0)(fuse.js@7.4.2)(vue@3.5.39(typescript@5.9.3))': + '@vueuse/integrations@13.9.0(axios@1.18.1)(focus-trap@7.8.0)(fuse.js@7.4.2)(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: - '@vueuse/core': 13.9.0(vue@3.5.39(typescript@5.9.3)) - '@vueuse/shared': 13.9.0(vue@3.5.39(typescript@5.9.3)) - vue: 3.5.39(typescript@5.9.3) + '@vueuse/core': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@vueuse/shared': 13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2)) + vue: 3.5.39(@typescript/typescript6@6.0.2) optionalDependencies: axios: 1.18.1 focus-trap: 7.8.0 @@ -10020,16 +10228,16 @@ snapshots: '@vueuse/metadata@13.9.0': {} - '@vueuse/shared@10.11.1(vue@3.5.39(typescript@5.9.3))': + '@vueuse/shared@10.11.1(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: - vue-demi: 0.14.10(vue@3.5.39(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.39(@typescript/typescript6@6.0.2)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/shared@13.9.0(vue@3.5.39(typescript@5.9.3))': + '@vueuse/shared@13.9.0(vue@3.5.39(@typescript/typescript6@6.0.2))': dependencies: - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) acorn-jsx@5.3.2(acorn@8.17.0): dependencies: @@ -10520,30 +10728,21 @@ snapshots: core-js-pure@3.49.0: {} - cosmiconfig-typescript-loader@6.3.0(@types/node@26.0.1)(cosmiconfig@9.0.2(typescript@5.9.3))(typescript@5.9.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@26.0.1)(@typescript/typescript6@6.0.2)(cosmiconfig@9.0.2(@typescript/typescript6@6.0.2)): dependencies: '@types/node': 26.0.1 - cosmiconfig: 9.0.2(typescript@5.9.3) + cosmiconfig: 9.0.2(@typescript/typescript6@6.0.2) jiti: 2.6.1 - typescript: 5.9.3 - - cosmiconfig@9.0.2(typescript@5.9.3): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.2.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.9.3 + typescript: '@typescript/typescript6@6.0.2' - cosmiconfig@9.0.2(typescript@6.0.3): + cosmiconfig@9.0.2(@typescript/typescript6@6.0.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.2.0 parse-json: 5.2.0 optionalDependencies: - typescript: 6.0.3 + typescript: '@typescript/typescript6@6.0.2' crelt@1.0.6: {} @@ -10566,11 +10765,11 @@ snapshots: csstype@3.2.3: {} - cva@1.0.0-beta.4(typescript@5.9.3): + cva@1.0.0-beta.4(@typescript/typescript6@6.0.2): dependencies: clsx: 2.1.1 optionalDependencies: - typescript: 5.9.3 + typescript: '@typescript/typescript6@6.0.2' date-fns@1.30.1: {} @@ -12250,12 +12449,12 @@ snapshots: semver: 7.8.5 validate-npm-package-license: 3.0.4 - np@11.2.1(@types/node@26.0.1)(typescript@6.0.3): + np@11.2.1(@types/node@26.0.1)(@typescript/typescript6@6.0.2): dependencies: chalk: 5.6.2 chalk-template: 1.1.2 clipboardy: 5.3.1 - cosmiconfig: 9.0.2(typescript@6.0.3) + cosmiconfig: 9.0.2(@typescript/typescript6@6.0.2) del: 8.0.1 escape-goat: 4.0.0 escape-string-regexp: 5.0.0 @@ -12649,20 +12848,20 @@ snapshots: queue-microtask@1.2.3: {} - radix-vue@1.9.17(vue@3.5.39(typescript@5.9.3)): + radix-vue@1.9.17(vue@3.5.39(@typescript/typescript6@6.0.2)): dependencies: '@floating-ui/dom': 1.7.6 - '@floating-ui/vue': 1.1.11(vue@3.5.39(typescript@5.9.3)) + '@floating-ui/vue': 1.1.11(vue@3.5.39(@typescript/typescript6@6.0.2)) '@internationalized/date': 3.12.2 '@internationalized/number': 3.6.7 - '@tanstack/vue-virtual': 3.13.29(vue@3.5.39(typescript@5.9.3)) - '@vueuse/core': 10.11.1(vue@3.5.39(typescript@5.9.3)) - '@vueuse/shared': 10.11.1(vue@3.5.39(typescript@5.9.3)) + '@tanstack/vue-virtual': 3.13.29(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@vueuse/core': 10.11.1(vue@3.5.39(@typescript/typescript6@6.0.2)) + '@vueuse/shared': 10.11.1(vue@3.5.39(@typescript/typescript6@6.0.2)) aria-hidden: 1.2.6 defu: 6.1.7 fast-deep-equal: 3.1.3 nanoid: 5.1.16 - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) transitivePeerDependencies: - '@vue/composition-api' @@ -13338,9 +13537,9 @@ snapshots: - debug - supports-color - swrv@1.2.0(vue@3.5.39(typescript@5.9.3)): + swrv@1.2.0(vue@3.5.39(@typescript/typescript6@6.0.2)): dependencies: - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) symbol-observable@1.2.0: {} @@ -13457,7 +13656,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@6.0.3)(yaml@2.9.0): + tsup@8.5.1(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(yaml@2.9.0): dependencies: bundle-require: 5.1.0(esbuild@0.28.1) cac: 6.7.14 @@ -13478,7 +13677,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.15 - typescript: 6.0.3 + typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - jiti - supports-color @@ -13528,10 +13727,31 @@ snapshots: dependencies: ts-toolbelt: 9.6.0 - typescript@5.9.3: {} - typescript@6.0.3: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + ufo@1.6.4: {} uglify-js@3.19.3: @@ -13715,21 +13935,21 @@ snapshots: vue-component-type-helpers@3.3.5: {} - vue-demi@0.14.10(vue@3.5.39(typescript@5.9.3)): + vue-demi@0.14.10(vue@3.5.39(@typescript/typescript6@6.0.2)): dependencies: - vue: 3.5.39(typescript@5.9.3) + vue: 3.5.39(@typescript/typescript6@6.0.2) vue-sonner@1.3.2: {} - vue@3.5.39(typescript@5.9.3): + vue@3.5.39(@typescript/typescript6@6.0.2): dependencies: '@vue/compiler-dom': 3.5.39 '@vue/compiler-sfc': 3.5.39 '@vue/runtime-dom': 3.5.39 - '@vue/server-renderer': 3.5.39(vue@3.5.39(typescript@5.9.3)) + '@vue/server-renderer': 3.5.39(vue@3.5.39(@typescript/typescript6@6.0.2)) '@vue/shared': 3.5.39 optionalDependencies: - typescript: 5.9.3 + typescript: '@typescript/typescript6@6.0.2' w3c-keyname@2.2.8: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 38b4e021..28d3e7f2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -13,6 +13,7 @@ catalog: "@scalar/api-reference-react": ^0.9.48 "@seriousme/openapi-schema-validator": ^2.9.0 "@tailwindcss/postcss": ^4.3.1 + "@typescript/native": npm:typescript@7.0.2 "@types/babel__traverse": ^7.28.0 "@types/fs-extra": ^11.0.4 "@types/node": ^26.0.1 @@ -44,7 +45,7 @@ catalog: tailwindcss: ^4.3.1 tsup: ^8.5.1 turbo: ^2.10.0 - typescript: 5.9.3 + typescript: npm:@typescript/typescript6@6.0.2 vitest: ^4.1.9 zod: ^4.4.3 diff --git a/scripts/check-generator-bench-regression.mts b/scripts/check-generator-bench-regression.mts new file mode 100644 index 00000000..be9d6920 --- /dev/null +++ b/scripts/check-generator-bench-regression.mts @@ -0,0 +1,159 @@ +#!/usr/bin/env node + +import fs from "node:fs"; +import path from "node:path"; +import process from "node:process"; + +type BenchSummary = { + id: string; + mode: "cold" | "warm"; + openapiVersion: string; + profile: { + totalMs: number; + [key: string]: number; + }; + fixture: string; +}; + +type BenchReport = { + generatedAt: string; + iterations: number; + scenarios: BenchSummary[]; +}; + +type CliArgs = { + baseline: string; + current: string; + failOnRegression: boolean; + minDeltaMs: number; + threshold: number; + writeBaseline: boolean; +}; + +function parseArgs(argv: string[]): CliArgs { + const args: CliArgs = { + baseline: "", + current: "", + failOnRegression: false, + minDeltaMs: 50, + threshold: 0.3, + writeBaseline: false, + }; + + for (let i = 0; i < argv.length; i++) { + const arg = argv[i]; + switch (arg) { + case "--baseline": + args.baseline = argv[++i] ?? ""; + break; + case "--current": + args.current = argv[++i] ?? ""; + break; + case "--threshold": + args.threshold = Number(argv[++i] ?? "0.3"); + break; + case "--min-delta-ms": + args.minDeltaMs = Number(argv[++i] ?? "50"); + break; + case "--fail-on-regression": + args.failOnRegression = true; + break; + case "--write-baseline": + args.writeBaseline = true; + break; + case "-h": + case "--help": + printHelp(); + process.exit(0); + default: + throw new Error(`Unknown argument: ${arg}`); + } + } + + if (!args.current || !args.baseline) { + throw new Error("Both --current and --baseline are required."); + } + + return args; +} + +function printHelp(): void { + process.stdout.write(`Usage: + node scripts/check-generator-bench-regression.mts \\ + --current tests/bench/generator/current.json \\ + --baseline tests/bench/generator/baseline.json \\ + [--threshold 0.3] [--min-delta-ms 50] [--fail-on-regression] [--write-baseline] +`); +} + +function readReport(filePath: string): BenchReport { + return JSON.parse(fs.readFileSync(filePath, "utf-8")) as BenchReport; +} + +function getScenarioKey(scenario: BenchSummary): string { + return `${scenario.id} | ${scenario.mode}`; +} + +function createScenarioMap(report: BenchReport): Map { + return new Map(report.scenarios.map((scenario) => [getScenarioKey(scenario), scenario])); +} + +function writeBaseline(currentPath: string, baselinePath: string): void { + fs.mkdirSync(path.dirname(baselinePath), { recursive: true }); + fs.copyFileSync(currentPath, baselinePath); + process.stdout.write(`Updated generator benchmark baseline at ${baselinePath}\n`); +} + +function main(): void { + const args = parseArgs(process.argv.slice(2)); + if (args.writeBaseline) { + writeBaseline(args.current, args.baseline); + return; + } + + const current = createScenarioMap(readReport(args.current)); + const baseline = createScenarioMap(readReport(args.baseline)); + const regressions: string[] = []; + const additions: string[] = []; + + for (const [key, currentScenario] of current) { + const baselineScenario = baseline.get(key); + if (!baselineScenario) { + additions.push(key); + continue; + } + + const baselineMs = baselineScenario.profile.totalMs; + const currentMs = currentScenario.profile.totalMs; + const ratio = currentMs / baselineMs; + const deltaMs = currentMs - baselineMs; + if (deltaMs >= args.minDeltaMs && ratio > 1 + args.threshold) { + regressions.push( + `${key}: ${currentMs.toFixed(2)}ms vs ${baselineMs.toFixed(2)}ms (${( + (ratio - 1) * + 100 + ).toFixed(1)}% slower)`, + ); + } + } + + if (additions.length > 0) { + process.stdout.write(`New generator benchmark scenarios:\n${additions.join("\n")}\n`); + } + + if (regressions.length > 0) { + const message = `Generator benchmark regressions:\n${regressions.join("\n")}\n`; + if (args.failOnRegression) { + process.stderr.write(message); + process.exitCode = 1; + return; + } + + process.stdout.write(message); + return; + } + + process.stdout.write(`Generator benchmark check passed (${current.size} scenarios).\n`); +} + +main(); diff --git a/scripts/fixture-scale/domain.mts b/scripts/fixture-scale/domain.mts new file mode 100644 index 00000000..b60d6b64 --- /dev/null +++ b/scripts/fixture-scale/domain.mts @@ -0,0 +1,260 @@ +export type HttpMethod = "GET" | "POST" | "PATCH" | "PUT" | "DELETE"; + +export type OperationKind = "list" | "get" | "create" | "update" | "delete"; + +export type RouteOperation = { + kind: OperationKind; + method: HttpMethod; + /** App-router segment path under the generated API root, e.g. `[id]` or empty for collection. */ + segmentPath: string; + /** OpenAPI path suffix after `/generated/{slug}`. */ + openApiSuffix: string; + description: string; + summary: string; + hasQuery: boolean; + hasBody: boolean; + hasPathParams: boolean; + responseType: "entity" | "list" | "empty"; + responseSet: "public" | "common" | "auth" | "crud"; + auth: boolean; +}; + +export type ResourceDefinition = { + name: string; + slug: string; + tag: string; + tableName: string; + /** App-router dynamic segment for resource detail routes, e.g. organizationId. */ + routeIdParam?: string; + nested?: { + parentSlug: string; + parentParam: string; + }; +}; + +export const GENERATED_HEADER = + "// @generated by scripts/generate-scale-fixtures.mts — do not edit\n"; + +export const SCALE_RESOURCES: ResourceDefinition[] = [ + { name: "Customer", slug: "customers", tag: "Customers", tableName: "customers" }, + { name: "Invoice", slug: "invoices", tag: "Invoices", tableName: "invoices" }, + { + name: "Project", + slug: "projects", + tag: "Projects", + tableName: "projects", + routeIdParam: "projectId", + nested: { parentSlug: "organizations", parentParam: "organizationId" }, + }, + { + name: "Task", + slug: "tasks", + tag: "Tasks", + tableName: "tasks", + nested: { parentSlug: "projects", parentParam: "projectId" }, + }, + { name: "Subscription", slug: "subscriptions", tag: "Subscriptions", tableName: "subscriptions" }, + { name: "Webhook", slug: "webhooks", tag: "Webhooks", tableName: "webhooks" }, + { name: "Team", slug: "teams", tag: "Teams", tableName: "teams" }, + { name: "Member", slug: "members", tag: "Members", tableName: "members" }, + { name: "Product", slug: "products", tag: "Products", tableName: "products" }, + { name: "Order", slug: "orders", tag: "Orders", tableName: "orders" }, + { name: "Payment", slug: "payments", tag: "Payments", tableName: "payments" }, + { name: "Refund", slug: "refunds", tag: "Refunds", tableName: "refunds" }, + { name: "Notification", slug: "notifications", tag: "Notifications", tableName: "notifications" }, + { name: "Report", slug: "reports", tag: "Reports", tableName: "reports" }, + { name: "Export", slug: "exports", tag: "Exports", tableName: "exports" }, + { name: "Session", slug: "sessions", tag: "Sessions", tableName: "sessions" }, + { name: "ApiKey", slug: "api-keys", tag: "ApiKeys", tableName: "api_keys" }, + { name: "AuditLog", slug: "audit-logs", tag: "AuditLogs", tableName: "audit_logs" }, + { name: "CatalogItem", slug: "catalog-items", tag: "Catalog", tableName: "catalog_items" }, + { name: "Workspace", slug: "workspaces", tag: "Workspaces", tableName: "workspaces" }, + { + name: "Organization", + slug: "organizations", + tag: "Organizations", + tableName: "organizations", + routeIdParam: "organizationId", + }, + { name: "Department", slug: "departments", tag: "Departments", tableName: "departments" }, + { name: "Document", slug: "documents", tag: "Documents", tableName: "documents" }, + { name: "Comment", slug: "comments", tag: "Comments", tableName: "comments" }, + { name: "Attachment", slug: "attachments", tag: "Attachments", tableName: "attachments" }, +]; + +export function getRouteIdParam(resource: ResourceDefinition): string { + return resource.routeIdParam ?? "id"; +} + +export function getResourceOperations(resource: ResourceDefinition): RouteOperation[] { + const routeIdParam = getRouteIdParam(resource); + const detailSegmentPath = `[${routeIdParam}]`; + const detailOpenApiSuffix = `/{${routeIdParam}}`; + + return [ + { + kind: "list", + method: "GET", + segmentPath: "", + openApiSuffix: "", + summary: `List ${resource.slug}`, + description: `Returns a paginated list of ${resource.slug}`, + hasQuery: true, + hasBody: false, + hasPathParams: false, + responseType: "list", + responseSet: "public", + auth: false, + }, + { + kind: "get", + method: "GET", + segmentPath: detailSegmentPath, + openApiSuffix: detailOpenApiSuffix, + summary: `Get ${resource.name.toLowerCase()} by ID`, + description: `Returns a single ${resource.name.toLowerCase()} by identifier`, + hasQuery: false, + hasBody: false, + hasPathParams: true, + responseType: "entity", + responseSet: "common", + auth: true, + }, + { + kind: "create", + method: "POST", + segmentPath: "", + openApiSuffix: "", + summary: `Create ${resource.name.toLowerCase()}`, + description: `Creates a new ${resource.name.toLowerCase()}`, + hasQuery: false, + hasBody: true, + hasPathParams: false, + responseType: "entity", + responseSet: "crud", + auth: true, + }, + { + kind: "update", + method: "PATCH", + segmentPath: detailSegmentPath, + openApiSuffix: detailOpenApiSuffix, + summary: `Update ${resource.name.toLowerCase()}`, + description: `Updates an existing ${resource.name.toLowerCase()}`, + hasQuery: false, + hasBody: true, + hasPathParams: true, + responseType: "entity", + responseSet: "auth", + auth: true, + }, + { + kind: "delete", + method: "DELETE", + segmentPath: detailSegmentPath, + openApiSuffix: detailOpenApiSuffix, + summary: `Delete ${resource.name.toLowerCase()}`, + description: `Deletes a ${resource.name.toLowerCase()} by identifier`, + hasQuery: false, + hasBody: false, + hasPathParams: true, + responseType: "empty", + responseSet: "auth", + auth: true, + }, + ]; +} + +export function getSchemaNames(resource: ResourceDefinition) { + return { + entity: `${resource.name}Entity`, + listResponse: `${resource.name}ListResponse`, + idParams: `${resource.name}IdParams`, + collectionPathParams: `${resource.name}CollectionPathParams`, + listQuery: `${resource.name}ListQuery`, + createInput: `Create${resource.name}Input`, + updateInput: `Update${resource.name}Input`, + zodEntity: `${resource.name}Schema`, + zodCreate: `Create${resource.name}Schema`, + zodUpdate: `Update${resource.name}Schema`, + zodIdParams: `${resource.name}IdParamsSchema`, + zodCollectionPathParams: `${resource.name}CollectionPathParamsSchema`, + zodListQuery: `${resource.name}ListQuerySchema`, + }; +} + +export function getPathParamsTypeName( + resource: ResourceDefinition, + operation: RouteOperation, +): string | null { + const names = getSchemaNames(resource); + if (resource.nested) { + return operation.hasPathParams ? names.idParams : names.collectionPathParams; + } + return operation.hasPathParams ? names.idParams : null; +} + +export function getOperationId( + resource: ResourceDefinition, + operation: RouteOperation, + prefix: string, +): string { + const action = + operation.kind === "list" + ? "List" + : operation.kind === "get" + ? "Get" + : operation.kind === "create" + ? "Create" + : operation.kind === "update" + ? "Update" + : "Delete"; + return `${prefix}${action}${resource.name}`; +} + +export function getOpenApiPath(resource: ResourceDefinition, operation: RouteOperation): string { + const base = resource.nested + ? `/generated/${resource.nested.parentSlug}/{${resource.nested.parentParam}}/${resource.slug}` + : `/generated/${resource.slug}`; + return `${base}${operation.openApiSuffix}`; +} + +export function getRouteBaseSegments(resource: ResourceDefinition, routeRoot: string): string[] { + if (resource.nested) { + return [ + routeRoot, + "generated", + resource.nested.parentSlug, + `[${resource.nested.parentParam}]`, + resource.slug, + ]; + } + return [routeRoot, "generated", resource.slug]; +} + +export function getTotalRouteCount(): number { + return SCALE_RESOURCES.reduce( + (count, resource) => count + getResourceOperations(resource).length, + 0, + ); +} + +export function getResourceOperationsForFramework( + resource: ResourceDefinition, + framework: "next-app-router" | "next-pages-router" | "tanstack" | "react-router", +): RouteOperation[] { + const operations = getResourceOperations(resource); + if (framework === "tanstack" || framework === "react-router") { + return operations + .filter((operation) => operation.kind !== "delete") + .map((operation) => + operation.kind === "update" + ? { + ...operation, + method: "POST", + } + : operation, + ); + } + return operations; +} diff --git a/scripts/fixture-scale/emit.mts b/scripts/fixture-scale/emit.mts new file mode 100644 index 00000000..3147cfa4 --- /dev/null +++ b/scripts/fixture-scale/emit.mts @@ -0,0 +1,115 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { emitRoutes } from "./routes.mts"; +import { emitSchemas, type SchemaFlavor } from "./schemas.mts"; +import type { AppTarget, ScaleTarget } from "./targets.mts"; +import { emitOpenApiTemplates } from "./templates.mts"; +import { copyDirectory, removeDirIfExists, writeTextFile } from "./utils.mts"; + +export function generateScaleTarget(target: ScaleTarget, dryRun: boolean): number { + cleanTargetGeneratedPaths(target, dryRun); + + if (target.copyShowcaseRoutesFrom) { + copyDirectory( + target.copyShowcaseRoutesFrom, + path.join(target.outputPath, "src", "app", "api"), + dryRun, + ); + } + + const flavor = normalizeFlavor(target.flavor); + const schemaFiles = emitSchemas({ + outputDir: target.outputPath, + flavor, + schemaLayout: target.schemaLayout, + dryRun, + }); + + if (target.copySchemasFrom) { + const catalogTarget = + flavor === "zod" || flavor === "drizzle-zod" + ? path.join(target.outputPath, "src", "schemas") + : path.join(target.outputPath, "src", "schemas"); + copyDirectory(target.copySchemasFrom, catalogTarget, dryRun); + } + + const routeFiles = emitRoutes({ + outputDir: target.outputPath, + framework: target.framework, + flavor, + dryRun, + operationIdPrefix: target.operationIdPrefix, + }); + + const templateFiles = emitOpenApiTemplates(target.outputPath, target.template, dryRun); + return schemaFiles.length + routeFiles.length + templateFiles.length; +} + +export function generateAppTarget(target: AppTarget, dryRun: boolean): number { + cleanTargetGeneratedPaths(target, dryRun); + + const flavor = normalizeFlavor(target.flavor); + emitSchemas({ + outputDir: target.outputPath, + flavor, + schemaLayout: target.schemaLayout, + dryRun, + }); + + emitRoutes({ + outputDir: target.outputPath, + framework: target.framework, + flavor, + dryRun, + operationIdPrefix: target.operationIdPrefix, + }); + + return 0; +} + +function normalizeFlavor(flavor: ScaleTarget["flavor"]): SchemaFlavor { + if (flavor === "filtered") { + return "typescript"; + } + if (flavor === "mixed") { + return "mixed"; + } + return flavor; +} + +function cleanTargetGeneratedPaths(target: ScaleTarget, dryRun: boolean): void { + for (const relativePath of target.cleanGeneratedSubdirs) { + const absolutePath = path.join(target.outputPath, relativePath); + if (relativePath.endsWith(".ts")) { + if (!dryRun && fs.existsSync(absolutePath)) { + fs.rmSync(absolutePath, { force: true }); + } + continue; + } + removeDirIfExists(absolutePath, dryRun); + } +} + +export function getRepoRoot(): string { + return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +} + +export function writeGeneratedManifest(target: ScaleTarget, dryRun: boolean): void { + const manifestPath = path.join(target.outputPath, "GENERATED.scale.json"); + writeTextFile( + manifestPath, + `${JSON.stringify( + { + generator: "scripts/generate-scale-fixtures.mts", + target: target.id, + routeCount: 125, + schemaModules: 50, + }, + null, + 2, + )}\n`, + dryRun, + ); +} diff --git a/scripts/fixture-scale/routes.mts b/scripts/fixture-scale/routes.mts new file mode 100644 index 00000000..3f41343a --- /dev/null +++ b/scripts/fixture-scale/routes.mts @@ -0,0 +1,272 @@ +import path from "node:path"; + +import { + GENERATED_HEADER, + SCALE_RESOURCES, + getOperationId, + getPathParamsTypeName, + getResourceOperationsForFramework, + getRouteBaseSegments, + getSchemaNames, + type ResourceDefinition, + type RouteOperation, +} from "./domain.mts"; +import type { SchemaFlavor } from "./schemas.mts"; +import { writeTextFile } from "./utils.mts"; + +export type FrameworkKind = "next-app-router" | "next-pages-router" | "tanstack" | "react-router"; + +export type RouteEmitOptions = { + outputDir: string; + framework: FrameworkKind; + flavor: SchemaFlavor; + dryRun: boolean; + operationIdPrefix: string; + mixedUsesZod?: (resource: ResourceDefinition, index: number) => boolean; +}; + +function buildAnnotations( + resource: ResourceDefinition, + operation: RouteOperation, + options: RouteEmitOptions, + index: number, +): string { + const names = getSchemaNames(resource); + const useZod = + options.flavor === "zod" || + options.flavor === "drizzle-zod" || + (options.flavor === "mixed" && (options.mixedUsesZod?.(resource, index) ?? index % 2 === 1)); + const entity = useZod ? names.zodEntity : names.entity; + const listResponse = names.listResponse; + const pathParamsType = getPathParamsTypeName(resource, operation); + const listQuery = useZod ? names.zodListQuery : names.listQuery; + const createInput = useZod ? names.zodCreate : names.createInput; + const updateInput = useZod ? names.zodUpdate : names.updateInput; + const lines = [ + ` * ${operation.summary}`, + ` * @description ${operation.description}`, + ` * @operationId ${getOperationId(resource, operation, options.operationIdPrefix)}`, + ` * @tag ${resource.tag}`, + ` * @responseSet ${operation.responseSet}`, + ]; + + if (operation.auth) { + lines.push(" * @auth bearer"); + } + if (pathParamsType) { + lines.push(` * @pathParams ${pathParamsType}`); + } + if (operation.hasQuery) { + lines.push(` * @params ${listQuery}`); + } + if (operation.hasBody) { + lines.push(` * @body ${operation.kind === "create" ? createInput : updateInput}`); + } + if (operation.responseType === "empty") { + lines.push(" * @response 204:Empty:Resource deleted successfully"); + } else if (operation.responseType === "list") { + lines.push(` * @response ${listResponse}`); + } else { + lines.push(` * @response ${entity}`); + } + lines.push(" * @openapi"); + + return lines.join("\n"); +} + +export function emitRoutes(options: RouteEmitOptions): string[] { + switch (options.framework) { + case "next-app-router": + return emitNextAppRouterRoutes(options); + case "next-pages-router": + return emitNextPagesRouterRoutes(options); + case "tanstack": + return emitTanstackRoutes(options); + case "react-router": + return emitReactRouterRoutes(options); + default: { + const neverFramework: never = options.framework; + throw new Error(`Unsupported framework: ${neverFramework}`); + } + } +} + +function emitNextAppRouterRoutes(options: RouteEmitOptions): string[] { + const written: string[] = []; + const apiRoot = path.join("src", "app", "api"); + const grouped = new Map< + string, + Array<{ resource: ResourceDefinition; operation: RouteOperation; index: number }> + >(); + + for (const [index, resource] of SCALE_RESOURCES.entries()) { + for (const operation of getResourceOperationsForFramework(resource, options.framework)) { + const segments = [ + ...getRouteBaseSegments(resource, apiRoot), + ...operationSegmentParts(operation), + ]; + const key = segments.join("/"); + const entries = grouped.get(key) ?? []; + entries.push({ resource, operation, index }); + grouped.set(key, entries); + } + } + + for (const [key, entries] of grouped.entries()) { + const segments = key.split("/"); + const filePath = path.join(options.outputDir, ...segments, "route.ts"); + const blocks = entries.map(({ resource, operation, index }) => { + const annotations = buildAnnotations(resource, operation, options, index); + return `/** +${annotations} + */ +export async function ${operation.method}() { + return Response.json({}); +}`; + }); + writeTextFile(filePath, `${GENERATED_HEADER}${blocks.join("\n\n")}\n`, options.dryRun); + written.push(filePath); + } + + return written; +} + +function operationSegmentParts(operation: RouteOperation): string[] { + return operation.segmentPath ? operation.segmentPath.split("/") : []; +} + +function emitNextPagesRouterRoutes(options: RouteEmitOptions): string[] { + const written: string[] = []; + + for (const [index, resource] of SCALE_RESOURCES.entries()) { + const operations = getResourceOperationsForFramework(resource, options.framework); + const listOp = operations.find((operation) => operation.kind === "list"); + const createOp = operations.find((operation) => operation.kind === "create"); + const detailOps = operations.filter( + (operation) => operation.kind !== "list" && operation.kind !== "create", + ); + + if (listOp || createOp) { + const filePath = path.join( + options.outputDir, + "pages", + "api", + "generated", + resource.slug, + "index.ts", + ); + const blocks = []; + if (listOp) { + blocks.push(renderPagesMethodBlock(resource, listOp, options, index, "GET")); + } + if (createOp) { + blocks.push(renderPagesMethodBlock(resource, createOp, options, index, "POST")); + } + writeTextFile( + filePath, + `${GENERATED_HEADER}${blocks.join("\n")}\nexport default function handler() {}\n`, + options.dryRun, + ); + written.push(filePath); + } + + const detailPath = path.join( + options.outputDir, + "pages", + "api", + "generated", + resource.slug, + "[id].ts", + ); + const detailBlocks = detailOps.map((operation) => + renderPagesMethodBlock(resource, operation, options, index, operation.method), + ); + writeTextFile( + detailPath, + `${GENERATED_HEADER}${detailBlocks.join("\n")}\nexport default function handler() {}\n`, + options.dryRun, + ); + written.push(detailPath); + } + + return written; +} + +function renderPagesMethodBlock( + resource: ResourceDefinition, + operation: RouteOperation, + options: RouteEmitOptions, + index: number, + method: string, +): string { + const annotations = buildAnnotations(resource, operation, options, index); + return `/**\n${annotations}\n * @method ${method}\n */`; +} + +function emitTanstackRoutes(options: RouteEmitOptions): string[] { + const written: string[] = []; + const grouped = new Map< + string, + Array<{ resource: ResourceDefinition; operation: RouteOperation; index: number }> + >(); + + for (const [index, resource] of SCALE_RESOURCES.entries()) { + for (const operation of getResourceOperationsForFramework(resource, options.framework)) { + const fileName = `${resource.slug}${operation.segmentPath ? ".$id" : ""}.ts`; + const key = fileName; + const entries = grouped.get(key) ?? []; + entries.push({ resource, operation, index }); + grouped.set(key, entries); + } + } + + for (const [fileName, entries] of grouped.entries()) { + const filePath = path.join(options.outputDir, "src", "routes", "api", "generated", fileName); + const uniqueFnBlocks = mergeTanstackFunctions(entries, options); + + writeTextFile(filePath, `${GENERATED_HEADER}${uniqueFnBlocks.join("\n\n")}\n`, options.dryRun); + written.push(filePath); + } + + return written; +} + +function mergeTanstackFunctions( + entries: Array<{ resource: ResourceDefinition; operation: RouteOperation; index: number }>, + options: RouteEmitOptions, +): string[] { + const loaders = entries.filter(({ operation }) => operation.method === "GET"); + const actions = entries.filter( + ({ operation }) => + operation.method === "POST" || operation.method === "PATCH" || operation.method === "DELETE", + ); + + const blocks: string[] = []; + if (loaders.length > 0) { + const body = loaders + .map(({ resource, operation, index }) => { + const annotations = buildAnnotations(resource, operation, options, index); + return `/** +${annotations} + */`; + }) + .join("\n"); + blocks.push(`${body}\nexport async function loader() {}`); + } + if (actions.length > 0) { + const body = actions + .map(({ resource, operation, index }) => { + const annotations = buildAnnotations(resource, operation, options, index); + return `/** +${annotations} + */`; + }) + .join("\n"); + blocks.push(`${body}\nexport async function action() {}`); + } + return blocks; +} + +function emitReactRouterRoutes(options: RouteEmitOptions): string[] { + return emitTanstackRoutes(options); +} diff --git a/scripts/fixture-scale/schemas.mts b/scripts/fixture-scale/schemas.mts new file mode 100644 index 00000000..5b91a380 --- /dev/null +++ b/scripts/fixture-scale/schemas.mts @@ -0,0 +1,268 @@ +import path from "node:path"; + +import { + GENERATED_HEADER, + SCALE_RESOURCES, + getRouteIdParam, + getSchemaNames, + type ResourceDefinition, +} from "./domain.mts"; +import type { SchemaLayout } from "./targets.mts"; +import { writeTextFile } from "./utils.mts"; + +export type SchemaFlavor = "typescript" | "zod" | "mixed" | "drizzle-zod"; + +export function emitSchemas(options: { + outputDir: string; + flavor: SchemaFlavor; + schemaLayout: SchemaLayout; + dryRun: boolean; + mixedUsesZod?: (resource: ResourceDefinition, index: number) => boolean; +}): string[] { + const written: string[] = []; + + for (const [index, resource] of SCALE_RESOURCES.entries()) { + const useZod = + options.flavor === "zod" || + options.flavor === "drizzle-zod" || + (options.flavor === "mixed" && (options.mixedUsesZod?.(resource, index) ?? index % 2 === 1)); + + if (options.flavor === "drizzle-zod") { + const drizzlePath = path.join( + options.outputDir, + "src", + "schemas", + "generated", + `${resource.slug}.ts`, + ); + writeTextFile(drizzlePath, emitDrizzleSchemaFile(resource), options.dryRun); + written.push(drizzlePath); + continue; + } + + const entityRoot = resolveSchemaRoot(options.outputDir, options.schemaLayout, useZod); + const entityFile = useZod + ? emitZodEntitySchemaFile(resource) + : emitTypeScriptEntitySchemaFile(resource, index); + const inputFile = useZod + ? emitZodInputSchemaFile(resource) + : emitTypeScriptInputSchemaFile(resource); + + const entityPath = path.join(entityRoot, `${resource.slug}-entity.ts`); + const inputPath = path.join(entityRoot, `${resource.slug}-input.ts`); + writeTextFile(entityPath, entityFile, options.dryRun); + writeTextFile(inputPath, inputFile, options.dryRun); + written.push(entityPath, inputPath); + } + + if (options.flavor === "drizzle-zod") { + const dbSchemaPath = path.join(options.outputDir, "src", "db", "schema.generated.ts"); + writeTextFile(dbSchemaPath, emitDrizzleDbSchemaFile(), options.dryRun); + written.push(dbSchemaPath); + } + + return written; +} + +function resolveSchemaRoot(outputDir: string, schemaLayout: SchemaLayout, useZod: boolean): string { + if (schemaLayout === "schemas-root") { + return path.join(outputDir, "schemas", "generated"); + } + if (useZod || schemaLayout === "src-schemas") { + return path.join(outputDir, "src", "schemas", "generated"); + } + return path.join(outputDir, "src", "types", "generated"); +} + +function emitTypeScriptEntitySchemaFile(resource: ResourceDefinition, index: number): string { + const names = getSchemaNames(resource); + const routeIdParam = getRouteIdParam(resource); + const statusUnion = index % 4 === 0 ? `\n status: "draft" | "active" | "archived";` : ""; + const readonlyFields = + index % 3 === 0 ? `\n readonly createdAt: string;\n readonly updatedAt: string;` : ""; + const pathParamsBlock = resource.nested + ? ` +export type ${names.collectionPathParams} = { + ${resource.nested.parentParam}: string; +}; + +export type ${names.idParams} = { + ${resource.nested.parentParam}: string; + ${routeIdParam}: string; +}; +` + : ` +export type ${names.idParams} = { + ${routeIdParam}: string; +}; +`; + + return `${GENERATED_HEADER}export type ${names.entity} = { + id: string; + name: string; + description?: string; + active: boolean;${statusUnion}${readonlyFields} +}; + +export type ${names.listResponse} = { + items: ${names.entity}[]; + total: number; + page: number; + limit: number; +}; +${pathParamsBlock}`; +} + +function emitTypeScriptInputSchemaFile(resource: ResourceDefinition): string { + const names = getSchemaNames(resource); + + return `${GENERATED_HEADER}export type ${names.listQuery} = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type ${names.createInput} = { + name: string; + description?: string; + active?: boolean; +}; + +export type ${names.updateInput} = { + name?: string; + description?: string; + active?: boolean; +}; +`; +} + +function emitZodEntitySchemaFile(resource: ResourceDefinition): string { + const names = getSchemaNames(resource); + const routeIdParam = getRouteIdParam(resource); + const pathParamsBlock = resource.nested + ? ` +export const ${names.zodCollectionPathParams} = z.object({ + ${resource.nested.parentParam}: z.string().uuid(), +}); + +export const ${names.zodIdParams} = z.object({ + ${resource.nested.parentParam}: z.string().uuid(), + ${routeIdParam}: z.string().uuid(), +}); +` + : ` +export const ${names.zodIdParams} = z.object({ + ${routeIdParam}: z.string().uuid(), +}); +`; + + return `${GENERATED_HEADER}import { z } from "zod"; + +export const ${names.zodEntity} = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ${names.listResponse} = z.object({ + items: z.array(${names.zodEntity}), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); +${pathParamsBlock}`; +} + +function emitZodInputSchemaFile(resource: ResourceDefinition): string { + const names = getSchemaNames(resource); + + return `${GENERATED_HEADER}import { z } from "zod"; + +export const ${names.zodListQuery} = z.object({ + page: z.string().regex(/^\\d+$/).optional(), + limit: z.string().regex(/^\\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const ${names.zodCreate} = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const ${names.zodUpdate} = ${names.zodCreate}.partial(); +`; +} + +function emitDrizzleDbSchemaFile(): string { + const tables = SCALE_RESOURCES.map((resource) => { + return `export const ${toCamelCase(resource.tableName)} = pgTable("${resource.tableName}", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +});`; + }).join("\n\n"); + + return `${GENERATED_HEADER}import { boolean, pgTable, serial, timestamp, varchar } from "drizzle-orm/pg-core"; + +${tables} +`; +} + +function emitDrizzleSchemaFile(resource: ResourceDefinition): string { + const names = getSchemaNames(resource); + const routeIdParam = getRouteIdParam(resource); + const tableVar = toCamelCase(resource.tableName); + + return `${GENERATED_HEADER}import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { ${tableVar} } from "../../db/schema.generated"; + +export const ${names.zodCreate} = createInsertSchema(${tableVar}, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const ${names.zodUpdate} = ${names.zodCreate}.partial(); + +export const ${names.zodEntity} = createSelectSchema(${tableVar}); + +export const ${names.listResponse} = z.object({ + items: z.array(${names.zodEntity}), + total: z.number().int().nonnegative(), +}); + +${ + resource.nested + ? `export const ${names.zodCollectionPathParams} = z.object({ + ${resource.nested.parentParam}: z.string().regex(/^\\d+$/), +}); + +export const ${names.zodIdParams} = z.object({ + ${resource.nested.parentParam}: z.string().regex(/^\\d+$/), + ${routeIdParam}: z.string().regex(/^\\d+$/), +});` + : `export const ${names.zodIdParams} = z.object({ + ${routeIdParam}: z.string().regex(/^\\d+$/), +});` +} + +export const ${names.zodListQuery} = z.object({ + page: z.string().regex(/^\\d+$/).optional(), + limit: z.string().regex(/^\\d+$/).optional(), +}); +`; +} + +function toCamelCase(value: string): string { + return value.replace(/_([a-z])/g, (_, char: string) => char.toUpperCase()); +} diff --git a/scripts/fixture-scale/targets.mts b/scripts/fixture-scale/targets.mts new file mode 100644 index 00000000..3dfafcdf --- /dev/null +++ b/scripts/fixture-scale/targets.mts @@ -0,0 +1,434 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import type { FrameworkKind } from "./routes.mts"; +import type { SchemaFlavor } from "./schemas.mts"; + +const scriptDir = path.dirname(fileURLToPath(import.meta.url)); +export const repoRoot = path.resolve(scriptDir, "../.."); +const fixtureRoot = path.join(repoRoot, "tests", "fixtures", "projects"); + +export type TemplateOptions = { + title: string; + description: string; + framework?: FrameworkKind; + schemaType: SchemaFlavor | SchemaFlavor[] | "typescript"; + apiDir: string; + schemaDir: string; + includeOpenApiRoutes?: boolean; + ignoreRoutes?: string[]; + templateSource?: string; +}; + +export type SchemaLayout = "src-types" | "src-schemas" | "schemas-root"; + +export type ScaleTarget = { + id: string; + outputPath: string; + framework: FrameworkKind; + flavor: SchemaFlavor | "typescript" | "filtered" | "mixed"; + operationIdPrefix: string; + schemaLayout: SchemaLayout; + template: TemplateOptions; + copySchemasFrom?: string; + copyShowcaseRoutesFrom?: string; + cleanGeneratedSubdirs: string[]; +}; + +export const FIXTURE_TARGETS: ScaleTarget[] = [ + target({ + id: "next-app-core-at-scale", + outputPath: "next/app-router/core-flow-at-scale", + framework: "next-app-router", + flavor: "typescript", + operationIdPrefix: "scale", + templateSource: "next/app-router/core-flow", + schemaLayout: "src-types", + schemaDir: "./src", + schemaType: "typescript", + title: "App Router Core Flow At Scale", + description: "Large-scale TypeScript fixture for realistic generator benchmarks", + }), + target({ + id: "next-app-ts-full-at-scale", + outputPath: "next/app-router/ts-full-coverage-at-scale", + framework: "next-app-router", + flavor: "typescript", + operationIdPrefix: "tsFullScale", + templateSource: "next/app-router/ts-full-coverage", + copySchemasFrom: "next/app-router/ts-full-coverage/src/schemas", + schemaLayout: "src-types", + schemaDir: "./src", + schemaType: "typescript", + title: "App Router TypeScript Full Coverage At Scale", + description: "Large-scale TypeScript fixture with feature catalog schemas", + }), + target({ + id: "next-app-zod-full-at-scale", + outputPath: "next/app-router/zod-full-coverage-at-scale", + framework: "next-app-router", + flavor: "zod", + operationIdPrefix: "zodFullScale", + templateSource: "next/app-router/zod-full-coverage", + copySchemasFrom: "next/app-router/zod-full-coverage/src/schemas", + schemaLayout: "src-schemas", + schemaDir: "./src/schemas", + schemaType: "zod", + title: "App Router Zod Full Coverage At Scale", + description: "Large-scale Zod fixture with feature catalog schemas", + }), + target({ + id: "next-app-zod-only-at-scale", + outputPath: "next/app-router/zod-only-coverage-at-scale", + framework: "next-app-router", + flavor: "zod", + operationIdPrefix: "zodOnlyScale", + templateSource: "next/app-router/zod-only-coverage", + copySchemasFrom: "next/app-router/zod-only-coverage/src/schemas", + schemaLayout: "src-schemas", + schemaDir: "./src/schemas", + schemaType: "zod", + title: "App Router Zod Coverage At Scale", + description: "Large-scale Zod-only fixture", + }), + target({ + id: "next-app-mixed-at-scale", + outputPath: "next/app-router/mixed-schemas-at-scale", + framework: "next-app-router", + flavor: "mixed", + operationIdPrefix: "mixedScale", + templateSource: "next/app-router/mixed-schemas", + schemaLayout: "src-types", + schemaDir: "./src", + schemaType: ["typescript", "zod"], + title: "App Router Mixed Schemas At Scale", + description: "Large-scale mixed TypeScript and Zod fixture", + }), + target({ + id: "next-app-drizzle-at-scale", + outputPath: "next/app-router/drizzle-zod-flow-at-scale", + framework: "next-app-router", + flavor: "drizzle-zod", + operationIdPrefix: "drizzleScale", + templateSource: "next/app-router/drizzle-zod-flow", + copySchemasFrom: "next/app-router/drizzle-zod-flow/src/schemas", + schemaLayout: "src-schemas", + schemaDir: "./src/schemas", + schemaType: "zod", + title: "App Router Drizzle Zod Flow At Scale", + description: "Large-scale Drizzle Zod fixture", + }), + target({ + id: "next-app-ignore-at-scale", + outputPath: "next/app-router/ignore-routes-at-scale", + framework: "next-app-router", + flavor: "filtered", + operationIdPrefix: "ignoreScale", + templateSource: "next/app-router/ignore-routes", + copyShowcaseRoutesFrom: "next/app-router/ignore-routes/src/app/api", + schemaLayout: "src-types", + schemaDir: "./src", + schemaType: "typescript", + title: "Ignore Routes At Scale", + description: "Large-scale fixture with ignore route filtering", + includeOpenApiRoutes: false, + ignoreRoutes: ["/admin/*", "/debug", "/public/info"], + }), + target({ + id: "next-pages-core-at-scale", + outputPath: "next/pages-router/core-flow-at-scale", + framework: "next-pages-router", + flavor: "typescript", + operationIdPrefix: "pagesScale", + templateSource: "next/pages-router/core-flow", + schemaLayout: "schemas-root", + schemaDir: "./schemas", + schemaType: "typescript", + title: "Pages Router Core Flow At Scale", + description: "Large-scale pages router TypeScript fixture", + apiDir: "./pages/api", + }), + target({ + id: "next-pages-zod-at-scale", + outputPath: "next/pages-router/zod-flow-at-scale", + framework: "next-pages-router", + flavor: "zod", + operationIdPrefix: "pagesZodScale", + templateSource: "next/pages-router/zod-flow", + schemaLayout: "schemas-root", + schemaDir: "./schemas", + schemaType: "zod", + title: "Pages Router Zod Flow At Scale", + description: "Large-scale pages router Zod fixture", + apiDir: "./pages/api", + }), + target({ + id: "tanstack-core-at-scale", + outputPath: "tanstack/core-flow-at-scale", + framework: "tanstack", + flavor: "typescript", + operationIdPrefix: "tanstackScale", + templateSource: "tanstack/core-flow", + schemaLayout: "src-types", + schemaDir: "./src", + schemaType: "typescript", + title: "TanStack Core Flow At Scale", + description: "Large-scale TanStack fixture", + apiDir: "./src/routes/api", + }), + target({ + id: "react-router-core-at-scale", + outputPath: "react-router/core-flow-at-scale", + framework: "react-router", + flavor: "typescript", + operationIdPrefix: "reactRouterScale", + templateSource: "react-router/core-flow", + schemaLayout: "src-types", + schemaDir: "./src", + schemaType: "typescript", + title: "React Router Core Flow At Scale", + description: "Large-scale React Router fixture", + apiDir: "./src/routes/api", + }), +]; + +export type AppTarget = ScaleTarget & { + appDir: string; +}; + +export const APP_TARGETS: AppTarget[] = [ + appTarget( + "next-app-typescript", + "next-app-router", + "typescript", + "scaleApp", + "src-types", + "./src/types", + "typescript", + ), + appTarget( + "next-app-zod", + "next-app-router", + "zod", + "zodAppScale", + "src-schemas", + "./src/schemas", + "zod", + ), + appTarget( + "next-app-mixed-schemas", + "next-app-router", + "mixed", + "mixedAppScale", + "src-types", + "./src", + ["typescript", "zod"], + ), + appTarget( + "next-app-drizzle-zod", + "next-app-router", + "drizzle-zod", + "drizzleAppScale", + "src-schemas", + "./src/schemas", + "zod", + ), + appTarget( + "next-pages-router", + "next-pages-router", + "typescript", + "pagesAppScale", + "schemas-root", + "./schemas", + "typescript", + ), + appTarget( + "tanstack-app", + "tanstack", + "typescript", + "tanstackAppScale", + "src-types", + "./src", + "typescript", + ), + appTarget( + "react-router-app", + "react-router", + "typescript", + "reactRouterAppScale", + "src-types", + "./src", + "typescript", + ), + appTarget( + "next-app-swagger", + "next-app-router", + "zod", + "swaggerAppScale", + "src-schemas", + "./src/schemas", + "zod", + ), + appTarget( + "next-app-next-config", + "next-app-router", + "typescript", + "nextConfigAppScale", + "src-schemas", + "./src/schemas", + "typescript", + ), + appTarget( + "next-app-ts-config", + "next-app-router", + "typescript", + "tsConfigAppScale", + "src-schemas", + "./src/schemas", + "typescript", + ), + appTarget( + "next-app-adapter", + "next-app-router", + "typescript", + "adapterAppScale", + "src-schemas", + "./src/schemas", + "typescript", + ), + appTarget( + "next-app-scalar", + "next-app-router", + "zod", + "scalarAppScale", + "src-schemas", + "./src/schemas", + "zod", + ), + appTarget( + "next-app-sandbox", + "next-app-router", + "typescript", + "sandboxAppScale", + "src-schemas", + "./src/schemas", + "typescript", + ), +]; + +function target(config: { + id: string; + outputPath: string; + framework: FrameworkKind; + flavor: SchemaFlavor | "typescript" | "filtered" | "mixed"; + operationIdPrefix: string; + templateSource?: string; + copySchemasFrom?: string; + copyShowcaseRoutesFrom?: string; + schemaLayout: SchemaLayout; + schemaDir: string; + schemaType: SchemaFlavor | SchemaFlavor[] | "typescript"; + title: string; + description: string; + apiDir?: string; + includeOpenApiRoutes?: boolean; + ignoreRoutes?: string[]; +}): ScaleTarget { + return { + id: config.id, + outputPath: path.join(fixtureRoot, config.outputPath), + framework: config.framework, + flavor: config.flavor, + operationIdPrefix: config.operationIdPrefix, + schemaLayout: config.schemaLayout, + copySchemasFrom: config.copySchemasFrom + ? path.join(fixtureRoot, config.copySchemasFrom) + : undefined, + copyShowcaseRoutesFrom: config.copyShowcaseRoutesFrom + ? path.join(fixtureRoot, config.copyShowcaseRoutesFrom) + : undefined, + cleanGeneratedSubdirs: getCleanDirs(config.framework, config.schemaLayout), + template: { + title: config.title, + description: config.description, + framework: config.framework, + schemaType: config.schemaType, + apiDir: config.apiDir ?? defaultApiDir(config.framework), + schemaDir: config.schemaDir, + includeOpenApiRoutes: config.includeOpenApiRoutes, + ignoreRoutes: config.ignoreRoutes, + templateSource: config.templateSource + ? path.join(fixtureRoot, config.templateSource) + : undefined, + }, + }; +} + +function appTarget( + appName: string, + framework: FrameworkKind, + flavor: SchemaFlavor | "mixed", + operationIdPrefix: string, + schemaLayout: SchemaLayout, + schemaDir: string, + schemaType: SchemaFlavor | SchemaFlavor[] | "typescript", +): AppTarget { + const appDir = path.join(repoRoot, "apps", appName); + return { + id: appName, + appDir, + outputPath: appDir, + framework, + flavor, + operationIdPrefix, + schemaLayout, + cleanGeneratedSubdirs: getCleanDirs(framework, schemaLayout), + template: { + title: `${appName} generated scale routes`, + description: `Generated scale routes for ${appName}`, + framework, + schemaType, + apiDir: defaultApiDir(framework), + schemaDir, + }, + }; +} + +function defaultApiDir(framework: FrameworkKind): string { + switch (framework) { + case "next-app-router": + return "./src/app/api"; + case "next-pages-router": + return "./pages/api"; + case "tanstack": + case "react-router": + return "./src/routes/api"; + default: { + const neverFramework: never = framework; + return neverFramework; + } + } +} + +function getCleanDirs(framework: FrameworkKind, schemaLayout: SchemaLayout): string[] { + const schemaDirs = + schemaLayout === "schemas-root" + ? ["schemas/generated"] + : schemaLayout === "src-schemas" + ? ["src/schemas/generated", "src/db/schema.generated.ts"] + : ["src/types/generated", "src/schemas/generated"]; + + switch (framework) { + case "next-app-router": + return ["src/app/api/generated", ...schemaDirs]; + case "next-pages-router": + return ["pages/api/generated", ...schemaDirs.filter((dir) => dir.startsWith("schemas"))]; + case "tanstack": + case "react-router": + return ["src/routes/api/generated", ...schemaDirs]; + default: { + const neverFramework: never = framework; + return neverFramework; + } + } +} diff --git a/scripts/fixture-scale/templates.mts b/scripts/fixture-scale/templates.mts new file mode 100644 index 00000000..c7ef703c --- /dev/null +++ b/scripts/fixture-scale/templates.mts @@ -0,0 +1,88 @@ +import fs from "node:fs"; +import path from "node:path"; + +import type { FrameworkKind } from "./routes.mts"; +import type { SchemaFlavor } from "./schemas.mts"; +import type { TemplateOptions } from "./targets.mts"; +import { writeJsonFile } from "./utils.mts"; + +type OpenApiVersion = "3.0" | "3.1" | "3.2"; + +type TemplateOptions = { + title: string; + description: string; + framework?: FrameworkKind; + schemaType: SchemaFlavor | SchemaFlavor[] | "typescript"; + apiDir: string; + schemaDir: string; + includeOpenApiRoutes?: boolean; + ignoreRoutes?: string[]; + templateSource?: string; + extra?: Record; +}; + +export function emitOpenApiTemplates( + outputDir: string, + options: TemplateOptions, + dryRun: boolean, +): string[] { + const written: string[] = []; + const versions: OpenApiVersion[] = ["3.0", "3.1", "3.2"]; + + for (const version of versions) { + const baseTemplate = options.templateSource + ? (JSON.parse( + fs.readFileSync( + path.join(options.templateSource, "templates", `openapi-${version}.json`), + "utf-8", + ), + ) as Record) + : {}; + const template = { + ...baseTemplate, + openapi: `${version}.0`, + info: { + title: options.title, + version: "1.0.0", + description: options.description, + }, + apiDir: options.apiDir, + schemaDir: options.schemaDir, + schemaType: options.schemaType, + docsUrl: "api-docs", + ui: "scalar", + outputDir: "./public", + outputFile: "openapi.json", + includeOpenApiRoutes: options.includeOpenApiRoutes ?? true, + debug: false, + ...(options.ignoreRoutes ? { ignoreRoutes: options.ignoreRoutes } : {}), + ...(options.framework === "tanstack" + ? { + framework: { kind: "tanstack" }, + defaultResponseSet: "common", + responseSets: { + common: ["400", "500"], + auth: ["401", "403"], + }, + } + : {}), + ...(options.framework === "react-router" + ? { + framework: { kind: "reactrouter" }, + defaultResponseSet: "common", + responseSets: { + common: ["400", "500"], + auth: ["401", "403"], + }, + } + : {}), + ...options.extra, + }; + + const filePath = path.join(outputDir, "templates", `openapi-${version}.json`); + writeJsonFile(filePath, template, dryRun); + written.push(filePath); + } + + return written; +} diff --git a/scripts/fixture-scale/utils.mts b/scripts/fixture-scale/utils.mts new file mode 100644 index 00000000..1adb64a2 --- /dev/null +++ b/scripts/fixture-scale/utils.mts @@ -0,0 +1,64 @@ +import fs from "node:fs"; +import path from "node:path"; + +export function ensureDir(dirPath: string): void { + fs.mkdirSync(dirPath, { recursive: true }); +} + +export function writeTextFile(filePath: string, contents: string, dryRun: boolean): void { + if (dryRun) { + return; + } + ensureDir(path.dirname(filePath)); + fs.writeFileSync(filePath, contents); +} + +export function writeJsonFile(filePath: string, value: unknown, dryRun: boolean): void { + writeTextFile(filePath, `${JSON.stringify(value, null, 2)}\n`, dryRun); +} + +export function removeDirIfExists(dirPath: string, dryRun: boolean): void { + if (!fs.existsSync(dirPath)) { + return; + } + if (dryRun) { + return; + } + fs.rmSync(dirPath, { recursive: true, force: true }); +} + +export function copyDirectory(sourceDir: string, targetDir: string, dryRun: boolean): void { + if (!fs.existsSync(sourceDir)) { + throw new Error(`Missing source directory: ${sourceDir}`); + } + if (dryRun) { + return; + } + ensureDir(targetDir); + for (const entry of fs.readdirSync(sourceDir, { withFileTypes: true })) { + const sourcePath = path.join(sourceDir, entry.name); + const targetPath = path.join(targetDir, entry.name); + if (entry.isDirectory()) { + copyDirectory(sourcePath, targetPath, dryRun); + continue; + } + ensureDir(path.dirname(targetPath)); + fs.copyFileSync(sourcePath, targetPath); + } +} + +export function listFilesRecursive(rootDir: string): string[] { + if (!fs.existsSync(rootDir)) { + return []; + } + const files: string[] = []; + for (const entry of fs.readdirSync(rootDir, { withFileTypes: true })) { + const entryPath = path.join(rootDir, entry.name); + if (entry.isDirectory()) { + files.push(...listFilesRecursive(entryPath)); + continue; + } + files.push(entryPath); + } + return files; +} diff --git a/scripts/generate-scale-fixtures.mts b/scripts/generate-scale-fixtures.mts new file mode 100644 index 00000000..73dd1442 --- /dev/null +++ b/scripts/generate-scale-fixtures.mts @@ -0,0 +1,64 @@ +#!/usr/bin/env node +import process from "node:process"; + +import { getTotalRouteCount } from "./fixture-scale/domain.mts"; +import { + generateAppTarget, + generateScaleTarget, + writeGeneratedManifest, +} from "./fixture-scale/emit.mts"; +import { APP_TARGETS, FIXTURE_TARGETS } from "./fixture-scale/targets.mts"; + +type TargetKind = "fixtures" | "apps" | "all"; + +function parseArgs(argv: string[]) { + let target: TargetKind = "all"; + let dryRun = false; + let clean = false; + + for (const arg of argv) { + if (arg === "--dry-run") { + dryRun = true; + } else if (arg === "--clean") { + clean = true; + } else if (arg.startsWith("--target=")) { + const value = arg.slice("--target=".length) as TargetKind; + target = value; + } + } + + return { target, dryRun, clean }; +} + +function main() { + const { target, dryRun, clean } = parseArgs(process.argv.slice(2)); + const expectedRoutes = getTotalRouteCount(); + + if (expectedRoutes !== 125) { + throw new Error(`Expected 125 generated routes, got ${expectedRoutes}.`); + } + + let written = 0; + + if (target === "fixtures" || target === "all") { + for (const fixtureTarget of FIXTURE_TARGETS) { + if (clean) { + console.log(`Cleaning ${fixtureTarget.id}`); + } + written += generateScaleTarget(fixtureTarget, dryRun); + writeGeneratedManifest(fixtureTarget, dryRun); + console.log(`${dryRun ? "[dry-run] " : ""}Generated fixture ${fixtureTarget.id}`); + } + } + + if (target === "apps" || target === "all") { + for (const appTarget of APP_TARGETS) { + generateAppTarget(appTarget, dryRun); + console.log(`${dryRun ? "[dry-run] " : ""}Generated app scale content ${appTarget.id}`); + } + } + + console.log(`Scale generation complete (${written} files written for fixtures).`); +} + +main(); diff --git a/tests/bench/cli/cli-generate.bench.ts b/tests/bench/cli/cli-generate.bench.ts new file mode 100644 index 00000000..545158a6 --- /dev/null +++ b/tests/bench/cli/cli-generate.bench.ts @@ -0,0 +1,168 @@ +import { execFileSync } from "node:child_process"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { afterAll, bench, describe } from "vitest"; + +import { + cleanupBenchProjects, + createBenchProjects, + getBenchmarkScenarios, + type BenchProject, +} from "../generator/benchmark-matrix.js"; + +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../.."); +const cliPath = path.join(repoRoot, "packages", "next-openapi-gen", "bin", "cli.mjs"); +const builtCliPath = path.join(repoRoot, "packages", "next-openapi-gen", "dist", "cli.js"); +const scenarioIds = new Set(["next-app-core-3.2", "next-app-zod-full-3.2", "next-app-ts-full-3.2"]); +const scenarios = getBenchmarkScenarios("cold").filter((scenario) => scenarioIds.has(scenario.id)); +const subprocessBenchOptions = { + iterations: 5, + time: 20_000, + warmupIterations: 0, + warmupTime: 0, +}; +let projects: Map | undefined; + +function runCli(args: string[], cwd: string, env: NodeJS.ProcessEnv = {}): void { + execFileSync(process.execPath, [cliPath, ...args], { + cwd, + env: { + ...process.env, + ...env, + }, + stdio: "ignore", + }); +} + +function getProject(projects: Map, id: string): BenchProject { + const project = projects.get(id); + if (!project) { + throw new Error(`Missing benchmark project "${id}".`); + } + return project; +} + +function materializeModernJsonConfig(project: BenchProject): string { + const modernConfigPath = path.join(project.project.root, "openapi-gen.config.json"); + fs.copyFileSync(project.templatePath, modernConfigPath); + return modernConfigPath; +} + +function getProjects(): Map { + if (projects) { + return projects; + } + + projects = createBenchProjects(scenarios); + for (const project of projects.values()) { + materializeModernJsonConfig(project); + } + return projects; +} + +function createFakePackageManagerBin(): string { + const binDir = fs.mkdtempSync(path.join(os.tmpdir(), "nxog-fake-pm-")); + const pnpmPath = path.join(binDir, "pnpm"); + fs.writeFileSync(pnpmPath, "#!/usr/bin/env sh\nexit 0\n"); + fs.chmodSync(pnpmPath, 0o755); + return binDir; +} + +function withTempInitProject(callback: (cwd: string, env: NodeJS.ProcessEnv) => void): void { + const cwd = fs.mkdtempSync(path.join(os.tmpdir(), "nxog-cli-init-")); + const fakeBin = createFakePackageManagerBin(); + try { + fs.writeFileSync( + path.join(cwd, "package.json"), + `${JSON.stringify({ name: "cli-init-bench", packageManager: "pnpm@11.9.0" }, null, 2)}\n`, + ); + callback(cwd, { + PATH: `${fakeBin}${path.delimiter}${process.env.PATH ?? ""}`, + }); + } finally { + fs.rmSync(cwd, { recursive: true, force: true }); + fs.rmSync(fakeBin, { recursive: true, force: true }); + } +} + +describe.skipIf(!fs.existsSync(builtCliPath))("openapi-gen CLI subprocess benchmarks", () => { + afterAll(() => { + if (projects) { + cleanupBenchProjects(projects.values()); + } + }); + + bench( + "generate — default config discovery", + () => { + runCli(["generate"], getProject(getProjects(), "next-app-core-3.2").project.root); + }, + subprocessBenchOptions, + ); + + bench( + "generate — explicit modern JSON config", + () => { + runCli( + ["generate", "-c", "openapi-gen.config.json"], + getProject(getProjects(), "next-app-zod-full-3.2").project.root, + ); + }, + subprocessBenchOptions, + ); + + bench( + "generate — legacy template alias", + () => { + runCli( + ["generate", "-t", "next.openapi.json"], + getProject(getProjects(), "next-app-ts-full-3.2").project.root, + ); + }, + subprocessBenchOptions, + ); + + bench( + "generate — fail-on warning", + () => { + runCli( + ["generate", "-c", "openapi-gen.config.json", "--fail-on", "never"], + getProject(getProjects(), "next-app-core-3.2").project.root, + ); + }, + subprocessBenchOptions, + ); + + bench( + "generate — unchanged disk cache hit", + () => { + const root = getProject(getProjects(), "next-app-core-3.2").project.root; + runCli(["generate", "-c", "openapi-gen.config.json"], root); + runCli(["generate", "-c", "openapi-gen.config.json"], root); + }, + subprocessBenchOptions, + ); + + bench( + "init — next scalar zod", + () => { + withTempInitProject((cwd, env) => { + runCli(["init", "-f", "next", "-i", "scalar", "-s", "zod"], cwd, env); + }); + }, + subprocessBenchOptions, + ); + + bench( + "init — react-router no UI typescript", + () => { + withTempInitProject((cwd, env) => { + runCli(["init", "-f", "react-router", "-i", "none", "-s", "typescript"], cwd, env); + }); + }, + subprocessBenchOptions, + ); +}); diff --git a/tests/bench/cli/cli-watch.test.ts b/tests/bench/cli/cli-watch.test.ts new file mode 100644 index 00000000..25e73190 --- /dev/null +++ b/tests/bench/cli/cli-watch.test.ts @@ -0,0 +1,98 @@ +import { spawn } from "node:child_process"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { afterAll, beforeAll, describe, expect, it } from "vitest"; + +import { + cleanupBenchProjects, + createBenchProjects, + getBenchmarkScenarios, + type BenchProject, +} from "../generator/benchmark-matrix.js"; + +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../.."); +const cliPath = path.join(repoRoot, "packages", "next-openapi-gen", "bin", "cli.mjs"); +const builtCliPath = path.join(repoRoot, "packages", "next-openapi-gen", "dist", "cli.js"); + +function waitForOutput(getOutput: () => string, pattern: RegExp, timeoutMs: number): Promise { + return waitForCondition(() => pattern.test(getOutput()), timeoutMs, `output matching ${pattern}`); +} + +function waitForCondition( + condition: () => boolean, + timeoutMs: number, + description: string, +): Promise { + const startedAt = performance.now(); + return new Promise((resolve, reject) => { + const interval = setInterval(() => { + if (condition()) { + clearInterval(interval); + resolve(); + return; + } + + if (performance.now() - startedAt > timeoutMs) { + clearInterval(interval); + reject(new Error(`Timed out waiting for ${description}`)); + } + }, 25); + }); +} + +describe.skipIf(!fs.existsSync(builtCliPath))("openapi-gen CLI watch smoke", () => { + let projects: Map; + + beforeAll(() => { + const scenario = getBenchmarkScenarios("cold").find(({ id }) => id === "next-app-core-3.2"); + if (!scenario) { + throw new Error("Missing next-app-core-3.2 benchmark scenario."); + } + projects = createBenchProjects([scenario]); + }); + + afterAll(() => { + cleanupBenchProjects(projects.values()); + }); + + it("regenerates after a route file changes", async () => { + const project = projects.get("next-app-core-3.2")!; + let output = ""; + const child = spawn(process.execPath, [cliPath, "generate", "-w"], { + cwd: project.project.root, + env: { + ...process.env, + FORCE_COLOR: "0", + }, + stdio: ["ignore", "pipe", "pipe"], + }); + child.stdout.on("data", (chunk) => { + output += String(chunk); + }); + child.stderr.on("data", (chunk) => { + output += String(chunk); + }); + + try { + await waitForOutput(() => output, /Watching for route and schema changes/, 10_000); + + const changedRoute = path.join(project.project.root, "src/app/api/search/route.ts"); + const before = output.match(/Generated \d+ artifact\(s\)\./g)?.length ?? 0; + fs.appendFileSync(changedRoute, "\n// benchmark watch touch\n"); + + const startedAt = performance.now(); + await waitForCondition( + () => (output.match(/Generated \d+ artifact\(s\)\./g)?.length ?? 0) > before, + 10_000, + "watch regeneration", + ); + const elapsedMs = performance.now() - startedAt; + + expect(elapsedMs).toBeGreaterThan(0); + } finally { + child.kill("SIGTERM"); + } + }, 20_000); +}); diff --git a/tests/bench/generator/baseline.json b/tests/bench/generator/baseline.json new file mode 100644 index 00000000..c5b23330 --- /dev/null +++ b/tests/bench/generator/baseline.json @@ -0,0 +1,3974 @@ +{ + "generatedAt": "2026-07-05T20:57:38.103Z", + "iterations": 3, + "machine": { + "arch": "arm64", + "cpus": 1, + "model": "unknown", + "node": "v25.0.0", + "platform": "darwin", + "release": "25.5.0" + }, + "scenarios": [ + { + "id": "next-app-core-3.0", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.05, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.05, + "scanRouteFilesMs": 1.305, + "deriveRoutePathMs": 0.199, + "filterRouteCandidatesMs": 0.022, + "sourcePrecheckMs": 0.447, + "readRouteFilesMs": 0.115, + "parseRouteFilesMs": 3.557, + "analyzeRouteFilesMs": 4.594, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 8.317, + "registerRouteMs": 103.708, + "getSchemaContentMs": 55.483, + "createRequestParamsMs": 0.336, + "createRequestBodyMs": 0, + "processResponsesMs": 46.945, + "createResponseSchemaMs": 0, + "buildOperationsMs": 103.738, + "sortAndMergePathsMs": 0.312, + "buildPathsMs": 0.312, + "defaultComponentsAndErrorsMs": 0.117, + "mergeSchemasMs": 0.371, + "finalizeDocumentMs": 3.362, + "totalMs": 118.406, + "scanRoutesMs": 113.36 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 113.36 + }, + { + "name": "buildOperationsMs", + "ms": 103.738 + }, + { + "name": "registerRouteMs", + "ms": 103.708 + }, + { + "name": "getSchemaContentMs", + "ms": 55.483 + }, + { + "name": "processResponsesMs", + "ms": 46.945 + } + ] + }, + { + "id": "next-app-core-3.0", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.026, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.026, + "scanRouteFilesMs": 0.051, + "deriveRoutePathMs": 0.14, + "filterRouteCandidatesMs": 0.007, + "sourcePrecheckMs": 0.248, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 2.296, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 2.395, + "registerRouteMs": 85.871, + "getSchemaContentMs": 41.059, + "createRequestParamsMs": 0.232, + "createRequestBodyMs": 0, + "processResponsesMs": 44.039, + "createResponseSchemaMs": 0, + "buildOperationsMs": 85.889, + "sortAndMergePathsMs": 0.197, + "buildPathsMs": 0.197, + "defaultComponentsAndErrorsMs": 0.056, + "mergeSchemasMs": 0.256, + "finalizeDocumentMs": 1.864, + "totalMs": 91.196, + "scanRoutesMs": 88.335 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 88.335 + }, + { + "name": "buildOperationsMs", + "ms": 85.889 + }, + { + "name": "registerRouteMs", + "ms": 85.871 + }, + { + "name": "processResponsesMs", + "ms": 44.039 + }, + { + "name": "getSchemaContentMs", + "ms": 41.059 + } + ] + }, + { + "id": "next-app-core-3.1", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.034, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.034, + "scanRouteFilesMs": 0.977, + "deriveRoutePathMs": 0.117, + "filterRouteCandidatesMs": 0.006, + "sourcePrecheckMs": 0.341, + "readRouteFilesMs": 0.121, + "parseRouteFilesMs": 0.564, + "analyzeRouteFilesMs": 2.458, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 3.122, + "registerRouteMs": 91.207, + "getSchemaContentMs": 48.103, + "createRequestParamsMs": 0.235, + "createRequestBodyMs": 0, + "processResponsesMs": 42.368, + "createResponseSchemaMs": 0, + "buildOperationsMs": 91.232, + "sortAndMergePathsMs": 0.191, + "buildPathsMs": 0.191, + "defaultComponentsAndErrorsMs": 0.063, + "mergeSchemasMs": 0.243, + "finalizeDocumentMs": 2.004, + "totalMs": 98.389, + "scanRoutesMs": 95.33 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 95.33 + }, + { + "name": "buildOperationsMs", + "ms": 91.232 + }, + { + "name": "registerRouteMs", + "ms": 91.207 + }, + { + "name": "getSchemaContentMs", + "ms": 48.103 + }, + { + "name": "processResponsesMs", + "ms": 42.368 + } + ] + }, + { + "id": "next-app-core-3.1", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.028, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.028, + "scanRouteFilesMs": 0.045, + "deriveRoutePathMs": 0.131, + "filterRouteCandidatesMs": 0.008, + "sourcePrecheckMs": 0.231, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 2.385, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 2.47, + "registerRouteMs": 86.673, + "getSchemaContentMs": 42.021, + "createRequestParamsMs": 0.24, + "createRequestBodyMs": 0, + "processResponsesMs": 43.899, + "createResponseSchemaMs": 0, + "buildOperationsMs": 86.699, + "sortAndMergePathsMs": 0.182, + "buildPathsMs": 0.182, + "defaultComponentsAndErrorsMs": 0.053, + "mergeSchemasMs": 0.244, + "finalizeDocumentMs": 2.084, + "totalMs": 92.227, + "scanRoutesMs": 89.213 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 89.213 + }, + { + "name": "buildOperationsMs", + "ms": 86.699 + }, + { + "name": "registerRouteMs", + "ms": 86.673 + }, + { + "name": "processResponsesMs", + "ms": 43.899 + }, + { + "name": "getSchemaContentMs", + "ms": 42.021 + } + ] + }, + { + "id": "next-app-core-3.2", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.028, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.028, + "scanRouteFilesMs": 0.914, + "deriveRoutePathMs": 0.123, + "filterRouteCandidatesMs": 0.006, + "sourcePrecheckMs": 0.366, + "readRouteFilesMs": 0.152, + "parseRouteFilesMs": 0.52, + "analyzeRouteFilesMs": 2.59, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 3.213, + "registerRouteMs": 87.77, + "getSchemaContentMs": 44.583, + "createRequestParamsMs": 0.192, + "createRequestBodyMs": 0, + "processResponsesMs": 42.516, + "createResponseSchemaMs": 0, + "buildOperationsMs": 87.787, + "sortAndMergePathsMs": 0.178, + "buildPathsMs": 0.178, + "defaultComponentsAndErrorsMs": 0.048, + "mergeSchemasMs": 0.264, + "finalizeDocumentMs": 1.729, + "totalMs": 94.704, + "scanRoutesMs": 91.914 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 91.914 + }, + { + "name": "buildOperationsMs", + "ms": 87.787 + }, + { + "name": "registerRouteMs", + "ms": 87.77 + }, + { + "name": "getSchemaContentMs", + "ms": 44.583 + }, + { + "name": "processResponsesMs", + "ms": 42.516 + } + ] + }, + { + "id": "next-app-core-3.2", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.028, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.028, + "scanRouteFilesMs": 0.041, + "deriveRoutePathMs": 0.119, + "filterRouteCandidatesMs": 0.006, + "sourcePrecheckMs": 0.214, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 2.166, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 2.259, + "registerRouteMs": 81.598, + "getSchemaContentMs": 40.185, + "createRequestParamsMs": 0.212, + "createRequestBodyMs": 0, + "processResponsesMs": 40.731, + "createResponseSchemaMs": 0, + "buildOperationsMs": 81.615, + "sortAndMergePathsMs": 0.167, + "buildPathsMs": 0.167, + "defaultComponentsAndErrorsMs": 0.043, + "mergeSchemasMs": 0.226, + "finalizeDocumentMs": 1.728, + "totalMs": 86.499, + "scanRoutesMs": 83.915 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 83.915 + }, + { + "name": "buildOperationsMs", + "ms": 81.615 + }, + { + "name": "registerRouteMs", + "ms": 81.598 + }, + { + "name": "processResponsesMs", + "ms": 40.731 + }, + { + "name": "getSchemaContentMs", + "ms": 40.185 + } + ] + }, + { + "id": "next-pages-core-3.0", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.097, + "deriveRoutePathMs": 0.032, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.072, + "readRouteFilesMs": 0.01, + "parseRouteFilesMs": 0.067, + "analyzeRouteFilesMs": 0.287, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.435, + "registerRouteMs": 0.6, + "getSchemaContentMs": 0.44, + "createRequestParamsMs": 0.024, + "createRequestBodyMs": 0, + "processResponsesMs": 0.076, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.601, + "sortAndMergePathsMs": 0.012, + "buildPathsMs": 0.012, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.039, + "finalizeDocumentMs": 0.22, + "totalMs": 1.552, + "scanRoutesMs": 1.133 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.133 + }, + { + "name": "buildOperationsMs", + "ms": 0.601 + }, + { + "name": "registerRouteMs", + "ms": 0.6 + }, + { + "name": "getSchemaContentMs", + "ms": 0.44 + }, + { + "name": "processRouteFilesMs", + "ms": 0.435 + } + ] + }, + { + "id": "next-pages-core-3.0", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.006, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.018, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.103, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.113, + "registerRouteMs": 0.227, + "getSchemaContentMs": 0.131, + "createRequestParamsMs": 0.015, + "createRequestBodyMs": 0, + "processResponsesMs": 0.055, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.228, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.026, + "finalizeDocumentMs": 0.201, + "totalMs": 0.629, + "scanRoutesMs": 0.345 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.345 + }, + { + "name": "buildOperationsMs", + "ms": 0.228 + }, + { + "name": "registerRouteMs", + "ms": 0.227 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.201 + }, + { + "name": "getSchemaContentMs", + "ms": 0.131 + } + ] + }, + { + "id": "next-pages-core-3.1", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.069, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.017, + "readRouteFilesMs": 0.007, + "parseRouteFilesMs": 0.022, + "analyzeRouteFilesMs": 0.11, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.143, + "registerRouteMs": 0.503, + "getSchemaContentMs": 0.393, + "createRequestParamsMs": 0.017, + "createRequestBodyMs": 0, + "processResponsesMs": 0.057, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.504, + "sortAndMergePathsMs": 0.008, + "buildPathsMs": 0.008, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.034, + "finalizeDocumentMs": 0.195, + "totalMs": 1.005, + "scanRoutesMs": 0.716 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.716 + }, + { + "name": "buildOperationsMs", + "ms": 0.504 + }, + { + "name": "registerRouteMs", + "ms": 0.503 + }, + { + "name": "getSchemaContentMs", + "ms": 0.393 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.195 + } + ] + }, + { + "id": "next-pages-core-3.1", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.003, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.008, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.08, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.087, + "registerRouteMs": 0.201, + "getSchemaContentMs": 0.114, + "createRequestParamsMs": 0.013, + "createRequestBodyMs": 0, + "processResponsesMs": 0.053, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.202, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.027, + "finalizeDocumentMs": 0.175, + "totalMs": 0.533, + "scanRoutesMs": 0.291 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.291 + }, + { + "name": "buildOperationsMs", + "ms": 0.202 + }, + { + "name": "registerRouteMs", + "ms": 0.201 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.175 + }, + { + "name": "getSchemaContentMs", + "ms": 0.114 + } + ] + }, + { + "id": "next-pages-core-3.2", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.064, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.013, + "readRouteFilesMs": 0.006, + "parseRouteFilesMs": 0.009, + "analyzeRouteFilesMs": 0.093, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.109, + "registerRouteMs": 0.462, + "getSchemaContentMs": 0.356, + "createRequestParamsMs": 0.017, + "createRequestBodyMs": 0, + "processResponsesMs": 0.056, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.464, + "sortAndMergePathsMs": 0.01, + "buildPathsMs": 0.01, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.038, + "finalizeDocumentMs": 0.189, + "totalMs": 0.92, + "scanRoutesMs": 0.638 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.638 + }, + { + "name": "buildOperationsMs", + "ms": 0.464 + }, + { + "name": "registerRouteMs", + "ms": 0.462 + }, + { + "name": "getSchemaContentMs", + "ms": 0.356 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.189 + } + ] + }, + { + "id": "next-pages-core-3.2", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.008, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.008, + "scanRouteFilesMs": 0.003, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.009, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.088, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.096, + "registerRouteMs": 0.204, + "getSchemaContentMs": 0.119, + "createRequestParamsMs": 0.013, + "createRequestBodyMs": 0, + "processResponsesMs": 0.05, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.204, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.024, + "finalizeDocumentMs": 0.172, + "totalMs": 0.548, + "scanRoutesMs": 0.304 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.304 + }, + { + "name": "registerRouteMs", + "ms": 0.204 + }, + { + "name": "buildOperationsMs", + "ms": 0.204 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.172 + }, + { + "name": "getSchemaContentMs", + "ms": 0.119 + } + ] + }, + { + "id": "next-pages-zod-3.0", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.008, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.008, + "scanRouteFilesMs": 0.03, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.011, + "readRouteFilesMs": 0.006, + "parseRouteFilesMs": 0.009, + "analyzeRouteFilesMs": 0.034, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.049, + "registerRouteMs": 0.268, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.26, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.269, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.006, + "finalizeDocumentMs": 0.065, + "totalMs": 0.465, + "scanRoutesMs": 0.347 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.347 + }, + { + "name": "buildOperationsMs", + "ms": 0.269 + }, + { + "name": "registerRouteMs", + "ms": 0.268 + }, + { + "name": "processResponsesMs", + "ms": 0.26 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.065 + } + ] + }, + { + "id": "next-pages-zod-3.0", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.002, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.007, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.039, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.045, + "registerRouteMs": 0.281, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.272, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.282, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.004, + "finalizeDocumentMs": 0.061, + "totalMs": 0.435, + "scanRoutesMs": 0.329 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.329 + }, + { + "name": "buildOperationsMs", + "ms": 0.282 + }, + { + "name": "registerRouteMs", + "ms": 0.281 + }, + { + "name": "processResponsesMs", + "ms": 0.272 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.061 + } + ] + }, + { + "id": "next-pages-zod-3.1", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.026, + "deriveRoutePathMs": 0.002, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.01, + "readRouteFilesMs": 0.006, + "parseRouteFilesMs": 0.007, + "analyzeRouteFilesMs": 0.029, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.042, + "registerRouteMs": 0.216, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.21, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.216, + "sortAndMergePathsMs": 0.005, + "buildPathsMs": 0.005, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.003, + "finalizeDocumentMs": 0.063, + "totalMs": 0.386, + "scanRoutesMs": 0.284 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.284 + }, + { + "name": "registerRouteMs", + "ms": 0.216 + }, + { + "name": "buildOperationsMs", + "ms": 0.216 + }, + { + "name": "processResponsesMs", + "ms": 0.21 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.063 + } + ] + }, + { + "id": "next-pages-zod-3.1", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.002, + "deriveRoutePathMs": 0.002, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.005, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.024, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.029, + "registerRouteMs": 0.218, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.213, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.219, + "sortAndMergePathsMs": 0.005, + "buildPathsMs": 0.005, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.003, + "finalizeDocumentMs": 0.055, + "totalMs": 0.336, + "scanRoutesMs": 0.25 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.25 + }, + { + "name": "buildOperationsMs", + "ms": 0.219 + }, + { + "name": "registerRouteMs", + "ms": 0.218 + }, + { + "name": "processResponsesMs", + "ms": 0.213 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.055 + } + ] + }, + { + "id": "next-pages-zod-3.2", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.025, + "deriveRoutePathMs": 0.002, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.01, + "readRouteFilesMs": 0.006, + "parseRouteFilesMs": 0.006, + "analyzeRouteFilesMs": 0.029, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.041, + "registerRouteMs": 0.207, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.202, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.208, + "sortAndMergePathsMs": 0.005, + "buildPathsMs": 0.005, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.003, + "finalizeDocumentMs": 0.053, + "totalMs": 0.368, + "scanRoutesMs": 0.274 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.274 + }, + { + "name": "buildOperationsMs", + "ms": 0.208 + }, + { + "name": "registerRouteMs", + "ms": 0.207 + }, + { + "name": "processResponsesMs", + "ms": 0.202 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.053 + } + ] + }, + { + "id": "next-pages-zod-3.2", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.002, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.006, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.031, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.036, + "registerRouteMs": 0.236, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.229, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.236, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.004, + "finalizeDocumentMs": 0.061, + "totalMs": 0.373, + "scanRoutesMs": 0.274 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.274 + }, + { + "name": "registerRouteMs", + "ms": 0.236 + }, + { + "name": "buildOperationsMs", + "ms": 0.236 + }, + { + "name": "processResponsesMs", + "ms": 0.229 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.061 + } + ] + }, + { + "id": "next-app-mixed-3.0", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.009, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.009, + "scanRouteFilesMs": 0.126, + "deriveRoutePathMs": 0.01, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.028, + "readRouteFilesMs": 0.012, + "parseRouteFilesMs": 0.012, + "analyzeRouteFilesMs": 0.103, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.126, + "registerRouteMs": 2.517, + "getSchemaContentMs": 1.427, + "createRequestParamsMs": 0.014, + "createRequestBodyMs": 0, + "processResponsesMs": 1.043, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.519, + "sortAndMergePathsMs": 0.032, + "buildPathsMs": 0.032, + "defaultComponentsAndErrorsMs": 0.005, + "mergeSchemasMs": 0.046, + "finalizeDocumentMs": 0.247, + "totalMs": 3.169, + "scanRoutesMs": 2.771 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 2.771 + }, + { + "name": "buildOperationsMs", + "ms": 2.519 + }, + { + "name": "registerRouteMs", + "ms": 2.517 + }, + { + "name": "getSchemaContentMs", + "ms": 1.427 + }, + { + "name": "processResponsesMs", + "ms": 1.043 + } + ] + }, + { + "id": "next-app-mixed-3.0", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.008, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.008, + "scanRouteFilesMs": 0.005, + "deriveRoutePathMs": 0.008, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.016, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.084, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.095, + "registerRouteMs": 2.054, + "getSchemaContentMs": 1.209, + "createRequestParamsMs": 0.016, + "createRequestBodyMs": 0, + "processResponsesMs": 0.803, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.055, + "sortAndMergePathsMs": 0.028, + "buildPathsMs": 0.028, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.035, + "finalizeDocumentMs": 0.246, + "totalMs": 2.521, + "scanRoutesMs": 2.156 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 2.156 + }, + { + "name": "buildOperationsMs", + "ms": 2.055 + }, + { + "name": "registerRouteMs", + "ms": 2.054 + }, + { + "name": "getSchemaContentMs", + "ms": 1.209 + }, + { + "name": "processResponsesMs", + "ms": 0.803 + } + ] + }, + { + "id": "next-app-mixed-3.1", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.02, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.021, + "scanRouteFilesMs": 0.204, + "deriveRoutePathMs": 0.021, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.056, + "readRouteFilesMs": 0.028, + "parseRouteFilesMs": 0.074, + "analyzeRouteFilesMs": 0.238, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.329, + "registerRouteMs": 3.371, + "getSchemaContentMs": 2.461, + "createRequestParamsMs": 0.022, + "createRequestBodyMs": 0, + "processResponsesMs": 0.841, + "createResponseSchemaMs": 0, + "buildOperationsMs": 3.373, + "sortAndMergePathsMs": 0.049, + "buildPathsMs": 0.049, + "defaultComponentsAndErrorsMs": 0.006, + "mergeSchemasMs": 0.041, + "finalizeDocumentMs": 0.239, + "totalMs": 4.387, + "scanRoutesMs": 3.905 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 3.905 + }, + { + "name": "buildOperationsMs", + "ms": 3.373 + }, + { + "name": "registerRouteMs", + "ms": 3.371 + }, + { + "name": "getSchemaContentMs", + "ms": 2.461 + }, + { + "name": "processResponsesMs", + "ms": 0.841 + } + ] + }, + { + "id": "next-app-mixed-3.1", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.013, + "scanRouteFilesMs": 0.009, + "deriveRoutePathMs": 0.008, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.023, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.091, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.101, + "registerRouteMs": 2.024, + "getSchemaContentMs": 1.071, + "createRequestParamsMs": 0.011, + "createRequestBodyMs": 0, + "processResponsesMs": 0.914, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.026, + "sortAndMergePathsMs": 0.031, + "buildPathsMs": 0.031, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.041, + "finalizeDocumentMs": 0.245, + "totalMs": 2.525, + "scanRoutesMs": 2.136 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 2.136 + }, + { + "name": "buildOperationsMs", + "ms": 2.026 + }, + { + "name": "registerRouteMs", + "ms": 2.024 + }, + { + "name": "getSchemaContentMs", + "ms": 1.071 + }, + { + "name": "processResponsesMs", + "ms": 0.914 + } + ] + }, + { + "id": "next-app-mixed-3.2", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.096, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.027, + "readRouteFilesMs": 0.012, + "parseRouteFilesMs": 0.011, + "analyzeRouteFilesMs": 0.114, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.137, + "registerRouteMs": 2.37, + "getSchemaContentMs": 1.512, + "createRequestParamsMs": 0.017, + "createRequestBodyMs": 0, + "processResponsesMs": 0.809, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.372, + "sortAndMergePathsMs": 0.032, + "buildPathsMs": 0.032, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.037, + "finalizeDocumentMs": 0.231, + "totalMs": 2.974, + "scanRoutesMs": 2.605 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 2.605 + }, + { + "name": "buildOperationsMs", + "ms": 2.372 + }, + { + "name": "registerRouteMs", + "ms": 2.37 + }, + { + "name": "getSchemaContentMs", + "ms": 1.512 + }, + { + "name": "processResponsesMs", + "ms": 0.809 + } + ] + }, + { + "id": "next-app-mixed-3.2", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.005, + "deriveRoutePathMs": 0.01, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.014, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.074, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.084, + "registerRouteMs": 1.76, + "getSchemaContentMs": 0.978, + "createRequestParamsMs": 0.01, + "createRequestBodyMs": 0, + "processResponsesMs": 0.749, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.762, + "sortAndMergePathsMs": 0.025, + "buildPathsMs": 0.025, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.032, + "finalizeDocumentMs": 0.212, + "totalMs": 2.178, + "scanRoutesMs": 1.851 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.851 + }, + { + "name": "buildOperationsMs", + "ms": 1.762 + }, + { + "name": "registerRouteMs", + "ms": 1.76 + }, + { + "name": "getSchemaContentMs", + "ms": 0.978 + }, + { + "name": "processResponsesMs", + "ms": 0.749 + } + ] + }, + { + "id": "next-app-zod-3.0", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.097, + "deriveRoutePathMs": 0.005, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.012, + "readRouteFilesMs": 0.006, + "parseRouteFilesMs": 0.007, + "analyzeRouteFilesMs": 0.081, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.094, + "registerRouteMs": 2.011, + "getSchemaContentMs": 1.875, + "createRequestParamsMs": 0.021, + "createRequestBodyMs": 0, + "processResponsesMs": 0.097, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.011, + "sortAndMergePathsMs": 0.011, + "buildPathsMs": 0.011, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.043, + "finalizeDocumentMs": 0.171, + "totalMs": 2.48, + "scanRoutesMs": 2.202 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 2.202 + }, + { + "name": "registerRouteMs", + "ms": 2.011 + }, + { + "name": "buildOperationsMs", + "ms": 2.011 + }, + { + "name": "getSchemaContentMs", + "ms": 1.875 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.171 + } + ] + }, + { + "id": "next-app-zod-3.0", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.003, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.007, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.046, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.05, + "registerRouteMs": 1.237, + "getSchemaContentMs": 1.152, + "createRequestParamsMs": 0.011, + "createRequestBodyMs": 0, + "processResponsesMs": 0.064, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.237, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.032, + "finalizeDocumentMs": 0.14, + "totalMs": 1.501, + "scanRoutesMs": 1.29 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.29 + }, + { + "name": "registerRouteMs", + "ms": 1.237 + }, + { + "name": "buildOperationsMs", + "ms": 1.237 + }, + { + "name": "getSchemaContentMs", + "ms": 1.152 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.14 + } + ] + }, + { + "id": "next-app-zod-3.1", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.14, + "deriveRoutePathMs": 0.006, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.015, + "readRouteFilesMs": 0.008, + "parseRouteFilesMs": 0.01, + "analyzeRouteFilesMs": 0.083, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.1, + "registerRouteMs": 1.311, + "getSchemaContentMs": 1.211, + "createRequestParamsMs": 0.016, + "createRequestBodyMs": 0, + "processResponsesMs": 0.069, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.312, + "sortAndMergePathsMs": 0.009, + "buildPathsMs": 0.009, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.042, + "finalizeDocumentMs": 0.152, + "totalMs": 1.811, + "scanRoutesMs": 1.552 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.552 + }, + { + "name": "buildOperationsMs", + "ms": 1.312 + }, + { + "name": "registerRouteMs", + "ms": 1.311 + }, + { + "name": "getSchemaContentMs", + "ms": 1.211 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.152 + } + ] + }, + { + "id": "next-app-zod-3.1", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.008, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.075, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.081, + "registerRouteMs": 1.557, + "getSchemaContentMs": 1.441, + "createRequestParamsMs": 0.023, + "createRequestBodyMs": 0, + "processResponsesMs": 0.073, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.558, + "sortAndMergePathsMs": 0.01, + "buildPathsMs": 0.01, + "defaultComponentsAndErrorsMs": 0.005, + "mergeSchemasMs": 0.047, + "finalizeDocumentMs": 0.154, + "totalMs": 1.892, + "scanRoutesMs": 1.642 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.642 + }, + { + "name": "buildOperationsMs", + "ms": 1.558 + }, + { + "name": "registerRouteMs", + "ms": 1.557 + }, + { + "name": "getSchemaContentMs", + "ms": 1.441 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.154 + } + ] + }, + { + "id": "next-app-zod-3.2", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.082, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.013, + "readRouteFilesMs": 0.007, + "parseRouteFilesMs": 0.015, + "analyzeRouteFilesMs": 0.083, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.102, + "registerRouteMs": 1.273, + "getSchemaContentMs": 1.17, + "createRequestParamsMs": 0.021, + "createRequestBodyMs": 0, + "processResponsesMs": 0.07, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.274, + "sortAndMergePathsMs": 0.008, + "buildPathsMs": 0.008, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.043, + "finalizeDocumentMs": 0.152, + "totalMs": 1.707, + "scanRoutesMs": 1.458 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.458 + }, + { + "name": "buildOperationsMs", + "ms": 1.274 + }, + { + "name": "registerRouteMs", + "ms": 1.273 + }, + { + "name": "getSchemaContentMs", + "ms": 1.17 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.152 + } + ] + }, + { + "id": "next-app-zod-3.2", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.012, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.064, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.069, + "registerRouteMs": 1.186, + "getSchemaContentMs": 1.096, + "createRequestParamsMs": 0.011, + "createRequestBodyMs": 0, + "processResponsesMs": 0.064, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.191, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.028, + "finalizeDocumentMs": 0.136, + "totalMs": 1.477, + "scanRoutesMs": 1.264 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.264 + }, + { + "name": "buildOperationsMs", + "ms": 1.191 + }, + { + "name": "registerRouteMs", + "ms": 1.186 + }, + { + "name": "getSchemaContentMs", + "ms": 1.096 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.136 + } + ] + }, + { + "id": "next-app-zod-full-3.0", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.247, + "deriveRoutePathMs": 0.031, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.088, + "readRouteFilesMs": 0.03, + "parseRouteFilesMs": 0.06, + "analyzeRouteFilesMs": 0.507, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.597, + "registerRouteMs": 19.274, + "getSchemaContentMs": 1.991, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 17.179, + "createResponseSchemaMs": 0, + "buildOperationsMs": 19.279, + "sortAndMergePathsMs": 0.071, + "buildPathsMs": 0.071, + "defaultComponentsAndErrorsMs": 0.005, + "mergeSchemasMs": 0.267, + "finalizeDocumentMs": 1.128, + "totalMs": 21.752, + "scanRoutesMs": 20.123 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 20.123 + }, + { + "name": "buildOperationsMs", + "ms": 19.279 + }, + { + "name": "registerRouteMs", + "ms": 19.274 + }, + { + "name": "processResponsesMs", + "ms": 17.179 + }, + { + "name": "getSchemaContentMs", + "ms": 1.991 + } + ] + }, + { + "id": "next-app-zod-full-3.0", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.011, + "deriveRoutePathMs": 0.028, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.066, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 1.871, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 1.904, + "registerRouteMs": 17.028, + "getSchemaContentMs": 1.514, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 15.406, + "createResponseSchemaMs": 0, + "buildOperationsMs": 17.033, + "sortAndMergePathsMs": 0.094, + "buildPathsMs": 0.094, + "defaultComponentsAndErrorsMs": 0.007, + "mergeSchemasMs": 0.265, + "finalizeDocumentMs": 0.976, + "totalMs": 20.421, + "scanRoutesMs": 18.948 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 18.948 + }, + { + "name": "buildOperationsMs", + "ms": 17.033 + }, + { + "name": "registerRouteMs", + "ms": 17.028 + }, + { + "name": "processResponsesMs", + "ms": 15.406 + }, + { + "name": "processRouteFilesMs", + "ms": 1.904 + } + ] + }, + { + "id": "next-app-zod-full-3.1", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.008, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.008, + "scanRouteFilesMs": 0.236, + "deriveRoutePathMs": 0.021, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.08, + "readRouteFilesMs": 0.029, + "parseRouteFilesMs": 0.057, + "analyzeRouteFilesMs": 0.448, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.536, + "registerRouteMs": 15.954, + "getSchemaContentMs": 1.526, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 14.335, + "createResponseSchemaMs": 0, + "buildOperationsMs": 15.962, + "sortAndMergePathsMs": 0.089, + "buildPathsMs": 0.089, + "defaultComponentsAndErrorsMs": 0.008, + "mergeSchemasMs": 0.28, + "finalizeDocumentMs": 0.979, + "totalMs": 18.235, + "scanRoutesMs": 16.734 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 16.734 + }, + { + "name": "buildOperationsMs", + "ms": 15.962 + }, + { + "name": "registerRouteMs", + "ms": 15.954 + }, + { + "name": "processResponsesMs", + "ms": 14.335 + }, + { + "name": "getSchemaContentMs", + "ms": 1.526 + } + ] + }, + { + "id": "next-app-zod-full-3.1", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.012, + "deriveRoutePathMs": 0.025, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.059, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.438, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.466, + "registerRouteMs": 16.352, + "getSchemaContentMs": 1.489, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 14.757, + "createResponseSchemaMs": 0, + "buildOperationsMs": 16.357, + "sortAndMergePathsMs": 0.081, + "buildPathsMs": 0.081, + "defaultComponentsAndErrorsMs": 0.007, + "mergeSchemasMs": 0.264, + "finalizeDocumentMs": 0.928, + "totalMs": 18.238, + "scanRoutesMs": 16.834 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 16.834 + }, + { + "name": "buildOperationsMs", + "ms": 16.357 + }, + { + "name": "registerRouteMs", + "ms": 16.352 + }, + { + "name": "processResponsesMs", + "ms": 14.757 + }, + { + "name": "getSchemaContentMs", + "ms": 1.489 + } + ] + }, + { + "id": "next-app-zod-full-3.2", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.215, + "deriveRoutePathMs": 0.023, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.093, + "readRouteFilesMs": 0.037, + "parseRouteFilesMs": 0.075, + "analyzeRouteFilesMs": 0.491, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.6, + "registerRouteMs": 17.029, + "getSchemaContentMs": 1.548, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 15.382, + "createResponseSchemaMs": 0, + "buildOperationsMs": 17.034, + "sortAndMergePathsMs": 0.086, + "buildPathsMs": 0.086, + "defaultComponentsAndErrorsMs": 0.006, + "mergeSchemasMs": 0.284, + "finalizeDocumentMs": 0.868, + "totalMs": 19.251, + "scanRoutesMs": 17.849 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 17.849 + }, + { + "name": "buildOperationsMs", + "ms": 17.034 + }, + { + "name": "registerRouteMs", + "ms": 17.029 + }, + { + "name": "processResponsesMs", + "ms": 15.382 + }, + { + "name": "getSchemaContentMs", + "ms": 1.548 + } + ] + }, + { + "id": "next-app-zod-full-3.2", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.011, + "deriveRoutePathMs": 0.03, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.069, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.491, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.522, + "registerRouteMs": 16.662, + "getSchemaContentMs": 1.582, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 14.961, + "createResponseSchemaMs": 0, + "buildOperationsMs": 16.667, + "sortAndMergePathsMs": 0.087, + "buildPathsMs": 0.087, + "defaultComponentsAndErrorsMs": 0.012, + "mergeSchemasMs": 0.262, + "finalizeDocumentMs": 0.886, + "totalMs": 18.582, + "scanRoutesMs": 17.2 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 17.2 + }, + { + "name": "buildOperationsMs", + "ms": 16.667 + }, + { + "name": "registerRouteMs", + "ms": 16.662 + }, + { + "name": "processResponsesMs", + "ms": 14.961 + }, + { + "name": "getSchemaContentMs", + "ms": 1.582 + } + ] + }, + { + "id": "next-app-ts-full-3.0", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.257, + "deriveRoutePathMs": 0.022, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.144, + "readRouteFilesMs": 0.071, + "parseRouteFilesMs": 0.08, + "analyzeRouteFilesMs": 0.448, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.556, + "registerRouteMs": 144.043, + "getSchemaContentMs": 40.984, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 102.901, + "createResponseSchemaMs": 0, + "buildOperationsMs": 144.049, + "sortAndMergePathsMs": 0.083, + "buildPathsMs": 0.083, + "defaultComponentsAndErrorsMs": 0.005, + "mergeSchemasMs": 0.307, + "finalizeDocumentMs": 0.938, + "totalMs": 146.409, + "scanRoutesMs": 144.861 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 144.861 + }, + { + "name": "buildOperationsMs", + "ms": 144.049 + }, + { + "name": "registerRouteMs", + "ms": 144.043 + }, + { + "name": "processResponsesMs", + "ms": 102.901 + }, + { + "name": "getSchemaContentMs", + "ms": 40.984 + } + ] + }, + { + "id": "next-app-ts-full-3.0", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.01, + "deriveRoutePathMs": 0.014, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.059, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.292, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.315, + "registerRouteMs": 5.241, + "getSchemaContentMs": 0.701, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 4.468, + "createResponseSchemaMs": 0, + "buildOperationsMs": 5.244, + "sortAndMergePathsMs": 0.077, + "buildPathsMs": 0.077, + "defaultComponentsAndErrorsMs": 0.006, + "mergeSchemasMs": 0.3, + "finalizeDocumentMs": 0.891, + "totalMs": 6.956, + "scanRoutesMs": 5.569 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 5.569 + }, + { + "name": "buildOperationsMs", + "ms": 5.244 + }, + { + "name": "registerRouteMs", + "ms": 5.241 + }, + { + "name": "processResponsesMs", + "ms": 4.468 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.891 + } + ] + }, + { + "id": "next-app-ts-full-3.1", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.014, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.342, + "deriveRoutePathMs": 0.066, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.171, + "readRouteFilesMs": 0.073, + "parseRouteFilesMs": 0.076, + "analyzeRouteFilesMs": 0.474, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.582, + "registerRouteMs": 84.419, + "getSchemaContentMs": 38.22, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 46.075, + "createResponseSchemaMs": 0, + "buildOperationsMs": 84.425, + "sortAndMergePathsMs": 0.083, + "buildPathsMs": 0.083, + "defaultComponentsAndErrorsMs": 0.006, + "mergeSchemasMs": 0.291, + "finalizeDocumentMs": 0.961, + "totalMs": 86.986, + "scanRoutesMs": 85.35 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 85.35 + }, + { + "name": "buildOperationsMs", + "ms": 84.425 + }, + { + "name": "registerRouteMs", + "ms": 84.419 + }, + { + "name": "processResponsesMs", + "ms": 46.075 + }, + { + "name": "getSchemaContentMs", + "ms": 38.22 + } + ] + }, + { + "id": "next-app-ts-full-3.1", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.01, + "deriveRoutePathMs": 0.014, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.052, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.37, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.393, + "registerRouteMs": 4.693, + "getSchemaContentMs": 0.769, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 3.854, + "createResponseSchemaMs": 0, + "buildOperationsMs": 4.697, + "sortAndMergePathsMs": 0.06, + "buildPathsMs": 0.06, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.272, + "finalizeDocumentMs": 0.796, + "totalMs": 6.331, + "scanRoutesMs": 5.1 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 5.1 + }, + { + "name": "buildOperationsMs", + "ms": 4.697 + }, + { + "name": "registerRouteMs", + "ms": 4.693 + }, + { + "name": "processResponsesMs", + "ms": 3.854 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.796 + } + ] + }, + { + "id": "next-app-ts-full-3.2", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.189, + "deriveRoutePathMs": 0.024, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.134, + "readRouteFilesMs": 0.064, + "parseRouteFilesMs": 0.072, + "analyzeRouteFilesMs": 0.384, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.485, + "registerRouteMs": 82.395, + "getSchemaContentMs": 38.215, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 44.076, + "createResponseSchemaMs": 0, + "buildOperationsMs": 82.399, + "sortAndMergePathsMs": 0.072, + "buildPathsMs": 0.072, + "defaultComponentsAndErrorsMs": 0.005, + "mergeSchemasMs": 0.279, + "finalizeDocumentMs": 0.793, + "totalMs": 84.418, + "scanRoutesMs": 83.073 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 83.073 + }, + { + "name": "buildOperationsMs", + "ms": 82.399 + }, + { + "name": "registerRouteMs", + "ms": 82.395 + }, + { + "name": "processResponsesMs", + "ms": 44.076 + }, + { + "name": "getSchemaContentMs", + "ms": 38.215 + } + ] + }, + { + "id": "next-app-ts-full-3.2", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.009, + "deriveRoutePathMs": 0.008, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.034, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.214, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.231, + "registerRouteMs": 3.998, + "getSchemaContentMs": 0.451, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 3.484, + "createResponseSchemaMs": 0, + "buildOperationsMs": 4, + "sortAndMergePathsMs": 0.054, + "buildPathsMs": 0.054, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.302, + "finalizeDocumentMs": 0.855, + "totalMs": 5.53, + "scanRoutesMs": 4.241 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 4.241 + }, + { + "name": "buildOperationsMs", + "ms": 4 + }, + { + "name": "registerRouteMs", + "ms": 3.998 + }, + { + "name": "processResponsesMs", + "ms": 3.484 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.855 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.0", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.023, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.023, + "scanRouteFilesMs": 0.186, + "deriveRoutePathMs": 0.016, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.058, + "readRouteFilesMs": 0.025, + "parseRouteFilesMs": 0.181, + "analyzeRouteFilesMs": 1.018, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 1.22, + "registerRouteMs": 8.453, + "getSchemaContentMs": 7.188, + "createRequestParamsMs": 0.089, + "createRequestBodyMs": 0, + "processResponsesMs": 1.038, + "createResponseSchemaMs": 0, + "buildOperationsMs": 8.457, + "sortAndMergePathsMs": 0.056, + "buildPathsMs": 0.056, + "defaultComponentsAndErrorsMs": 0.041, + "mergeSchemasMs": 0.067, + "finalizeDocumentMs": 0.934, + "totalMs": 11.095, + "scanRoutesMs": 9.863 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 9.863 + }, + { + "name": "buildOperationsMs", + "ms": 8.457 + }, + { + "name": "registerRouteMs", + "ms": 8.453 + }, + { + "name": "getSchemaContentMs", + "ms": 7.188 + }, + { + "name": "processRouteFilesMs", + "ms": 1.22 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.0", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.017, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.017, + "scanRouteFilesMs": 0.01, + "deriveRoutePathMs": 0.014, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.038, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.792, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.807, + "registerRouteMs": 7.555, + "getSchemaContentMs": 6.392, + "createRequestParamsMs": 0.069, + "createRequestBodyMs": 0, + "processResponsesMs": 0.992, + "createResponseSchemaMs": 0, + "buildOperationsMs": 7.559, + "sortAndMergePathsMs": 0.045, + "buildPathsMs": 0.045, + "defaultComponentsAndErrorsMs": 0.033, + "mergeSchemasMs": 0.059, + "finalizeDocumentMs": 2.474, + "totalMs": 11.085, + "scanRoutesMs": 8.376 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 8.376 + }, + { + "name": "buildOperationsMs", + "ms": 7.559 + }, + { + "name": "registerRouteMs", + "ms": 7.555 + }, + { + "name": "getSchemaContentMs", + "ms": 6.392 + }, + { + "name": "finalizeDocumentMs", + "ms": 2.474 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.1", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.019, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.019, + "scanRouteFilesMs": 0.175, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.043, + "readRouteFilesMs": 0.019, + "parseRouteFilesMs": 0.109, + "analyzeRouteFilesMs": 0.79, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.914, + "registerRouteMs": 7.178, + "getSchemaContentMs": 6.197, + "createRequestParamsMs": 0.06, + "createRequestBodyMs": 0, + "processResponsesMs": 0.828, + "createResponseSchemaMs": 0, + "buildOperationsMs": 7.182, + "sortAndMergePathsMs": 0.056, + "buildPathsMs": 0.056, + "defaultComponentsAndErrorsMs": 0.053, + "mergeSchemasMs": 0.063, + "finalizeDocumentMs": 1.02, + "totalMs": 9.566, + "scanRoutesMs": 8.27 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 8.27 + }, + { + "name": "buildOperationsMs", + "ms": 7.182 + }, + { + "name": "registerRouteMs", + "ms": 7.178 + }, + { + "name": "getSchemaContentMs", + "ms": 6.197 + }, + { + "name": "finalizeDocumentMs", + "ms": 1.02 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.1", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.018, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.018, + "scanRouteFilesMs": 0.009, + "deriveRoutePathMs": 0.014, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.048, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.804, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.83, + "registerRouteMs": 9.205, + "getSchemaContentMs": 8.114, + "createRequestParamsMs": 0.08, + "createRequestBodyMs": 0, + "processResponsesMs": 0.903, + "createResponseSchemaMs": 0, + "buildOperationsMs": 9.208, + "sortAndMergePathsMs": 0.043, + "buildPathsMs": 0.043, + "defaultComponentsAndErrorsMs": 0.033, + "mergeSchemasMs": 0.054, + "finalizeDocumentMs": 0.918, + "totalMs": 11.204, + "scanRoutesMs": 10.048 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 10.048 + }, + { + "name": "buildOperationsMs", + "ms": 9.208 + }, + { + "name": "registerRouteMs", + "ms": 9.205 + }, + { + "name": "getSchemaContentMs", + "ms": 8.114 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.918 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.2", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.022, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.022, + "scanRouteFilesMs": 0.176, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.043, + "readRouteFilesMs": 0.02, + "parseRouteFilesMs": 0.094, + "analyzeRouteFilesMs": 0.825, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.935, + "registerRouteMs": 6.87, + "getSchemaContentMs": 5.863, + "createRequestParamsMs": 0.066, + "createRequestBodyMs": 0, + "processResponsesMs": 0.855, + "createResponseSchemaMs": 0, + "buildOperationsMs": 6.873, + "sortAndMergePathsMs": 0.037, + "buildPathsMs": 0.037, + "defaultComponentsAndErrorsMs": 0.032, + "mergeSchemasMs": 0.055, + "finalizeDocumentMs": 0.882, + "totalMs": 9.095, + "scanRoutesMs": 7.984 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 7.984 + }, + { + "name": "buildOperationsMs", + "ms": 6.873 + }, + { + "name": "registerRouteMs", + "ms": 6.87 + }, + { + "name": "getSchemaContentMs", + "ms": 5.863 + }, + { + "name": "processRouteFilesMs", + "ms": 0.935 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.2", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.023, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.023, + "scanRouteFilesMs": 0.008, + "deriveRoutePathMs": 0.022, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.036, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.731, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.746, + "registerRouteMs": 7.11, + "getSchemaContentMs": 6.084, + "createRequestParamsMs": 0.061, + "createRequestBodyMs": 0, + "processResponsesMs": 0.873, + "createResponseSchemaMs": 0, + "buildOperationsMs": 7.113, + "sortAndMergePathsMs": 0.051, + "buildPathsMs": 0.051, + "defaultComponentsAndErrorsMs": 0.034, + "mergeSchemasMs": 0.056, + "finalizeDocumentMs": 0.915, + "totalMs": 9.035, + "scanRoutesMs": 7.867 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 7.867 + }, + { + "name": "buildOperationsMs", + "ms": 7.113 + }, + { + "name": "registerRouteMs", + "ms": 7.11 + }, + { + "name": "getSchemaContentMs", + "ms": 6.084 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.915 + } + ] + }, + { + "id": "next-app-ignore-3.0", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.338, + "deriveRoutePathMs": 0.01, + "filterRouteCandidatesMs": 0.052, + "sourcePrecheckMs": 0.042, + "readRouteFilesMs": 0.029, + "parseRouteFilesMs": 0.023, + "analyzeRouteFilesMs": 0.072, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.102, + "registerRouteMs": 0.029, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.01, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.03, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.002, + "finalizeDocumentMs": 0.032, + "totalMs": 0.662, + "scanRoutesMs": 0.47 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.47 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.338 + }, + { + "name": "processRouteFilesMs", + "ms": 0.102 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.072 + }, + { + "name": "filterRouteCandidatesMs", + "ms": 0.052 + } + ] + }, + { + "id": "next-app-ignore-3.0", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.013, + "deriveRoutePathMs": 0.005, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.008, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.022, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.025, + "registerRouteMs": 0.006, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.001, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.006, + "sortAndMergePathsMs": 0.004, + "buildPathsMs": 0.004, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.001, + "finalizeDocumentMs": 0.023, + "totalMs": 0.105, + "scanRoutesMs": 0.045 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.045 + }, + { + "name": "processRouteFilesMs", + "ms": 0.025 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.023 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.022 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.013 + } + ] + }, + { + "id": "next-app-ignore-3.1", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.208, + "deriveRoutePathMs": 0.005, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.021, + "readRouteFilesMs": 0.013, + "parseRouteFilesMs": 0.011, + "analyzeRouteFilesMs": 0.031, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.046, + "registerRouteMs": 0.006, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.001, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.006, + "sortAndMergePathsMs": 0.008, + "buildPathsMs": 0.008, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.001, + "finalizeDocumentMs": 0.023, + "totalMs": 0.34, + "scanRoutesMs": 0.26 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.26 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.208 + }, + { + "name": "processRouteFilesMs", + "ms": 0.046 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.031 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.023 + } + ] + }, + { + "id": "next-app-ignore-3.1", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.007, + "deriveRoutePathMs": 0.005, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.008, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.021, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.024, + "registerRouteMs": 0.005, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.001, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.005, + "sortAndMergePathsMs": 0.004, + "buildPathsMs": 0.004, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.001, + "finalizeDocumentMs": 0.022, + "totalMs": 0.094, + "scanRoutesMs": 0.036 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.036 + }, + { + "name": "processRouteFilesMs", + "ms": 0.024 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.022 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.021 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.008 + } + ] + }, + { + "id": "next-app-ignore-3.2", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.208, + "deriveRoutePathMs": 0.005, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.02, + "readRouteFilesMs": 0.013, + "parseRouteFilesMs": 0.005, + "analyzeRouteFilesMs": 0.026, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.035, + "registerRouteMs": 0.005, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.001, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.006, + "sortAndMergePathsMs": 0.004, + "buildPathsMs": 0.004, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.001, + "finalizeDocumentMs": 0.021, + "totalMs": 0.322, + "scanRoutesMs": 0.249 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.249 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.208 + }, + { + "name": "processRouteFilesMs", + "ms": 0.035 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.026 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.021 + } + ] + }, + { + "id": "next-app-ignore-3.2", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.009, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.01, + "scanRouteFilesMs": 0.011, + "deriveRoutePathMs": 0.007, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.014, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.044, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.05, + "registerRouteMs": 0.011, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.001, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.011, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.002, + "finalizeDocumentMs": 0.029, + "totalMs": 0.167, + "scanRoutesMs": 0.071 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.071 + }, + { + "name": "processRouteFilesMs", + "ms": 0.05 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.044 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.029 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.014 + } + ] + }, + { + "id": "tanstack-core-3.0", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.021, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.022, + "scanRouteFilesMs": 0.08, + "deriveRoutePathMs": 0.109, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.102, + "readRouteFilesMs": 0.018, + "parseRouteFilesMs": 0.033, + "analyzeRouteFilesMs": 0.231, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.295, + "registerRouteMs": 1.079, + "getSchemaContentMs": 0.857, + "createRequestParamsMs": 0.022, + "createRequestBodyMs": 0, + "processResponsesMs": 0.16, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.081, + "sortAndMergePathsMs": 0.03, + "buildPathsMs": 0.03, + "defaultComponentsAndErrorsMs": 0.028, + "mergeSchemasMs": 0.033, + "finalizeDocumentMs": 0.386, + "totalMs": 2.184, + "scanRoutesMs": 1.456 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.456 + }, + { + "name": "buildOperationsMs", + "ms": 1.081 + }, + { + "name": "registerRouteMs", + "ms": 1.079 + }, + { + "name": "getSchemaContentMs", + "ms": 0.857 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.386 + } + ] + }, + { + "id": "tanstack-core-3.0", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.019, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.02, + "scanRouteFilesMs": 0.006, + "deriveRoutePathMs": 0.019, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.021, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.127, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.14, + "registerRouteMs": 0.346, + "getSchemaContentMs": 0.172, + "createRequestParamsMs": 0.013, + "createRequestBodyMs": 0, + "processResponsesMs": 0.135, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.347, + "sortAndMergePathsMs": 0.021, + "buildPathsMs": 0.021, + "defaultComponentsAndErrorsMs": 0.02, + "mergeSchemasMs": 0.026, + "finalizeDocumentMs": 0.323, + "totalMs": 0.952, + "scanRoutesMs": 0.493 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.493 + }, + { + "name": "buildOperationsMs", + "ms": 0.347 + }, + { + "name": "registerRouteMs", + "ms": 0.346 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.323 + }, + { + "name": "getSchemaContentMs", + "ms": 0.172 + } + ] + }, + { + "id": "tanstack-core-3.1", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.02, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.02, + "scanRouteFilesMs": 0.062, + "deriveRoutePathMs": 0.019, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.056, + "readRouteFilesMs": 0.029, + "parseRouteFilesMs": 0.026, + "analyzeRouteFilesMs": 0.149, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.188, + "registerRouteMs": 0.927, + "getSchemaContentMs": 0.72, + "createRequestParamsMs": 0.018, + "createRequestBodyMs": 0, + "processResponsesMs": 0.16, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.929, + "sortAndMergePathsMs": 0.027, + "buildPathsMs": 0.027, + "defaultComponentsAndErrorsMs": 0.025, + "mergeSchemasMs": 0.029, + "finalizeDocumentMs": 0.341, + "totalMs": 1.709, + "scanRoutesMs": 1.18 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.18 + }, + { + "name": "buildOperationsMs", + "ms": 0.929 + }, + { + "name": "registerRouteMs", + "ms": 0.927 + }, + { + "name": "getSchemaContentMs", + "ms": 0.72 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.341 + } + ] + }, + { + "id": "tanstack-core-3.1", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.016, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.016, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.014, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.017, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.101, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.114, + "registerRouteMs": 0.316, + "getSchemaContentMs": 0.158, + "createRequestParamsMs": 0.011, + "createRequestBodyMs": 0, + "processResponsesMs": 0.126, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.317, + "sortAndMergePathsMs": 0.025, + "buildPathsMs": 0.025, + "defaultComponentsAndErrorsMs": 0.018, + "mergeSchemasMs": 0.027, + "finalizeDocumentMs": 0.364, + "totalMs": 0.926, + "scanRoutesMs": 0.436 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.436 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.364 + }, + { + "name": "buildOperationsMs", + "ms": 0.317 + }, + { + "name": "registerRouteMs", + "ms": 0.316 + }, + { + "name": "getSchemaContentMs", + "ms": 0.158 + } + ] + }, + { + "id": "tanstack-core-3.2", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.014, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.048, + "deriveRoutePathMs": 0.013, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.031, + "readRouteFilesMs": 0.016, + "parseRouteFilesMs": 0.026, + "analyzeRouteFilesMs": 0.122, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.158, + "registerRouteMs": 0.803, + "getSchemaContentMs": 0.641, + "createRequestParamsMs": 0.011, + "createRequestBodyMs": 0, + "processResponsesMs": 0.129, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.804, + "sortAndMergePathsMs": 0.015, + "buildPathsMs": 0.015, + "defaultComponentsAndErrorsMs": 0.018, + "mergeSchemasMs": 0.024, + "finalizeDocumentMs": 0.314, + "totalMs": 1.448, + "scanRoutesMs": 1.01 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.01 + }, + { + "name": "buildOperationsMs", + "ms": 0.804 + }, + { + "name": "registerRouteMs", + "ms": 0.803 + }, + { + "name": "getSchemaContentMs", + "ms": 0.641 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.314 + } + ] + }, + { + "id": "tanstack-core-3.2", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.014, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.013, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.014, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.099, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.109, + "registerRouteMs": 0.329, + "getSchemaContentMs": 0.159, + "createRequestParamsMs": 0.017, + "createRequestBodyMs": 0, + "processResponsesMs": 0.131, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.33, + "sortAndMergePathsMs": 0.017, + "buildPathsMs": 0.017, + "defaultComponentsAndErrorsMs": 0.018, + "mergeSchemasMs": 0.025, + "finalizeDocumentMs": 0.31, + "totalMs": 0.863, + "scanRoutesMs": 0.443 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.443 + }, + { + "name": "buildOperationsMs", + "ms": 0.33 + }, + { + "name": "registerRouteMs", + "ms": 0.329 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.31 + }, + { + "name": "getSchemaContentMs", + "ms": 0.159 + } + ] + }, + { + "id": "react-router-core-3.0", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.02, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.02, + "scanRouteFilesMs": 0.069, + "deriveRoutePathMs": 0.018, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.036, + "readRouteFilesMs": 0.014, + "parseRouteFilesMs": 0.017, + "analyzeRouteFilesMs": 0.145, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.174, + "registerRouteMs": 0.793, + "getSchemaContentMs": 0.617, + "createRequestParamsMs": 0.012, + "createRequestBodyMs": 0, + "processResponsesMs": 0.13, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.794, + "sortAndMergePathsMs": 0.022, + "buildPathsMs": 0.022, + "defaultComponentsAndErrorsMs": 0.022, + "mergeSchemasMs": 0.023, + "finalizeDocumentMs": 0.321, + "totalMs": 1.51, + "scanRoutesMs": 1.037 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.037 + }, + { + "name": "buildOperationsMs", + "ms": 0.794 + }, + { + "name": "registerRouteMs", + "ms": 0.793 + }, + { + "name": "getSchemaContentMs", + "ms": 0.617 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.321 + } + ] + }, + { + "id": "react-router-core-3.0", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.014, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.005, + "deriveRoutePathMs": 0.012, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.017, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.104, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.114, + "registerRouteMs": 0.25, + "getSchemaContentMs": 0.104, + "createRequestParamsMs": 0.009, + "createRequestBodyMs": 0, + "processResponsesMs": 0.115, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.251, + "sortAndMergePathsMs": 0.018, + "buildPathsMs": 0.018, + "defaultComponentsAndErrorsMs": 0.018, + "mergeSchemasMs": 0.02, + "finalizeDocumentMs": 0.299, + "totalMs": 0.779, + "scanRoutesMs": 0.37 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.37 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.299 + }, + { + "name": "buildOperationsMs", + "ms": 0.251 + }, + { + "name": "registerRouteMs", + "ms": 0.25 + }, + { + "name": "processResponsesMs", + "ms": 0.115 + } + ] + }, + { + "id": "react-router-core-3.1", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.016, + "loadCustomFragmentsMs": 0.002, + "prepareDocumentMs": 0.017, + "scanRouteFilesMs": 0.058, + "deriveRoutePathMs": 0.018, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.035, + "readRouteFilesMs": 0.02, + "parseRouteFilesMs": 0.024, + "analyzeRouteFilesMs": 0.154, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.194, + "registerRouteMs": 0.84, + "getSchemaContentMs": 0.667, + "createRequestParamsMs": 0.011, + "createRequestBodyMs": 0, + "processResponsesMs": 0.13, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.842, + "sortAndMergePathsMs": 0.025, + "buildPathsMs": 0.025, + "defaultComponentsAndErrorsMs": 0.025, + "mergeSchemasMs": 0.023, + "finalizeDocumentMs": 0.321, + "totalMs": 1.569, + "scanRoutesMs": 1.093 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.093 + }, + { + "name": "buildOperationsMs", + "ms": 0.842 + }, + { + "name": "registerRouteMs", + "ms": 0.84 + }, + { + "name": "getSchemaContentMs", + "ms": 0.667 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.321 + } + ] + }, + { + "id": "react-router-core-3.1", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.012, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.012, + "scanRouteFilesMs": 0.003, + "deriveRoutePathMs": 0.01, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.011, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.083, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.091, + "registerRouteMs": 0.227, + "getSchemaContentMs": 0.094, + "createRequestParamsMs": 0.007, + "createRequestBodyMs": 0, + "processResponsesMs": 0.109, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.228, + "sortAndMergePathsMs": 0.013, + "buildPathsMs": 0.013, + "defaultComponentsAndErrorsMs": 0.016, + "mergeSchemasMs": 0.018, + "finalizeDocumentMs": 0.28, + "totalMs": 0.69, + "scanRoutesMs": 0.322 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.322 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.28 + }, + { + "name": "buildOperationsMs", + "ms": 0.228 + }, + { + "name": "registerRouteMs", + "ms": 0.227 + }, + { + "name": "processResponsesMs", + "ms": 0.109 + } + ] + }, + { + "id": "react-router-core-3.2", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.015, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.016, + "scanRouteFilesMs": 0.053, + "deriveRoutePathMs": 0.018, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.028, + "readRouteFilesMs": 0.013, + "parseRouteFilesMs": 0.011, + "analyzeRouteFilesMs": 0.133, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.153, + "registerRouteMs": 0.835, + "getSchemaContentMs": 0.659, + "createRequestParamsMs": 0.013, + "createRequestBodyMs": 0, + "processResponsesMs": 0.128, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.837, + "sortAndMergePathsMs": 0.028, + "buildPathsMs": 0.028, + "defaultComponentsAndErrorsMs": 0.025, + "mergeSchemasMs": 0.023, + "finalizeDocumentMs": 0.334, + "totalMs": 1.524, + "scanRoutesMs": 1.043 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.043 + }, + { + "name": "buildOperationsMs", + "ms": 0.837 + }, + { + "name": "registerRouteMs", + "ms": 0.835 + }, + { + "name": "getSchemaContentMs", + "ms": 0.659 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.334 + } + ] + }, + { + "id": "react-router-core-3.2", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.02, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.02, + "scanRouteFilesMs": 0.006, + "deriveRoutePathMs": 0.015, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.02, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0.119, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.128, + "registerRouteMs": 0.286, + "getSchemaContentMs": 0.119, + "createRequestParamsMs": 0.01, + "createRequestBodyMs": 0, + "processResponsesMs": 0.127, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.287, + "sortAndMergePathsMs": 0.025, + "buildPathsMs": 0.025, + "defaultComponentsAndErrorsMs": 0.021, + "mergeSchemasMs": 0.023, + "finalizeDocumentMs": 0.334, + "totalMs": 0.892, + "scanRoutesMs": 0.421 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.421 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.334 + }, + { + "name": "buildOperationsMs", + "ms": 0.287 + }, + { + "name": "registerRouteMs", + "ms": 0.286 + }, + { + "name": "processRouteFilesMs", + "ms": 0.128 + } + ] + } + ] +} diff --git a/tests/bench/generator/benchmark-matrix.ts b/tests/bench/generator/benchmark-matrix.ts index 88ab312c..d9ef462d 100644 --- a/tests/bench/generator/benchmark-matrix.ts +++ b/tests/bench/generator/benchmark-matrix.ts @@ -16,15 +16,15 @@ import { copyProjectFixture, getProjectFixturePath, materializeTemplateVariant, - type TempProject, withProjectCwd, + type TempProject, } from "../../helpers/test-project.js"; export type BenchmarkOpenApiVersion = Extract; export type BenchmarkSchemaFlavor = "typescript" | "zod" | "drizzle-zod" | "mixed" | "filtered"; export type BenchmarkPackageEntry = "." | "./next" | "./vite" | "./react-router"; export type BenchmarkRouterKind = RouterType | "generic"; -export type BenchmarkMode = "cold" | "warm" | "profile"; +export type BenchmarkMode = "cold" | "warm" | "profile" | "scale"; export type BenchmarkScenario = { id: string; @@ -75,6 +75,53 @@ const nextPagesRouterCoreFlow = getProjectFixturePath("next", "pages-router", "c const nextPagesRouterZodFlow = getProjectFixturePath("next", "pages-router", "zod-flow"); const tanstackCoreFlow = getProjectFixturePath("tanstack", "core-flow"); const reactRouterCoreFlow = getProjectFixturePath("react-router", "core-flow"); +const nextAppRouterCoreFlowAtScale = getProjectFixturePath( + "next", + "app-router", + "core-flow-at-scale", +); +const nextAppRouterTypescriptFullCoverageAtScale = getProjectFixturePath( + "next", + "app-router", + "ts-full-coverage-at-scale", +); +const nextAppRouterZodFullCoverageAtScale = getProjectFixturePath( + "next", + "app-router", + "zod-full-coverage-at-scale", +); +const nextAppRouterZodOnlyCoverageAtScale = getProjectFixturePath( + "next", + "app-router", + "zod-only-coverage-at-scale", +); +const nextAppRouterMixedSchemasAtScale = getProjectFixturePath( + "next", + "app-router", + "mixed-schemas-at-scale", +); +const nextAppRouterDrizzleZodAtScale = getProjectFixturePath( + "next", + "app-router", + "drizzle-zod-flow-at-scale", +); +const nextAppRouterIgnoreRoutesAtScale = getProjectFixturePath( + "next", + "app-router", + "ignore-routes-at-scale", +); +const nextPagesRouterCoreFlowAtScale = getProjectFixturePath( + "next", + "pages-router", + "core-flow-at-scale", +); +const nextPagesRouterZodFlowAtScale = getProjectFixturePath( + "next", + "pages-router", + "zod-flow-at-scale", +); +const tanstackCoreFlowAtScale = getProjectFixturePath("tanstack", "core-flow-at-scale"); +const reactRouterCoreFlowAtScale = getProjectFixturePath("react-router", "core-flow-at-scale"); export const BENCHMARK_SCENARIOS: readonly BenchmarkScenario[] = [ ...createVersionedScenarios({ @@ -180,6 +227,109 @@ export const BENCHMARK_SCENARIOS: readonly BenchmarkScenario[] = [ router: "generic", schemaFlavor: "typescript", }), + ...createScaleScenarios({ + idPrefix: "next-app-core-scale", + fixturePath: nextAppRouterCoreFlowAtScale, + fixtureName: "next/app-router/core-flow-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "app", + schemaFlavor: "typescript", + }), + ...createScaleScenarios({ + idPrefix: "next-app-ts-full-scale", + fixturePath: nextAppRouterTypescriptFullCoverageAtScale, + fixtureName: "next/app-router/ts-full-coverage-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "app", + schemaFlavor: "typescript", + }), + ...createScaleScenarios({ + idPrefix: "next-app-zod-full-scale", + fixturePath: nextAppRouterZodFullCoverageAtScale, + fixtureName: "next/app-router/zod-full-coverage-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "app", + schemaFlavor: "zod", + }), + ...createScaleScenarios({ + idPrefix: "next-app-zod-scale", + fixturePath: nextAppRouterZodOnlyCoverageAtScale, + fixtureName: "next/app-router/zod-only-coverage-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "app", + schemaFlavor: "zod", + }), + ...createScaleScenarios({ + idPrefix: "next-app-mixed-scale", + fixturePath: nextAppRouterMixedSchemasAtScale, + fixtureName: "next/app-router/mixed-schemas-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "app", + schemaFlavor: "mixed", + }), + ...createScaleScenarios({ + idPrefix: "next-app-drizzle-zod-scale", + fixturePath: nextAppRouterDrizzleZodAtScale, + fixtureName: "next/app-router/drizzle-zod-flow-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "app", + schemaFlavor: "drizzle-zod", + }), + ...createScaleScenarios({ + idPrefix: "next-app-ignore-scale", + fixturePath: nextAppRouterIgnoreRoutesAtScale, + fixtureName: "next/app-router/ignore-routes-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "app", + schemaFlavor: "filtered", + templateOverrides: { + ignoreRoutes: ["/admin/*", "/debug", "/public/info"], + includeOpenApiRoutes: true, + }, + }), + ...createScaleScenarios({ + idPrefix: "next-pages-core-scale", + fixturePath: nextPagesRouterCoreFlowAtScale, + fixtureName: "next/pages-router/core-flow-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "pages", + schemaFlavor: "typescript", + }), + ...createScaleScenarios({ + idPrefix: "next-pages-zod-scale", + fixturePath: nextPagesRouterZodFlowAtScale, + fixtureName: "next/pages-router/zod-flow-at-scale", + packageEntry: "./next", + frameworkKind: FrameworkKind.Nextjs, + router: "pages", + schemaFlavor: "zod", + }), + ...createScaleScenarios({ + idPrefix: "tanstack-core-scale", + fixturePath: tanstackCoreFlowAtScale, + fixtureName: "tanstack/core-flow-at-scale", + packageEntry: "./vite", + frameworkKind: FrameworkKind.Tanstack, + router: "generic", + schemaFlavor: "typescript", + }), + ...createScaleScenarios({ + idPrefix: "react-router-core-scale", + fixturePath: reactRouterCoreFlowAtScale, + fixtureName: "react-router/core-flow-at-scale", + packageEntry: "./react-router", + frameworkKind: FrameworkKind.ReactRouter, + router: "generic", + schemaFlavor: "typescript", + }), ] as const; export function getBenchmarkScenarios(mode: BenchmarkMode): BenchmarkScenario[] { @@ -258,6 +408,29 @@ export function collectProfiles( ); } +export function collectWarmProfiles( + project: BenchProject, + iterations: number, +): GeneratorPerformanceProfile[] { + return Array.from({ length: iterations }, () => + withProjectCwd(project.project.root, () => { + const runtime = createSharedGenerationRuntime(); + const coldGenerator = new OpenApiGenerator({ templatePath: project.templatePath, runtime }); + coldGenerator.generate(); + + const warmGenerator = new OpenApiGenerator({ templatePath: project.templatePath, runtime }); + warmGenerator.generate(); + + const profile = warmGenerator.getPerformanceProfile(); + if (!profile) { + throw new Error(`Expected warm performance profile for scenario "${project.scenario.id}".`); + } + + return profile; + }), + ); +} + export function getScenarioBenchmarkName(scenario: BenchmarkScenario): string { return [ scenario.packageEntry, @@ -285,3 +458,16 @@ function createVersionedScenarios( modes: BENCHMARK_MODES, })); } + +function createScaleScenarios( + definition: VersionedScenarioDefinition, +): readonly BenchmarkScenario[] { + return [ + { + ...definition, + id: `${definition.idPrefix}-3.2`, + openapiVersion: "3.2", + modes: ["scale"], + }, + ]; +} diff --git a/tests/bench/generator/current.json b/tests/bench/generator/current.json new file mode 100644 index 00000000..5d772db1 --- /dev/null +++ b/tests/bench/generator/current.json @@ -0,0 +1,3974 @@ +{ + "generatedAt": "2026-07-06T07:56:14.177Z", + "iterations": 1, + "machine": { + "arch": "arm64", + "cpus": 1, + "model": "unknown", + "node": "v25.0.0", + "platform": "darwin", + "release": "25.5.0" + }, + "scenarios": [ + { + "id": "next-app-core-3.0", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.084, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.085, + "scanRouteFilesMs": 9.218, + "deriveRoutePathMs": 0.493, + "filterRouteCandidatesMs": 0.053, + "sourcePrecheckMs": 1.17, + "readRouteFilesMs": 0.483, + "parseRouteFilesMs": 10.905, + "analyzeRouteFilesMs": 10.014, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 21.218, + "registerRouteMs": 119.48, + "getSchemaContentMs": 65.083, + "createRequestParamsMs": 0.527, + "createRequestBodyMs": 0, + "processResponsesMs": 52.02, + "createResponseSchemaMs": 0, + "buildOperationsMs": 121.63, + "sortAndMergePathsMs": 0.497, + "buildPathsMs": 0.497, + "defaultComponentsAndErrorsMs": 0.233, + "mergeSchemasMs": 0.364, + "finalizeDocumentMs": 4.359, + "totalMs": 159.82, + "scanRoutesMs": 152.066 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 152.066 + }, + { + "name": "buildOperationsMs", + "ms": 121.63 + }, + { + "name": "registerRouteMs", + "ms": 119.48 + }, + { + "name": "getSchemaContentMs", + "ms": 65.083 + }, + { + "name": "processResponsesMs", + "ms": 52.02 + } + ] + }, + { + "id": "next-app-core-3.0", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.024, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.024, + "scanRouteFilesMs": 0.045, + "deriveRoutePathMs": 0.036, + "filterRouteCandidatesMs": 0.003, + "sourcePrecheckMs": 0.121, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.162, + "buildPathsMs": 0.162, + "defaultComponentsAndErrorsMs": 0.04, + "mergeSchemasMs": 0.232, + "finalizeDocumentMs": 1.985, + "totalMs": 3.309, + "scanRoutesMs": 0.045 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 1.985 + }, + { + "name": "mergeSchemasMs", + "ms": 0.232 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.162 + }, + { + "name": "buildPathsMs", + "ms": 0.162 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.121 + } + ] + }, + { + "id": "next-app-core-3.1", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.044, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.044, + "scanRouteFilesMs": 1.37, + "deriveRoutePathMs": 0.099, + "filterRouteCandidatesMs": 0.008, + "sourcePrecheckMs": 0.504, + "readRouteFilesMs": 0.313, + "parseRouteFilesMs": 2.036, + "analyzeRouteFilesMs": 3.837, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 5.977, + "registerRouteMs": 92.308, + "getSchemaContentMs": 49.88, + "createRequestParamsMs": 0.154, + "createRequestBodyMs": 0, + "processResponsesMs": 41.797, + "createResponseSchemaMs": 0, + "buildOperationsMs": 93.748, + "sortAndMergePathsMs": 0.172, + "buildPathsMs": 0.172, + "defaultComponentsAndErrorsMs": 0.046, + "mergeSchemasMs": 0.222, + "finalizeDocumentMs": 1.987, + "totalMs": 104.253, + "scanRoutesMs": 101.096 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 101.096 + }, + { + "name": "buildOperationsMs", + "ms": 93.748 + }, + { + "name": "registerRouteMs", + "ms": 92.308 + }, + { + "name": "getSchemaContentMs", + "ms": 49.88 + }, + { + "name": "processResponsesMs", + "ms": 41.797 + } + ] + }, + { + "id": "next-app-core-3.1", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.028, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.028, + "scanRouteFilesMs": 0.049, + "deriveRoutePathMs": 0.042, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.135, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.161, + "buildPathsMs": 0.161, + "defaultComponentsAndErrorsMs": 0.036, + "mergeSchemasMs": 0.274, + "finalizeDocumentMs": 2.803, + "totalMs": 4.148, + "scanRoutesMs": 0.049 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 2.803 + }, + { + "name": "mergeSchemasMs", + "ms": 0.274 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.161 + }, + { + "name": "buildPathsMs", + "ms": 0.161 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.135 + } + ] + }, + { + "id": "next-app-core-3.2", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.039, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.039, + "scanRouteFilesMs": 1.128, + "deriveRoutePathMs": 0.093, + "filterRouteCandidatesMs": 0.005, + "sourcePrecheckMs": 0.513, + "readRouteFilesMs": 0.32, + "parseRouteFilesMs": 1.763, + "analyzeRouteFilesMs": 3.078, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 4.954, + "registerRouteMs": 87.938, + "getSchemaContentMs": 46.791, + "createRequestParamsMs": 0.141, + "createRequestBodyMs": 0, + "processResponsesMs": 40.522, + "createResponseSchemaMs": 0, + "buildOperationsMs": 89.278, + "sortAndMergePathsMs": 0.195, + "buildPathsMs": 0.195, + "defaultComponentsAndErrorsMs": 0.043, + "mergeSchemasMs": 0.231, + "finalizeDocumentMs": 1.943, + "totalMs": 98.49, + "scanRoutesMs": 95.36 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 95.36 + }, + { + "name": "buildOperationsMs", + "ms": 89.278 + }, + { + "name": "registerRouteMs", + "ms": 87.938 + }, + { + "name": "getSchemaContentMs", + "ms": 46.791 + }, + { + "name": "processResponsesMs", + "ms": 40.522 + } + ] + }, + { + "id": "next-app-core-3.2", + "fixture": "next/app-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.026, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.027, + "scanRouteFilesMs": 0.05, + "deriveRoutePathMs": 0.04, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.108, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.204, + "buildPathsMs": 0.204, + "defaultComponentsAndErrorsMs": 0.046, + "mergeSchemasMs": 0.214, + "finalizeDocumentMs": 1.814, + "totalMs": 4.947, + "scanRoutesMs": 0.05 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 1.814 + }, + { + "name": "mergeSchemasMs", + "ms": 0.214 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.204 + }, + { + "name": "buildPathsMs", + "ms": 0.204 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.108 + } + ] + }, + { + "id": "next-pages-core-3.0", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.017, + "loadCustomFragmentsMs": 0.001, + "prepareDocumentMs": 0.017, + "scanRouteFilesMs": 0.112, + "deriveRoutePathMs": 0.083, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.108, + "readRouteFilesMs": 0.032, + "parseRouteFilesMs": 0.211, + "analyzeRouteFilesMs": 0.513, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.836, + "registerRouteMs": 0.648, + "getSchemaContentMs": 0.453, + "createRequestParamsMs": 0.022, + "createRequestBodyMs": 0, + "processResponsesMs": 0.09, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.656, + "sortAndMergePathsMs": 0.021, + "buildPathsMs": 0.021, + "defaultComponentsAndErrorsMs": 0.009, + "mergeSchemasMs": 0.039, + "finalizeDocumentMs": 0.227, + "totalMs": 2.155, + "scanRoutesMs": 1.603 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.603 + }, + { + "name": "processRouteFilesMs", + "ms": 0.836 + }, + { + "name": "buildOperationsMs", + "ms": 0.656 + }, + { + "name": "registerRouteMs", + "ms": 0.648 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.513 + } + ] + }, + { + "id": "next-pages-core-3.0", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.005, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.008, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.008, + "mergeSchemasMs": 0.022, + "finalizeDocumentMs": 0.19, + "totalMs": 0.311, + "scanRoutesMs": 0.004 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.19 + }, + { + "name": "mergeSchemasMs", + "ms": 0.022 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.008 + }, + { + "name": "defaultComponentsAndErrorsMs", + "ms": 0.008 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.007 + } + ] + }, + { + "id": "next-pages-core-3.1", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.073, + "deriveRoutePathMs": 0.005, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.036, + "readRouteFilesMs": 0.026, + "parseRouteFilesMs": 0.043, + "analyzeRouteFilesMs": 0.164, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.219, + "registerRouteMs": 0.491, + "getSchemaContentMs": 0.377, + "createRequestParamsMs": 0.017, + "createRequestBodyMs": 0, + "processResponsesMs": 0.065, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.498, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.005, + "mergeSchemasMs": 0.025, + "finalizeDocumentMs": 0.185, + "totalMs": 1.081, + "scanRoutesMs": 0.79 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.79 + }, + { + "name": "buildOperationsMs", + "ms": 0.498 + }, + { + "name": "registerRouteMs", + "ms": 0.491 + }, + { + "name": "getSchemaContentMs", + "ms": 0.377 + }, + { + "name": "processRouteFilesMs", + "ms": 0.219 + } + ] + }, + { + "id": "next-pages-core-3.1", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.007, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.008, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.016, + "finalizeDocumentMs": 0.174, + "totalMs": 0.276, + "scanRoutesMs": 0.004 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.174 + }, + { + "name": "mergeSchemasMs", + "ms": 0.016 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.008 + }, + { + "name": "prepareDocumentMs", + "ms": 0.007 + }, + { + "name": "deriveRoutePathMs", + "ms": 0.007 + } + ] + }, + { + "id": "next-pages-core-3.2", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.057, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.033, + "readRouteFilesMs": 0.024, + "parseRouteFilesMs": 0.034, + "analyzeRouteFilesMs": 0.113, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.157, + "registerRouteMs": 0.478, + "getSchemaContentMs": 0.357, + "createRequestParamsMs": 0.016, + "createRequestBodyMs": 0, + "processResponsesMs": 0.072, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.483, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.027, + "finalizeDocumentMs": 0.178, + "totalMs": 0.975, + "scanRoutesMs": 0.698 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.698 + }, + { + "name": "buildOperationsMs", + "ms": 0.483 + }, + { + "name": "registerRouteMs", + "ms": 0.478 + }, + { + "name": "getSchemaContentMs", + "ms": 0.357 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.178 + } + ] + }, + { + "id": "next-pages-core-3.2", + "fixture": "next/pages-router/core-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.011, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.018, + "finalizeDocumentMs": 0.171, + "totalMs": 0.274, + "scanRoutesMs": 0.004 + }, + "router": "pages", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.171 + }, + { + "name": "mergeSchemasMs", + "ms": 0.018 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.011 + }, + { + "name": "prepareTemplateMs", + "ms": 0.006 + }, + { + "name": "prepareDocumentMs", + "ms": 0.006 + } + ] + }, + { + "id": "next-pages-zod-3.0", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.013, + "scanRouteFilesMs": 0.036, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.035, + "readRouteFilesMs": 0.023, + "parseRouteFilesMs": 0.037, + "analyzeRouteFilesMs": 0.062, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.108, + "registerRouteMs": 0.382, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.369, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.389, + "sortAndMergePathsMs": 0.01, + "buildPathsMs": 0.01, + "defaultComponentsAndErrorsMs": 0.006, + "mergeSchemasMs": 0.008, + "finalizeDocumentMs": 0.073, + "totalMs": 0.703, + "scanRoutesMs": 0.533 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.533 + }, + { + "name": "buildOperationsMs", + "ms": 0.389 + }, + { + "name": "registerRouteMs", + "ms": 0.382 + }, + { + "name": "processResponsesMs", + "ms": 0.369 + }, + { + "name": "processRouteFilesMs", + "ms": 0.108 + } + ] + }, + { + "id": "next-pages-zod-3.0", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.002, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.006, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.004, + "buildPathsMs": 0.004, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.004, + "finalizeDocumentMs": 0.066, + "totalMs": 0.128, + "scanRoutesMs": 0.002 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.066 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.006 + }, + { + "name": "prepareDocumentMs", + "ms": 0.005 + }, + { + "name": "prepareTemplateMs", + "ms": 0.004 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.004 + } + ] + }, + { + "id": "next-pages-zod-3.1", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.03, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.027, + "readRouteFilesMs": 0.02, + "parseRouteFilesMs": 0.031, + "analyzeRouteFilesMs": 0.059, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.1, + "registerRouteMs": 0.27, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.26, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.276, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.005, + "finalizeDocumentMs": 0.062, + "totalMs": 0.532, + "scanRoutesMs": 0.406 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.406 + }, + { + "name": "buildOperationsMs", + "ms": 0.276 + }, + { + "name": "registerRouteMs", + "ms": 0.27 + }, + { + "name": "processResponsesMs", + "ms": 0.26 + }, + { + "name": "processRouteFilesMs", + "ms": 0.1 + } + ] + }, + { + "id": "next-pages-zod-3.1", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.002, + "deriveRoutePathMs": 0.002, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.005, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.004, + "buildPathsMs": 0.004, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.002, + "finalizeDocumentMs": 0.055, + "totalMs": 0.109, + "scanRoutesMs": 0.002 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.055 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.005 + }, + { + "name": "prepareTemplateMs", + "ms": 0.004 + }, + { + "name": "prepareDocumentMs", + "ms": 0.004 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.004 + } + ] + }, + { + "id": "next-pages-zod-3.2", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.029, + "deriveRoutePathMs": 0.002, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.025, + "readRouteFilesMs": 0.02, + "parseRouteFilesMs": 0.031, + "analyzeRouteFilesMs": 0.054, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.096, + "registerRouteMs": 0.271, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.263, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.277, + "sortAndMergePathsMs": 0.005, + "buildPathsMs": 0.005, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.004, + "finalizeDocumentMs": 0.059, + "totalMs": 0.52, + "scanRoutesMs": 0.401 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.401 + }, + { + "name": "buildOperationsMs", + "ms": 0.277 + }, + { + "name": "registerRouteMs", + "ms": 0.271 + }, + { + "name": "processResponsesMs", + "ms": 0.263 + }, + { + "name": "processRouteFilesMs", + "ms": 0.096 + } + ] + }, + { + "id": "next-pages-zod-3.2", + "fixture": "next/pages-router/zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.002, + "deriveRoutePathMs": 0.002, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.005, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.004, + "buildPathsMs": 0.004, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.002, + "finalizeDocumentMs": 0.056, + "totalMs": 0.11, + "scanRoutesMs": 0.002 + }, + "router": "pages", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.056 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.005 + }, + { + "name": "prepareTemplateMs", + "ms": 0.004 + }, + { + "name": "prepareDocumentMs", + "ms": 0.004 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.004 + } + ] + }, + { + "id": "next-app-mixed-3.0", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.011, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.011, + "scanRouteFilesMs": 0.119, + "deriveRoutePathMs": 0.007, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.06, + "readRouteFilesMs": 0.043, + "parseRouteFilesMs": 0.051, + "analyzeRouteFilesMs": 0.123, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.188, + "registerRouteMs": 2.83, + "getSchemaContentMs": 1.565, + "createRequestParamsMs": 0.014, + "createRequestBodyMs": 0, + "processResponsesMs": 1.214, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.863, + "sortAndMergePathsMs": 0.031, + "buildPathsMs": 0.031, + "defaultComponentsAndErrorsMs": 0.006, + "mergeSchemasMs": 0.044, + "finalizeDocumentMs": 0.243, + "totalMs": 3.594, + "scanRoutesMs": 3.17 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 3.17 + }, + { + "name": "buildOperationsMs", + "ms": 2.863 + }, + { + "name": "registerRouteMs", + "ms": 2.83 + }, + { + "name": "getSchemaContentMs", + "ms": 1.565 + }, + { + "name": "processResponsesMs", + "ms": 1.214 + } + ] + }, + { + "id": "next-app-mixed-3.0", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.005, + "deriveRoutePathMs": 0.006, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.014, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.017, + "buildPathsMs": 0.017, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.03, + "finalizeDocumentMs": 0.216, + "totalMs": 0.377, + "scanRoutesMs": 0.005 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.216 + }, + { + "name": "mergeSchemasMs", + "ms": 0.03 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.017 + }, + { + "name": "buildPathsMs", + "ms": 0.017 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.014 + } + ] + }, + { + "id": "next-app-mixed-3.1", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.012, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.012, + "scanRouteFilesMs": 0.11, + "deriveRoutePathMs": 0.007, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.072, + "readRouteFilesMs": 0.057, + "parseRouteFilesMs": 0.068, + "analyzeRouteFilesMs": 0.151, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.232, + "registerRouteMs": 2.415, + "getSchemaContentMs": 1.466, + "createRequestParamsMs": 0.014, + "createRequestBodyMs": 0, + "processResponsesMs": 0.905, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.444, + "sortAndMergePathsMs": 0.023, + "buildPathsMs": 0.023, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.035, + "finalizeDocumentMs": 0.231, + "totalMs": 3.192, + "scanRoutesMs": 2.786 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 2.786 + }, + { + "name": "buildOperationsMs", + "ms": 2.444 + }, + { + "name": "registerRouteMs", + "ms": 2.415 + }, + { + "name": "getSchemaContentMs", + "ms": 1.466 + }, + { + "name": "processResponsesMs", + "ms": 0.905 + } + ] + }, + { + "id": "next-app-mixed-3.1", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.005, + "deriveRoutePathMs": 0.006, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.016, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.026, + "buildPathsMs": 0.026, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.034, + "finalizeDocumentMs": 0.227, + "totalMs": 0.402, + "scanRoutesMs": 0.005 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.227 + }, + { + "name": "mergeSchemasMs", + "ms": 0.034 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.026 + }, + { + "name": "buildPathsMs", + "ms": 0.026 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.016 + } + ] + }, + { + "id": "next-app-mixed-3.2", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.325, + "deriveRoutePathMs": 0.012, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.074, + "readRouteFilesMs": 0.056, + "parseRouteFilesMs": 0.074, + "analyzeRouteFilesMs": 0.147, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.235, + "registerRouteMs": 2.257, + "getSchemaContentMs": 1.382, + "createRequestParamsMs": 0.012, + "createRequestBodyMs": 0, + "processResponsesMs": 0.833, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.293, + "sortAndMergePathsMs": 0.035, + "buildPathsMs": 0.035, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.041, + "finalizeDocumentMs": 0.215, + "totalMs": 3.27, + "scanRoutesMs": 2.853 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 2.853 + }, + { + "name": "buildOperationsMs", + "ms": 2.293 + }, + { + "name": "registerRouteMs", + "ms": 2.257 + }, + { + "name": "getSchemaContentMs", + "ms": 1.382 + }, + { + "name": "processResponsesMs", + "ms": 0.833 + } + ] + }, + { + "id": "next-app-mixed-3.2", + "fixture": "next/app-router/mixed-schemas", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.005, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.011, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.014, + "buildPathsMs": 0.014, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.027, + "finalizeDocumentMs": 0.192, + "totalMs": 0.324, + "scanRoutesMs": 0.004 + }, + "router": "app", + "schemaFlavor": "mixed", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.192 + }, + { + "name": "mergeSchemasMs", + "ms": 0.027 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.014 + }, + { + "name": "buildPathsMs", + "ms": 0.014 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.011 + } + ] + }, + { + "id": "next-app-zod-3.0", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.121, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.025, + "readRouteFilesMs": 0.019, + "parseRouteFilesMs": 0.033, + "analyzeRouteFilesMs": 0.074, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.112, + "registerRouteMs": 2.126, + "getSchemaContentMs": 1.979, + "createRequestParamsMs": 0.04, + "createRequestBodyMs": 0, + "processResponsesMs": 0.094, + "createResponseSchemaMs": 0, + "buildOperationsMs": 2.132, + "sortAndMergePathsMs": 0.009, + "buildPathsMs": 0.009, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.034, + "finalizeDocumentMs": 0.181, + "totalMs": 2.648, + "scanRoutesMs": 2.365 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 2.365 + }, + { + "name": "buildOperationsMs", + "ms": 2.132 + }, + { + "name": "registerRouteMs", + "ms": 2.126 + }, + { + "name": "getSchemaContentMs", + "ms": 1.979 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.181 + } + ] + }, + { + "id": "next-app-zod-3.0", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.005, + "deriveRoutePathMs": 0.006, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.009, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.022, + "finalizeDocumentMs": 0.14, + "totalMs": 0.256, + "scanRoutesMs": 0.005 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.14 + }, + { + "name": "mergeSchemasMs", + "ms": 0.022 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.009 + }, + { + "name": "prepareDocumentMs", + "ms": 0.006 + }, + { + "name": "deriveRoutePathMs", + "ms": 0.006 + } + ] + }, + { + "id": "next-app-zod-3.1", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.122, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.031, + "readRouteFilesMs": 0.024, + "parseRouteFilesMs": 0.064, + "analyzeRouteFilesMs": 0.129, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.213, + "registerRouteMs": 1.464, + "getSchemaContentMs": 1.358, + "createRequestParamsMs": 0.017, + "createRequestBodyMs": 0, + "processResponsesMs": 0.071, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.471, + "sortAndMergePathsMs": 0.009, + "buildPathsMs": 0.009, + "defaultComponentsAndErrorsMs": 0.007, + "mergeSchemasMs": 0.036, + "finalizeDocumentMs": 0.157, + "totalMs": 2.075, + "scanRoutesMs": 1.806 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.806 + }, + { + "name": "buildOperationsMs", + "ms": 1.471 + }, + { + "name": "registerRouteMs", + "ms": 1.464 + }, + { + "name": "getSchemaContentMs", + "ms": 1.358 + }, + { + "name": "processRouteFilesMs", + "ms": 0.213 + } + ] + }, + { + "id": "next-app-zod-3.1", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.004, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.007, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.005, + "buildPathsMs": 0.005, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.021, + "finalizeDocumentMs": 0.134, + "totalMs": 0.231, + "scanRoutesMs": 0.004 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.134 + }, + { + "name": "mergeSchemasMs", + "ms": 0.021 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.007 + }, + { + "name": "prepareTemplateMs", + "ms": 0.005 + }, + { + "name": "prepareDocumentMs", + "ms": 0.005 + } + ] + }, + { + "id": "next-app-zod-3.2", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.087, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.027, + "readRouteFilesMs": 0.021, + "parseRouteFilesMs": 0.044, + "analyzeRouteFilesMs": 0.094, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.145, + "registerRouteMs": 1.289, + "getSchemaContentMs": 1.194, + "createRequestParamsMs": 0.013, + "createRequestBodyMs": 0, + "processResponsesMs": 0.069, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.298, + "sortAndMergePathsMs": 0.007, + "buildPathsMs": 0.007, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.032, + "finalizeDocumentMs": 0.142, + "totalMs": 1.768, + "scanRoutesMs": 1.53 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.53 + }, + { + "name": "buildOperationsMs", + "ms": 1.298 + }, + { + "name": "registerRouteMs", + "ms": 1.289 + }, + { + "name": "getSchemaContentMs", + "ms": 1.194 + }, + { + "name": "processRouteFilesMs", + "ms": 0.145 + } + ] + }, + { + "id": "next-app-zod-3.2", + "fixture": "next/app-router/zod-only-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.008, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.008, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.003, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.006, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.005, + "buildPathsMs": 0.005, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.021, + "finalizeDocumentMs": 0.129, + "totalMs": 0.231, + "scanRoutesMs": 0.004 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.129 + }, + { + "name": "mergeSchemasMs", + "ms": 0.021 + }, + { + "name": "prepareTemplateMs", + "ms": 0.008 + }, + { + "name": "prepareDocumentMs", + "ms": 0.008 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.006 + } + ] + }, + { + "id": "next-app-zod-full-3.0", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.288, + "deriveRoutePathMs": 0.025, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.153, + "readRouteFilesMs": 0.1, + "parseRouteFilesMs": 0.304, + "analyzeRouteFilesMs": 0.718, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 1.056, + "registerRouteMs": 19.857, + "getSchemaContentMs": 2.307, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 17.417, + "createResponseSchemaMs": 0, + "buildOperationsMs": 20.107, + "sortAndMergePathsMs": 0.089, + "buildPathsMs": 0.089, + "defaultComponentsAndErrorsMs": 0.011, + "mergeSchemasMs": 0.303, + "finalizeDocumentMs": 1.255, + "totalMs": 23.321, + "scanRoutesMs": 21.451 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 21.451 + }, + { + "name": "buildOperationsMs", + "ms": 20.107 + }, + { + "name": "registerRouteMs", + "ms": 19.857 + }, + { + "name": "processResponsesMs", + "ms": 17.417 + }, + { + "name": "getSchemaContentMs", + "ms": 2.307 + } + ] + }, + { + "id": "next-app-zod-full-3.0", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.013, + "deriveRoutePathMs": 0.014, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.039, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.039, + "buildPathsMs": 0.039, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.243, + "finalizeDocumentMs": 1.081, + "totalMs": 1.673, + "scanRoutesMs": 0.013 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 1.081 + }, + { + "name": "mergeSchemasMs", + "ms": 0.243 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.039 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.039 + }, + { + "name": "buildPathsMs", + "ms": 0.039 + } + ] + }, + { + "id": "next-app-zod-full-3.1", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.253, + "deriveRoutePathMs": 0.025, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.16, + "readRouteFilesMs": 0.101, + "parseRouteFilesMs": 0.304, + "analyzeRouteFilesMs": 0.673, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 1.013, + "registerRouteMs": 17.876, + "getSchemaContentMs": 1.8, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 15.97, + "createResponseSchemaMs": 0, + "buildOperationsMs": 18.109, + "sortAndMergePathsMs": 0.056, + "buildPathsMs": 0.056, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.239, + "finalizeDocumentMs": 0.972, + "totalMs": 20.888, + "scanRoutesMs": 19.375 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 19.375 + }, + { + "name": "buildOperationsMs", + "ms": 18.109 + }, + { + "name": "registerRouteMs", + "ms": 17.876 + }, + { + "name": "processResponsesMs", + "ms": 15.97 + }, + { + "name": "getSchemaContentMs", + "ms": 1.8 + } + ] + }, + { + "id": "next-app-zod-full-3.1", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.012, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.033, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.031, + "buildPathsMs": 0.031, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.199, + "finalizeDocumentMs": 0.791, + "totalMs": 1.283, + "scanRoutesMs": 0.012 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.791 + }, + { + "name": "mergeSchemasMs", + "ms": 0.199 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.033 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.031 + }, + { + "name": "buildPathsMs", + "ms": 0.031 + } + ] + }, + { + "id": "next-app-zod-full-3.2", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.264, + "deriveRoutePathMs": 0.028, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.154, + "readRouteFilesMs": 0.098, + "parseRouteFilesMs": 0.3, + "analyzeRouteFilesMs": 0.65, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.989, + "registerRouteMs": 17.508, + "getSchemaContentMs": 1.712, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 15.678, + "createResponseSchemaMs": 0, + "buildOperationsMs": 17.708, + "sortAndMergePathsMs": 0.06, + "buildPathsMs": 0.06, + "defaultComponentsAndErrorsMs": 0.006, + "mergeSchemasMs": 0.251, + "finalizeDocumentMs": 0.895, + "totalMs": 20.391, + "scanRoutesMs": 18.961 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 18.961 + }, + { + "name": "buildOperationsMs", + "ms": 17.708 + }, + { + "name": "registerRouteMs", + "ms": 17.508 + }, + { + "name": "processResponsesMs", + "ms": 15.678 + }, + { + "name": "getSchemaContentMs", + "ms": 1.712 + } + ] + }, + { + "id": "next-app-zod-full-3.2", + "fixture": "next/app-router/zod-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.012, + "deriveRoutePathMs": 0.017, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.037, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.034, + "buildPathsMs": 0.034, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.215, + "finalizeDocumentMs": 0.849, + "totalMs": 1.381, + "scanRoutesMs": 0.012 + }, + "router": "app", + "schemaFlavor": "zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.849 + }, + { + "name": "mergeSchemasMs", + "ms": 0.215 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.037 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.034 + }, + { + "name": "buildPathsMs", + "ms": 0.034 + } + ] + }, + { + "id": "next-app-ts-full-3.0", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.229, + "deriveRoutePathMs": 0.031, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.269, + "readRouteFilesMs": 0.176, + "parseRouteFilesMs": 0.298, + "analyzeRouteFilesMs": 1.051, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 1.384, + "registerRouteMs": 397.986, + "getSchemaContentMs": 133.902, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 263.92, + "createResponseSchemaMs": 0, + "buildOperationsMs": 398.188, + "sortAndMergePathsMs": 0.09, + "buildPathsMs": 0.09, + "defaultComponentsAndErrorsMs": 0.015, + "mergeSchemasMs": 0.366, + "finalizeDocumentMs": 1.107, + "totalMs": 401.718, + "scanRoutesMs": 399.801 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 399.801 + }, + { + "name": "buildOperationsMs", + "ms": 398.188 + }, + { + "name": "registerRouteMs", + "ms": 397.986 + }, + { + "name": "processResponsesMs", + "ms": 263.92 + }, + { + "name": "getSchemaContentMs", + "ms": 133.902 + } + ] + }, + { + "id": "next-app-ts-full-3.0", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.011, + "deriveRoutePathMs": 0.012, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.033, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.037, + "buildPathsMs": 0.037, + "defaultComponentsAndErrorsMs": 0.003, + "mergeSchemasMs": 0.251, + "finalizeDocumentMs": 0.839, + "totalMs": 1.401, + "scanRoutesMs": 0.011 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.839 + }, + { + "name": "mergeSchemasMs", + "ms": 0.251 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.037 + }, + { + "name": "buildPathsMs", + "ms": 0.037 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.033 + } + ] + }, + { + "id": "next-app-ts-full-3.1", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.559, + "deriveRoutePathMs": 0.038, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.333, + "readRouteFilesMs": 0.229, + "parseRouteFilesMs": 0.362, + "analyzeRouteFilesMs": 0.572, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.972, + "registerRouteMs": 216.516, + "getSchemaContentMs": 100.906, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 115.478, + "createResponseSchemaMs": 0, + "buildOperationsMs": 216.703, + "sortAndMergePathsMs": 0.062, + "buildPathsMs": 0.062, + "defaultComponentsAndErrorsMs": 0.005, + "mergeSchemasMs": 0.263, + "finalizeDocumentMs": 0.803, + "totalMs": 219.779, + "scanRoutesMs": 218.233 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 218.233 + }, + { + "name": "buildOperationsMs", + "ms": 216.703 + }, + { + "name": "registerRouteMs", + "ms": 216.516 + }, + { + "name": "processResponsesMs", + "ms": 115.478 + }, + { + "name": "getSchemaContentMs", + "ms": 100.906 + } + ] + }, + { + "id": "next-app-ts-full-3.1", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.009, + "deriveRoutePathMs": 0.01, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.079, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.077, + "buildPathsMs": 0.077, + "defaultComponentsAndErrorsMs": 0.008, + "mergeSchemasMs": 0.292, + "finalizeDocumentMs": 0.868, + "totalMs": 1.616, + "scanRoutesMs": 0.009 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.868 + }, + { + "name": "mergeSchemasMs", + "ms": 0.292 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.079 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.077 + }, + { + "name": "buildPathsMs", + "ms": 0.077 + } + ] + }, + { + "id": "next-app-ts-full-3.2", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.007, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.007, + "scanRouteFilesMs": 0.229, + "deriveRoutePathMs": 0.03, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.282, + "readRouteFilesMs": 0.181, + "parseRouteFilesMs": 0.25, + "analyzeRouteFilesMs": 0.533, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.817, + "registerRouteMs": 208.282, + "getSchemaContentMs": 102.684, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 105.476, + "createResponseSchemaMs": 0, + "buildOperationsMs": 208.469, + "sortAndMergePathsMs": 0.063, + "buildPathsMs": 0.063, + "defaultComponentsAndErrorsMs": 0.006, + "mergeSchemasMs": 0.262, + "finalizeDocumentMs": 0.776, + "totalMs": 210.981, + "scanRoutesMs": 209.515 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 209.515 + }, + { + "name": "buildOperationsMs", + "ms": 208.469 + }, + { + "name": "registerRouteMs", + "ms": 208.282 + }, + { + "name": "processResponsesMs", + "ms": 105.476 + }, + { + "name": "getSchemaContentMs", + "ms": 102.684 + } + ] + }, + { + "id": "next-app-ts-full-3.2", + "fixture": "next/app-router/ts-full-coverage", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.009, + "deriveRoutePathMs": 0.009, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.026, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.038, + "buildPathsMs": 0.038, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.325, + "finalizeDocumentMs": 0.849, + "totalMs": 1.435, + "scanRoutesMs": 0.009 + }, + "router": "app", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.849 + }, + { + "name": "mergeSchemasMs", + "ms": 0.325 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.038 + }, + { + "name": "buildPathsMs", + "ms": 0.038 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.026 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.0", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.031, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.031, + "scanRouteFilesMs": 0.215, + "deriveRoutePathMs": 0.02, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.117, + "readRouteFilesMs": 0.077, + "parseRouteFilesMs": 0.686, + "analyzeRouteFilesMs": 1.374, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 2.093, + "registerRouteMs": 9.524, + "getSchemaContentMs": 8.234, + "createRequestParamsMs": 0.09, + "createRequestBodyMs": 0, + "processResponsesMs": 1.052, + "createResponseSchemaMs": 0, + "buildOperationsMs": 9.689, + "sortAndMergePathsMs": 0.056, + "buildPathsMs": 0.056, + "defaultComponentsAndErrorsMs": 0.045, + "mergeSchemasMs": 0.061, + "finalizeDocumentMs": 1.064, + "totalMs": 13.426, + "scanRoutesMs": 11.997 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 11.997 + }, + { + "name": "buildOperationsMs", + "ms": 9.689 + }, + { + "name": "registerRouteMs", + "ms": 9.524 + }, + { + "name": "getSchemaContentMs", + "ms": 8.234 + }, + { + "name": "processRouteFilesMs", + "ms": 2.093 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.0", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.017, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.017, + "scanRouteFilesMs": 0.008, + "deriveRoutePathMs": 0.01, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.04, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.026, + "buildPathsMs": 0.026, + "defaultComponentsAndErrorsMs": 0.025, + "mergeSchemasMs": 0.044, + "finalizeDocumentMs": 0.871, + "totalMs": 1.229, + "scanRoutesMs": 0.008 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.871 + }, + { + "name": "mergeSchemasMs", + "ms": 0.044 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.04 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.026 + }, + { + "name": "buildPathsMs", + "ms": 0.026 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.1", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.016, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.016, + "scanRouteFilesMs": 0.175, + "deriveRoutePathMs": 0.016, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.112, + "readRouteFilesMs": 0.075, + "parseRouteFilesMs": 0.46, + "analyzeRouteFilesMs": 1.143, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 1.626, + "registerRouteMs": 7.956, + "getSchemaContentMs": 6.626, + "createRequestParamsMs": 0.079, + "createRequestBodyMs": 0, + "processResponsesMs": 1.122, + "createResponseSchemaMs": 0, + "buildOperationsMs": 8.093, + "sortAndMergePathsMs": 0.052, + "buildPathsMs": 0.052, + "defaultComponentsAndErrorsMs": 0.045, + "mergeSchemasMs": 0.059, + "finalizeDocumentMs": 0.967, + "totalMs": 11.189, + "scanRoutesMs": 9.894 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 9.894 + }, + { + "name": "buildOperationsMs", + "ms": 8.093 + }, + { + "name": "registerRouteMs", + "ms": 7.956 + }, + { + "name": "getSchemaContentMs", + "ms": 6.626 + }, + { + "name": "processRouteFilesMs", + "ms": 1.626 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.1", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.014, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.008, + "deriveRoutePathMs": 0.009, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.026, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.023, + "buildPathsMs": 0.023, + "defaultComponentsAndErrorsMs": 0.022, + "mergeSchemasMs": 0.041, + "finalizeDocumentMs": 0.808, + "totalMs": 1.122, + "scanRoutesMs": 0.008 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.808 + }, + { + "name": "mergeSchemasMs", + "ms": 0.041 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.026 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.023 + }, + { + "name": "buildPathsMs", + "ms": 0.023 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.2", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.014, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.291, + "deriveRoutePathMs": 0.029, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.16, + "readRouteFilesMs": 0.116, + "parseRouteFilesMs": 0.511, + "analyzeRouteFilesMs": 1.364, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 1.902, + "registerRouteMs": 14.157, + "getSchemaContentMs": 12.896, + "createRequestParamsMs": 0.082, + "createRequestBodyMs": 0, + "processResponsesMs": 1.04, + "createResponseSchemaMs": 0, + "buildOperationsMs": 14.309, + "sortAndMergePathsMs": 0.05, + "buildPathsMs": 0.05, + "defaultComponentsAndErrorsMs": 0.041, + "mergeSchemasMs": 0.055, + "finalizeDocumentMs": 0.923, + "totalMs": 17.809, + "scanRoutesMs": 16.502 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 16.502 + }, + { + "name": "buildOperationsMs", + "ms": 14.309 + }, + { + "name": "registerRouteMs", + "ms": 14.157 + }, + { + "name": "getSchemaContentMs", + "ms": 12.896 + }, + { + "name": "processRouteFilesMs", + "ms": 1.902 + } + ] + }, + { + "id": "next-app-drizzle-zod-3.2", + "fixture": "next/app-router/drizzle-zod-flow", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.017, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.018, + "scanRouteFilesMs": 0.008, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.031, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.028, + "buildPathsMs": 0.028, + "defaultComponentsAndErrorsMs": 0.024, + "mergeSchemasMs": 0.044, + "finalizeDocumentMs": 0.823, + "totalMs": 1.174, + "scanRoutesMs": 0.008 + }, + "router": "app", + "schemaFlavor": "drizzle-zod", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.823 + }, + { + "name": "mergeSchemasMs", + "ms": 0.044 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.031 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.028 + }, + { + "name": "buildPathsMs", + "ms": 0.028 + } + ] + }, + { + "id": "next-app-ignore-3.0", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.008, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.008, + "scanRouteFilesMs": 0.413, + "deriveRoutePathMs": 0.01, + "filterRouteCandidatesMs": 0.098, + "sourcePrecheckMs": 0.078, + "readRouteFilesMs": 0.062, + "parseRouteFilesMs": 0.074, + "analyzeRouteFilesMs": 0.099, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.182, + "registerRouteMs": 0.047, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.016, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.054, + "sortAndMergePathsMs": 0.012, + "buildPathsMs": 0.012, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.002, + "finalizeDocumentMs": 0.039, + "totalMs": 0.928, + "scanRoutesMs": 0.649 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.649 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.413 + }, + { + "name": "processRouteFilesMs", + "ms": 0.182 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.099 + }, + { + "name": "filterRouteCandidatesMs", + "ms": 0.098 + } + ] + }, + { + "id": "next-app-ignore-3.0", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.008, + "deriveRoutePathMs": 0.006, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.01, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.004, + "buildPathsMs": 0.004, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.002, + "finalizeDocumentMs": 0.025, + "totalMs": 0.096, + "scanRoutesMs": 0.008 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.025 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.01 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.008 + }, + { + "name": "scanRoutesMs", + "ms": 0.008 + }, + { + "name": "deriveRoutePathMs", + "ms": 0.006 + } + ] + }, + { + "id": "next-app-ignore-3.1", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.004, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.004, + "scanRouteFilesMs": 0.325, + "deriveRoutePathMs": 0.007, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.077, + "readRouteFilesMs": 0.065, + "parseRouteFilesMs": 0.024, + "analyzeRouteFilesMs": 0.054, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.085, + "registerRouteMs": 0.011, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.002, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.016, + "sortAndMergePathsMs": 0.005, + "buildPathsMs": 0.005, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.001, + "finalizeDocumentMs": 0.026, + "totalMs": 0.571, + "scanRoutesMs": 0.426 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.426 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.325 + }, + { + "name": "processRouteFilesMs", + "ms": 0.085 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.077 + }, + { + "name": "readRouteFilesMs", + "ms": 0.065 + } + ] + }, + { + "id": "next-app-ignore-3.1", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.016, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.016, + "scanRouteFilesMs": 0.012, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0.003, + "sourcePrecheckMs": 0.022, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.011, + "buildPathsMs": 0.011, + "defaultComponentsAndErrorsMs": 0.004, + "mergeSchemasMs": 0.004, + "finalizeDocumentMs": 0.063, + "totalMs": 0.196, + "scanRoutesMs": 0.012 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.063 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.022 + }, + { + "name": "prepareTemplateMs", + "ms": 0.016 + }, + { + "name": "prepareDocumentMs", + "ms": 0.016 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.012 + } + ] + }, + { + "id": "next-app-ignore-3.2", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.006, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.006, + "scanRouteFilesMs": 0.342, + "deriveRoutePathMs": 0.008, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.069, + "readRouteFilesMs": 0.057, + "parseRouteFilesMs": 0.048, + "analyzeRouteFilesMs": 0.111, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.166, + "registerRouteMs": 0.025, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0.006, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.031, + "sortAndMergePathsMs": 0.006, + "buildPathsMs": 0.006, + "defaultComponentsAndErrorsMs": 0.002, + "mergeSchemasMs": 0.002, + "finalizeDocumentMs": 0.028, + "totalMs": 0.686, + "scanRoutesMs": 0.54 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 0.54 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.342 + }, + { + "name": "processRouteFilesMs", + "ms": 0.166 + }, + { + "name": "analyzeRouteFilesMs", + "ms": 0.111 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.069 + } + ] + }, + { + "id": "next-app-ignore-3.2", + "fixture": "next/app-router/ignore-routes", + "framework": "nextjs", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./next", + "profile": { + "prepareTemplateMs": 0.005, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.005, + "scanRouteFilesMs": 0.007, + "deriveRoutePathMs": 0.006, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.01, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.004, + "buildPathsMs": 0.004, + "defaultComponentsAndErrorsMs": 0.001, + "mergeSchemasMs": 0.001, + "finalizeDocumentMs": 0.039, + "totalMs": 0.106, + "scanRoutesMs": 0.007 + }, + "router": "app", + "schemaFlavor": "filtered", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.039 + }, + { + "name": "sourcePrecheckMs", + "ms": 0.01 + }, + { + "name": "scanRouteFilesMs", + "ms": 0.007 + }, + { + "name": "scanRoutesMs", + "ms": 0.007 + }, + { + "name": "deriveRoutePathMs", + "ms": 0.006 + } + ] + }, + { + "id": "tanstack-core-3.0", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.025, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.025, + "scanRouteFilesMs": 0.12, + "deriveRoutePathMs": 0.214, + "filterRouteCandidatesMs": 0.002, + "sourcePrecheckMs": 0.271, + "readRouteFilesMs": 0.061, + "parseRouteFilesMs": 0.084, + "analyzeRouteFilesMs": 0.295, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.449, + "registerRouteMs": 1.113, + "getSchemaContentMs": 0.858, + "createRequestParamsMs": 0.023, + "createRequestBodyMs": 0, + "processResponsesMs": 0.183, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.149, + "sortAndMergePathsMs": 0.057, + "buildPathsMs": 0.057, + "defaultComponentsAndErrorsMs": 0.035, + "mergeSchemasMs": 0.039, + "finalizeDocumentMs": 0.368, + "totalMs": 2.751, + "scanRoutesMs": 1.718 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.718 + }, + { + "name": "buildOperationsMs", + "ms": 1.149 + }, + { + "name": "registerRouteMs", + "ms": 1.113 + }, + { + "name": "getSchemaContentMs", + "ms": 0.858 + }, + { + "name": "processRouteFilesMs", + "ms": 0.449 + } + ] + }, + { + "id": "tanstack-core-3.0", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.023, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.023, + "scanRouteFilesMs": 0.007, + "deriveRoutePathMs": 0.027, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.019, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.026, + "buildPathsMs": 0.026, + "defaultComponentsAndErrorsMs": 0.024, + "mergeSchemasMs": 0.024, + "finalizeDocumentMs": 0.359, + "totalMs": 0.607, + "scanRoutesMs": 0.007 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.359 + }, + { + "name": "deriveRoutePathMs", + "ms": 0.027 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.026 + }, + { + "name": "buildPathsMs", + "ms": 0.026 + }, + { + "name": "defaultComponentsAndErrorsMs", + "ms": 0.024 + } + ] + }, + { + "id": "tanstack-core-3.1", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.014, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.015, + "scanRouteFilesMs": 0.058, + "deriveRoutePathMs": 0.032, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.147, + "readRouteFilesMs": 0.092, + "parseRouteFilesMs": 0.142, + "analyzeRouteFilesMs": 0.289, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.455, + "registerRouteMs": 1.224, + "getSchemaContentMs": 0.902, + "createRequestParamsMs": 0.032, + "createRequestBodyMs": 0, + "processResponsesMs": 0.239, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.261, + "sortAndMergePathsMs": 0.037, + "buildPathsMs": 0.037, + "defaultComponentsAndErrorsMs": 0.031, + "mergeSchemasMs": 0.031, + "finalizeDocumentMs": 0.355, + "totalMs": 2.433, + "scanRoutesMs": 1.773 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.773 + }, + { + "name": "buildOperationsMs", + "ms": 1.261 + }, + { + "name": "registerRouteMs", + "ms": 1.224 + }, + { + "name": "getSchemaContentMs", + "ms": 0.902 + }, + { + "name": "processRouteFilesMs", + "ms": 0.455 + } + ] + }, + { + "id": "tanstack-core-3.1", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.016, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.016, + "scanRouteFilesMs": 0.006, + "deriveRoutePathMs": 0.02, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.018, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.024, + "buildPathsMs": 0.024, + "defaultComponentsAndErrorsMs": 0.022, + "mergeSchemasMs": 0.024, + "finalizeDocumentMs": 0.327, + "totalMs": 0.542, + "scanRoutesMs": 0.006 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.327 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.024 + }, + { + "name": "buildPathsMs", + "ms": 0.024 + }, + { + "name": "mergeSchemasMs", + "ms": 0.024 + }, + { + "name": "defaultComponentsAndErrorsMs", + "ms": 0.022 + } + ] + }, + { + "id": "tanstack-core-3.2", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.015, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.015, + "scanRouteFilesMs": 0.07, + "deriveRoutePathMs": 0.017, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.089, + "readRouteFilesMs": 0.063, + "parseRouteFilesMs": 0.076, + "analyzeRouteFilesMs": 0.244, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.346, + "registerRouteMs": 1.054, + "getSchemaContentMs": 0.827, + "createRequestParamsMs": 0.019, + "createRequestBodyMs": 0, + "processResponsesMs": 0.168, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.086, + "sortAndMergePathsMs": 0.032, + "buildPathsMs": 0.032, + "defaultComponentsAndErrorsMs": 0.025, + "mergeSchemasMs": 0.027, + "finalizeDocumentMs": 0.367, + "totalMs": 2.088, + "scanRoutesMs": 1.503 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.503 + }, + { + "name": "buildOperationsMs", + "ms": 1.086 + }, + { + "name": "registerRouteMs", + "ms": 1.054 + }, + { + "name": "getSchemaContentMs", + "ms": 0.827 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.367 + } + ] + }, + { + "id": "tanstack-core-3.2", + "fixture": "tanstack/core-flow", + "framework": "tanstack", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./vite", + "profile": { + "prepareTemplateMs": 0.015, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.015, + "scanRouteFilesMs": 0.005, + "deriveRoutePathMs": 0.016, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.019, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.023, + "buildPathsMs": 0.023, + "defaultComponentsAndErrorsMs": 0.02, + "mergeSchemasMs": 0.023, + "finalizeDocumentMs": 0.317, + "totalMs": 0.52, + "scanRoutesMs": 0.005 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.317 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.023 + }, + { + "name": "buildPathsMs", + "ms": 0.023 + }, + { + "name": "mergeSchemasMs", + "ms": 0.023 + }, + { + "name": "defaultComponentsAndErrorsMs", + "ms": 0.02 + } + ] + }, + { + "id": "react-router-core-3.0", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "cold", + "openapiVersion": "3.0", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.072, + "deriveRoutePathMs": 0.016, + "filterRouteCandidatesMs": 0.001, + "sourcePrecheckMs": 0.073, + "readRouteFilesMs": 0.055, + "parseRouteFilesMs": 0.079, + "analyzeRouteFilesMs": 0.212, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.307, + "registerRouteMs": 1.052, + "getSchemaContentMs": 0.781, + "createRequestParamsMs": 0.018, + "createRequestBodyMs": 0, + "processResponsesMs": 0.21, + "createResponseSchemaMs": 0, + "buildOperationsMs": 1.09, + "sortAndMergePathsMs": 0.025, + "buildPathsMs": 0.025, + "defaultComponentsAndErrorsMs": 0.029, + "mergeSchemasMs": 0.025, + "finalizeDocumentMs": 0.325, + "totalMs": 2.001, + "scanRoutesMs": 1.469 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.469 + }, + { + "name": "buildOperationsMs", + "ms": 1.09 + }, + { + "name": "registerRouteMs", + "ms": 1.052 + }, + { + "name": "getSchemaContentMs", + "ms": 0.781 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.325 + } + ] + }, + { + "id": "react-router-core-3.0", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "warm", + "openapiVersion": "3.0", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.013, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.012, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.014, + "buildPathsMs": 0.014, + "defaultComponentsAndErrorsMs": 0.015, + "mergeSchemasMs": 0.015, + "finalizeDocumentMs": 0.303, + "totalMs": 0.457, + "scanRoutesMs": 0.004 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.303 + }, + { + "name": "defaultComponentsAndErrorsMs", + "ms": 0.015 + }, + { + "name": "mergeSchemasMs", + "ms": 0.015 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.014 + }, + { + "name": "buildPathsMs", + "ms": 0.014 + } + ] + }, + { + "id": "react-router-core-3.1", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "cold", + "openapiVersion": "3.1", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.013, + "scanRouteFilesMs": 0.045, + "deriveRoutePathMs": 0.013, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.061, + "readRouteFilesMs": 0.045, + "parseRouteFilesMs": 0.054, + "analyzeRouteFilesMs": 0.18, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.246, + "registerRouteMs": 0.829, + "getSchemaContentMs": 0.646, + "createRequestParamsMs": 0.014, + "createRequestBodyMs": 0, + "processResponsesMs": 0.138, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.868, + "sortAndMergePathsMs": 0.019, + "buildPathsMs": 0.019, + "defaultComponentsAndErrorsMs": 0.019, + "mergeSchemasMs": 0.021, + "finalizeDocumentMs": 0.295, + "totalMs": 1.61, + "scanRoutesMs": 1.158 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.158 + }, + { + "name": "buildOperationsMs", + "ms": 0.868 + }, + { + "name": "registerRouteMs", + "ms": 0.829 + }, + { + "name": "getSchemaContentMs", + "ms": 0.646 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.295 + } + ] + }, + { + "id": "react-router-core-3.1", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "warm", + "openapiVersion": "3.1", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.013, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.011, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.014, + "buildPathsMs": 0.014, + "defaultComponentsAndErrorsMs": 0.015, + "mergeSchemasMs": 0.016, + "finalizeDocumentMs": 0.285, + "totalMs": 0.439, + "scanRoutesMs": 0.004 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.285 + }, + { + "name": "mergeSchemasMs", + "ms": 0.016 + }, + { + "name": "defaultComponentsAndErrorsMs", + "ms": 0.015 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.014 + }, + { + "name": "buildPathsMs", + "ms": 0.014 + } + ] + }, + { + "id": "react-router-core-3.2", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "cold", + "openapiVersion": "3.2", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.013, + "scanRouteFilesMs": 0.066, + "deriveRoutePathMs": 0.012, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.057, + "readRouteFilesMs": 0.042, + "parseRouteFilesMs": 0.051, + "analyzeRouteFilesMs": 0.165, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0.228, + "registerRouteMs": 0.811, + "getSchemaContentMs": 0.639, + "createRequestParamsMs": 0.011, + "createRequestBodyMs": 0, + "processResponsesMs": 0.133, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0.842, + "sortAndMergePathsMs": 0.017, + "buildPathsMs": 0.017, + "defaultComponentsAndErrorsMs": 0.017, + "mergeSchemasMs": 0.022, + "finalizeDocumentMs": 0.288, + "totalMs": 1.572, + "scanRoutesMs": 1.136 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "scanRoutesMs", + "ms": 1.136 + }, + { + "name": "buildOperationsMs", + "ms": 0.842 + }, + { + "name": "registerRouteMs", + "ms": 0.811 + }, + { + "name": "getSchemaContentMs", + "ms": 0.639 + }, + { + "name": "finalizeDocumentMs", + "ms": 0.288 + } + ] + }, + { + "id": "react-router-core-3.2", + "fixture": "react-router/core-flow", + "framework": "reactrouter", + "mode": "warm", + "openapiVersion": "3.2", + "packageEntry": "./react-router", + "profile": { + "prepareTemplateMs": 0.013, + "loadCustomFragmentsMs": 0, + "prepareDocumentMs": 0.014, + "scanRouteFilesMs": 0.004, + "deriveRoutePathMs": 0.011, + "filterRouteCandidatesMs": 0, + "sourcePrecheckMs": 0.011, + "readRouteFilesMs": 0, + "parseRouteFilesMs": 0, + "analyzeRouteFilesMs": 0, + "typescriptResponseInferenceMs": 0, + "processRouteFilesMs": 0, + "registerRouteMs": 0, + "getSchemaContentMs": 0, + "createRequestParamsMs": 0, + "createRequestBodyMs": 0, + "processResponsesMs": 0, + "createResponseSchemaMs": 0, + "buildOperationsMs": 0, + "sortAndMergePathsMs": 0.014, + "buildPathsMs": 0.014, + "defaultComponentsAndErrorsMs": 0.015, + "mergeSchemasMs": 0.015, + "finalizeDocumentMs": 0.281, + "totalMs": 0.431, + "scanRoutesMs": 0.004 + }, + "router": "generic", + "schemaFlavor": "typescript", + "topPhases": [ + { + "name": "finalizeDocumentMs", + "ms": 0.281 + }, + { + "name": "defaultComponentsAndErrorsMs", + "ms": 0.015 + }, + { + "name": "mergeSchemasMs", + "ms": 0.015 + }, + { + "name": "prepareDocumentMs", + "ms": 0.014 + }, + { + "name": "sortAndMergePathsMs", + "ms": 0.014 + } + ] + } + ] +} diff --git a/tests/bench/generator/openapi-generator.profile.test.ts b/tests/bench/generator/openapi-generator.profile.test.ts index 285bac7c..1cee6621 100644 --- a/tests/bench/generator/openapi-generator.profile.test.ts +++ b/tests/bench/generator/openapi-generator.profile.test.ts @@ -63,6 +63,9 @@ function summarizeProfiles( profiles.map((profile) => profile.defaultComponentsAndErrorsMs), ), mergeSchemasMs: average(profiles.map((profile) => profile.mergeSchemasMs)), + zodPreScanMs: average(profiles.map((profile) => profile.zodPreScanMs)), + zodPreprocessMs: average(profiles.map((profile) => profile.zodPreprocessMs)), + zodConvertMs: average(profiles.map((profile) => profile.zodConvertMs)), finalizeDocumentMs: average(profiles.map((profile) => profile.finalizeDocumentMs)), totalMs: average(profiles.map((profile) => profile.totalMs)), }; diff --git a/tests/bench/generator/openapi-generator.report.test.ts b/tests/bench/generator/openapi-generator.report.test.ts new file mode 100644 index 00000000..f6c072f2 --- /dev/null +++ b/tests/bench/generator/openapi-generator.report.test.ts @@ -0,0 +1,143 @@ +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import type { GeneratorPerformanceProfile } from "next-openapi-gen"; +import { afterAll, beforeAll, describe, expect, it } from "vitest"; + +import { + cleanupBenchProjects, + collectProfiles, + collectWarmProfiles, + createBenchProjects, + getBenchmarkScenarios, + type BenchProject, +} from "./benchmark-matrix.js"; + +type GeneratorBenchMode = "cold" | "warm"; + +type GeneratorBenchSummary = { + id: string; + fixture: string; + framework: string; + mode: GeneratorBenchMode; + openapiVersion: string; + packageEntry: string; + profile: GeneratorPerformanceProfile; + router: string; + schemaFlavor: string; + topPhases: Array<{ + name: keyof GeneratorPerformanceProfile; + ms: number; + }>; +}; + +type GeneratorBenchReport = { + generatedAt: string; + iterations: number; + machine: { + arch: string; + cpus: number; + model: string; + node: string; + platform: NodeJS.Platform; + release: string; + }; + scenarios: GeneratorBenchSummary[]; +}; + +const reportFilePath = + process.env.GENERATOR_BENCH_OUTPUT ?? getRepoPath("tests/bench/generator/current.json"); +const iterations = Number(process.env.GENERATOR_BENCH_ITERATIONS ?? "3"); + +function average(values: number[]): number { + return Number((values.reduce((sum, value) => sum + value, 0) / values.length).toFixed(3)); +} + +function averageProfile(profiles: GeneratorPerformanceProfile[]): GeneratorPerformanceProfile { + const profileKeys = Object.keys(profiles[0] ?? {}) as Array; + return Object.fromEntries( + profileKeys.map((key) => [key, average(profiles.map((profile) => profile[key]))]), + ) as GeneratorPerformanceProfile; +} + +function summarizeProject( + project: BenchProject, + mode: GeneratorBenchMode, + profiles: GeneratorPerformanceProfile[], +): GeneratorBenchSummary { + const profile = averageProfile(profiles); + return { + id: project.scenario.id, + fixture: project.scenario.fixtureName, + framework: project.scenario.frameworkKind, + mode, + openapiVersion: project.scenario.openapiVersion, + packageEntry: project.scenario.packageEntry, + profile, + router: project.scenario.router, + schemaFlavor: project.scenario.schemaFlavor, + topPhases: getTopPhases(profile), + }; +} + +function getTopPhases(profile: GeneratorPerformanceProfile): GeneratorBenchSummary["topPhases"] { + return (Object.entries(profile) as Array<[keyof GeneratorPerformanceProfile, number]>) + .filter(([key]) => key !== "totalMs") + .toSorted(([, a], [, b]) => b - a) + .slice(0, 5) + .map(([name, ms]) => ({ name, ms })); +} + +function createReport(projects: Map): GeneratorBenchReport { + const scenarios = getBenchmarkScenarios("profile"); + const cpu = os.cpus()[0]; + return { + generatedAt: new Date().toISOString(), + iterations, + machine: { + arch: os.arch(), + cpus: Math.max(1, os.cpus().length), + model: cpu?.model ?? "unknown", + node: process.version, + platform: process.platform, + release: os.release(), + }, + scenarios: scenarios.flatMap((scenario) => { + const project = projects.get(scenario.id)!; + return [ + summarizeProject(project, "cold", collectProfiles(project, iterations)), + summarizeProject(project, "warm", collectWarmProfiles(project, iterations)), + ]; + }), + }; +} + +function getRepoPath(...segments: string[]): string { + return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../..", ...segments); +} + +describe.sequential("OpenApiGenerator benchmark report", () => { + const scenarios = getBenchmarkScenarios("profile"); + let projects: Map; + + beforeAll(() => { + projects = createBenchProjects(scenarios); + }); + + afterAll(() => { + cleanupBenchProjects(projects.values()); + }); + + it("writes cold and warm generator timing summaries", () => { + const report = createReport(projects); + fs.mkdirSync(path.dirname(reportFilePath), { recursive: true }); + fs.writeFileSync(reportFilePath, `${JSON.stringify(report, null, 2)}\n`); + + expect(report.scenarios.length).toBe(scenarios.length * 2); + for (const scenario of report.scenarios) { + expect(scenario.profile.totalMs).toBeGreaterThan(0); + } + }); +}); diff --git a/tests/bench/generator/openapi-generator.scale.test.ts b/tests/bench/generator/openapi-generator.scale.test.ts new file mode 100644 index 00000000..a35535ea --- /dev/null +++ b/tests/bench/generator/openapi-generator.scale.test.ts @@ -0,0 +1,105 @@ +import type { GeneratorPerformanceProfile } from "next-openapi-gen"; +import { afterAll, beforeAll, describe, expect, it } from "vitest"; + +import { + cleanupBenchProjects, + collectProfiles, + collectWarmProfiles, + createBenchProjects, + getBenchmarkScenarios, + type BenchProject, +} from "./benchmark-matrix.js"; + +type ProfileSummary = GeneratorPerformanceProfile & { + fixture: string; + packageEntry: string; + framework: string; + router: string; + schemaFlavor: string; + openapiVersion: string; + mode: "cold" | "warm"; +}; + +const ITERATIONS = 3; + +function average(values: number[]): number { + return Number((values.reduce((sum, value) => sum + value, 0) / values.length).toFixed(3)); +} + +function summarizeProfiles( + project: BenchProject, + mode: ProfileSummary["mode"], + profiles: GeneratorPerformanceProfile[], +): ProfileSummary { + return { + fixture: project.scenario.fixtureName, + packageEntry: project.scenario.packageEntry, + framework: project.scenario.frameworkKind, + router: project.scenario.router, + schemaFlavor: project.scenario.schemaFlavor, + openapiVersion: project.scenario.openapiVersion, + mode, + prepareTemplateMs: average(profiles.map((profile) => profile.prepareTemplateMs)), + loadCustomFragmentsMs: average(profiles.map((profile) => profile.loadCustomFragmentsMs)), + prepareDocumentMs: average(profiles.map((profile) => profile.prepareDocumentMs)), + scanRouteFilesMs: average(profiles.map((profile) => profile.scanRouteFilesMs)), + deriveRoutePathMs: average(profiles.map((profile) => profile.deriveRoutePathMs)), + filterRouteCandidatesMs: average(profiles.map((profile) => profile.filterRouteCandidatesMs)), + sourcePrecheckMs: average(profiles.map((profile) => profile.sourcePrecheckMs)), + readRouteFilesMs: average(profiles.map((profile) => profile.readRouteFilesMs)), + parseRouteFilesMs: average(profiles.map((profile) => profile.parseRouteFilesMs)), + analyzeRouteFilesMs: average(profiles.map((profile) => profile.analyzeRouteFilesMs)), + typescriptResponseInferenceMs: average( + profiles.map((profile) => profile.typescriptResponseInferenceMs), + ), + processRouteFilesMs: average(profiles.map((profile) => profile.processRouteFilesMs)), + registerRouteMs: average(profiles.map((profile) => profile.registerRouteMs)), + getSchemaContentMs: average(profiles.map((profile) => profile.getSchemaContentMs)), + createRequestParamsMs: average(profiles.map((profile) => profile.createRequestParamsMs)), + createRequestBodyMs: average(profiles.map((profile) => profile.createRequestBodyMs)), + processResponsesMs: average(profiles.map((profile) => profile.processResponsesMs)), + createResponseSchemaMs: average(profiles.map((profile) => profile.createResponseSchemaMs)), + buildOperationsMs: average(profiles.map((profile) => profile.buildOperationsMs)), + scanRoutesMs: average(profiles.map((profile) => profile.scanRoutesMs)), + sortAndMergePathsMs: average(profiles.map((profile) => profile.sortAndMergePathsMs)), + buildPathsMs: average(profiles.map((profile) => profile.buildPathsMs)), + defaultComponentsAndErrorsMs: average( + profiles.map((profile) => profile.defaultComponentsAndErrorsMs), + ), + mergeSchemasMs: average(profiles.map((profile) => profile.mergeSchemasMs)), + zodPreScanMs: average(profiles.map((profile) => profile.zodPreScanMs)), + zodPreprocessMs: average(profiles.map((profile) => profile.zodPreprocessMs)), + zodConvertMs: average(profiles.map((profile) => profile.zodConvertMs)), + finalizeDocumentMs: average(profiles.map((profile) => profile.finalizeDocumentMs)), + totalMs: average(profiles.map((profile) => profile.totalMs)), + }; +} + +describe.sequential("OpenApiGenerator scale profiling", () => { + const scenarios = getBenchmarkScenarios("scale"); + let projects: Map; + + beforeAll(() => { + projects = createBenchProjects(scenarios); + }); + + afterAll(() => { + cleanupBenchProjects(projects.values()); + }); + + it("prints stable timing summaries for at-scale fixtures", () => { + const summaries = scenarios.flatMap((scenario) => { + const project = projects.get(scenario.id)!; + return [ + summarizeProfiles(project, "cold", collectProfiles(project, ITERATIONS)), + summarizeProfiles(project, "warm", collectWarmProfiles(project, ITERATIONS)), + ]; + }); + + console.table(summaries); + + summaries.forEach((summary) => { + expect(summary.totalMs).toBeGreaterThan(0); + }); + }, 120_000); +}); diff --git a/tests/bench/generator/route-parse-worker.bench.ts b/tests/bench/generator/route-parse-worker.bench.ts new file mode 100644 index 00000000..8a6058e3 --- /dev/null +++ b/tests/bench/generator/route-parse-worker.bench.ts @@ -0,0 +1,123 @@ +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { Worker } from "node:worker_threads"; + +import { parse } from "@babel/parser"; +import { afterAll, beforeAll, bench, describe } from "vitest"; + +import { + cleanupBenchProjects, + createBenchProjects, + getBenchmarkScenarios, + type BenchProject, +} from "./benchmark-matrix.js"; + +type RouteSource = { + filePath: string; + source: string; +}; + +const workerPath = path.join( + path.dirname(fileURLToPath(import.meta.url)), + "route-parse-worker.mjs", +); + +function collectRouteSources(project: BenchProject): RouteSource[] { + const apiDir = path.join(project.project.root, "src", "app", "api"); + const sources: RouteSource[] = []; + collectFiles(apiDir, sources); + return sources; +} + +function collectFiles(dir: string, sources: RouteSource[]): void { + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const filePath = path.join(dir, entry.name); + if (entry.isDirectory()) { + collectFiles(filePath, sources); + continue; + } + + if (entry.name.endsWith(".ts") || entry.name.endsWith(".tsx")) { + sources.push({ + filePath, + source: fs.readFileSync(filePath, "utf-8"), + }); + } + } +} + +function parseSequentially(sources: RouteSource[]): void { + for (const { filePath, source } of sources) { + parse(source, { + sourceFilename: filePath, + sourceType: "module", + plugins: ["typescript", "jsx", "decorators-legacy"], + }); + } +} + +async function parseWithWorkers(sources: RouteSource[]): Promise { + const workerCount = Math.max(1, Math.min(sources.length, os.availableParallelism() - 1)); + let nextIndex = 0; + await Promise.all( + Array.from({ length: workerCount }, () => { + const worker = new Worker(workerPath); + return new Promise((resolve, reject) => { + worker.on("message", (message: { ok: boolean; error?: string }) => { + if (!message.ok) { + reject(new Error(message.error ?? "Worker route parse failed.")); + void worker.terminate(); + return; + } + sendNext(); + }); + worker.on("error", reject); + worker.on("exit", (code) => { + if (code !== 0) { + reject(new Error(`Route parse worker exited with ${code}.`)); + } + }); + + function sendNext(): void { + const source = sources[nextIndex++]; + if (!source) { + void worker.terminate().then(() => resolve(), reject); + return; + } + // oxlint-disable-next-line unicorn/require-post-message-target-origin -- worker_threads postMessage has no targetOrigin. + worker.postMessage(source); + } + + sendNext(); + }); + }), + ); +} + +describe("route parse worker prototype", () => { + const scenario = getBenchmarkScenarios("cold").find(({ id }) => id === "next-app-core-3.2"); + if (!scenario) { + throw new Error("Missing next-app-core-3.2 benchmark scenario."); + } + let projects: Map; + let sources: RouteSource[]; + + beforeAll(() => { + projects = createBenchProjects([scenario]); + sources = collectRouteSources(projects.get(scenario.id)!); + }); + + afterAll(() => { + cleanupBenchProjects(projects.values()); + }); + + bench("sequential Babel parse", () => { + parseSequentially(sources); + }); + + bench("worker pool Babel parse", async () => { + await parseWithWorkers(sources); + }); +}); diff --git a/tests/bench/generator/route-parse-worker.mjs b/tests/bench/generator/route-parse-worker.mjs new file mode 100644 index 00000000..b611b995 --- /dev/null +++ b/tests/bench/generator/route-parse-worker.mjs @@ -0,0 +1,22 @@ +import { parentPort } from "node:worker_threads"; + +import { parse } from "@babel/parser"; + +/* oxlint-disable unicorn/require-post-message-target-origin -- worker_threads postMessage has no targetOrigin. */ + +parentPort?.on("message", ({ filePath, source }) => { + try { + parse(source, { + sourceFilename: filePath, + sourceType: "module", + plugins: ["typescript", "jsx", "decorators-legacy"], + }); + parentPort?.postMessage({ filePath, ok: true }); + } catch (error) { + parentPort?.postMessage({ + filePath, + ok: false, + error: error instanceof Error ? error.message : String(error), + }); + } +}); diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/app-router/core-flow-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..eb61e09e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-app-core-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/api-keys/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..60a18f45 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId scaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId scaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId scaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/api-keys/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..ca4bd72e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId scaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId scaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/attachments/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..a4a9da22 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId scaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId scaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId scaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/attachments/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..44277397 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId scaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId scaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/audit-logs/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..559429d3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId scaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId scaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId scaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/audit-logs/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..87e6af65 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId scaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId scaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/catalog-items/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..884977d4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId scaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId scaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId scaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/catalog-items/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..8fcac875 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId scaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId scaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/comments/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..cd6870d7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId scaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId scaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId scaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/comments/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..bc787633 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId scaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId scaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/customers/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..e928b38e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId scaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId scaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId scaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/customers/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..a87ca73f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId scaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId scaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/departments/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..8c39593e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId scaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId scaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId scaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/departments/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..9732d716 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId scaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId scaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/documents/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..7cfba981 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId scaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId scaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId scaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/documents/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..51cf58b7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId scaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId scaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/exports/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..2f5391e4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId scaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId scaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId scaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/exports/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..bd661564 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId scaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId scaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/invoices/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..545291cb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId scaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId scaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId scaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/invoices/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..52097c5c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId scaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId scaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/members/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..14efde96 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId scaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId scaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId scaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/members/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..f85c93dc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId scaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId scaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/notifications/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..6cd33481 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId scaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId scaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId scaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/notifications/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..3bd9e33e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId scaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId scaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/orders/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..d74795e8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId scaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId scaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId scaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/orders/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..ed1d5d05 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId scaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId scaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..e52bbab8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId scaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId scaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId scaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..7c08a6c6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId scaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId scaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..0dd79a0c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId scaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId scaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId scaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..66c5044b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId scaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId scaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/payments/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..7b91bd1f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId scaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId scaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId scaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/payments/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..19cfa936 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId scaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId scaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/products/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..869c4828 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId scaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId scaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId scaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/products/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..58a4b6fd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId scaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId scaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..baccadef --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId scaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId scaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId scaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..c7b79fcb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId scaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId scaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/refunds/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..3952d28f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId scaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId scaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId scaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/refunds/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..1218334d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId scaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId scaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/reports/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..8e6d3325 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId scaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId scaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId scaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/reports/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..fbdf679d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId scaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId scaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/sessions/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..af3512ae --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId scaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId scaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId scaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/sessions/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..25bdaddf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId scaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId scaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/subscriptions/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..0f25e3c9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId scaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId scaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId scaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/subscriptions/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..c33639a2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId scaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId scaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/teams/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..829ddd8b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId scaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId scaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId scaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/teams/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..ed052704 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId scaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId scaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/webhooks/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..917423cc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId scaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId scaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId scaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/webhooks/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..bb1f3010 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId scaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId scaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/workspaces/[id]/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..16bd9bb6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId scaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId scaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId scaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/workspaces/route.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..da91a7b4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId scaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId scaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/api-keys-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/api-keys-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/attachments-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/attachments-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/audit-logs-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/audit-logs-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/catalog-items-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/catalog-items-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/comments-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/comments-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/customers-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/customers-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/departments-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/departments-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/documents-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/documents-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/exports-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/exports-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/invoices-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/invoices-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/members-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/members-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/notifications-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/notifications-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/orders-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/orders-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/organizations-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/organizations-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/payments-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/payments-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/products-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/products-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/projects-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/projects-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/refunds-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/refunds-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/reports-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/reports-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/sessions-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/sessions-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/subscriptions-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/subscriptions-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/tasks-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/tasks-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/teams-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/teams-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/webhooks-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/webhooks-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/workspaces-entity.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/workspaces-input.ts b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/src/types/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..a2f62973 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.0.json @@ -0,0 +1,122 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "App Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale TypeScript fixture for realistic generator benchmarks" + }, + "externalDocs": { + "description": "Core flow fixture guide", + "url": "https://example.com/docs/core-flow" + }, + "security": [ + { + "BearerAuth": [] + } + ], + "components": { + "securitySchemes": { + "BearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + }, + "BasicAuth": { + "type": "http", + "scheme": "basic" + }, + "SessionCookie": { + "type": "apiKey", + "in": "cookie", + "name": "sb-access-token" + }, + "ApiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "X-API-Key" + }, + "PartnerToken": { + "type": "apiKey", + "in": "header", + "name": "X-Partner-Token" + } + } + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "401", + "500" + ], + "public": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ], + "crud": [ + "409" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "409": { + "description": "Conflict", + "variables": { + "ERROR_MESSAGE": "Resource already exists" + } + }, + "429": { + "description": "Too Many Requests", + "variables": { + "ERROR_MESSAGE": "Rate limit exceeded" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..0f4e2256 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.1.json @@ -0,0 +1,123 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "App Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale TypeScript fixture for realistic generator benchmarks" + }, + "jsonSchemaDialect": "https://spec.openapis.org/oas/3.1/dialect/base", + "externalDocs": { + "description": "Core flow fixture guide", + "url": "https://example.com/docs/core-flow" + }, + "security": [ + { + "BearerAuth": [] + } + ], + "components": { + "securitySchemes": { + "BearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + }, + "BasicAuth": { + "type": "http", + "scheme": "basic" + }, + "SessionCookie": { + "type": "apiKey", + "in": "cookie", + "name": "sb-access-token" + }, + "ApiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "X-API-Key" + }, + "PartnerToken": { + "type": "apiKey", + "in": "header", + "name": "X-Partner-Token" + } + } + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "401", + "500" + ], + "public": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ], + "crud": [ + "409" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "409": { + "description": "Conflict", + "variables": { + "ERROR_MESSAGE": "Resource already exists" + } + }, + "429": { + "description": "Too Many Requests", + "variables": { + "ERROR_MESSAGE": "Rate limit exceeded" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..d0299f02 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow-at-scale/templates/openapi-3.2.json @@ -0,0 +1,131 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "App Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale TypeScript fixture for realistic generator benchmarks" + }, + "$self": "https://example.com/fixtures/core-flow/openapi.json", + "jsonSchemaDialect": "https://spec.openapis.org/oas/3.2/dialect/2025-09-17", + "servers": [ + { + "url": "https://api.example.com", + "description": "Production", + "name": "production" + } + ], + "externalDocs": { + "description": "Core flow fixture guide", + "url": "https://example.com/docs/core-flow" + }, + "security": [ + { + "BearerAuth": [] + } + ], + "components": { + "securitySchemes": { + "BearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + }, + "BasicAuth": { + "type": "http", + "scheme": "basic" + }, + "SessionCookie": { + "type": "apiKey", + "in": "cookie", + "name": "sb-access-token" + }, + "ApiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "X-API-Key" + }, + "PartnerToken": { + "type": "apiKey", + "in": "header", + "name": "X-Partner-Token" + } + } + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "401", + "500" + ], + "public": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ], + "crud": [ + "409" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "409": { + "description": "Conflict", + "variables": { + "ERROR_MESSAGE": "Resource already exists" + } + }, + "429": { + "description": "Too Many Requests", + "variables": { + "ERROR_MESSAGE": "Rate limit exceeded" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/core-flow/src/app/api/organizations/[organizationId]/route.ts b/tests/fixtures/projects/next/app-router/core-flow/src/app/api/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..8efa7aaf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow/src/app/api/organizations/[organizationId]/route.ts @@ -0,0 +1,15 @@ +import { z } from "zod"; + +export const organizationParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); + +/** + * Get organization + * @response CurrentUserResponse + * @openapi + */ +export async function GET(_request: Request, context: { params: Promise<{ organizationId: string }> }) { + organizationParamsSchema.parse(await context.params); + return Response.json({ id: "00000000-0000-0000-0000-000000000001" }); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow/src/app/api/search/route.ts b/tests/fixtures/projects/next/app-router/core-flow/src/app/api/search/route.ts new file mode 100644 index 00000000..2278033f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow/src/app/api/search/route.ts @@ -0,0 +1,34 @@ +import { z } from "zod"; + +export const SearchQuerySchema = z.object({ + query: z.string().min(1), + page: z.coerce.number().int().positive().optional(), +}); + +export const SearchRequestBodySchema = z.object({ + query: z.string().min(1), + facets: z.array(z.string()).optional(), +}); + +/** + * Search API with HTTP QUERY semantics + * @summary Query search index + * @method QUERY + * @response ProductListResponse + * @openapi + */ +export async function GET(request: Request) { + SearchQuerySchema.parse(Object.fromEntries(new URL(request.url).searchParams.entries())); + return Response.json({ results: [] }); +} + +/** + * Search API with JSON body semantics + * @summary Search with a JSON body + * @response ProductListResponse + * @openapi + */ +export async function POST(request: Request) { + SearchRequestBodySchema.parse(await request.json()); + return Response.json({ results: [] }); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow/src/app/api/webhooks/payment/route.ts b/tests/fixtures/projects/next/app-router/core-flow/src/app/api/webhooks/payment/route.ts new file mode 100644 index 00000000..acbb3c03 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/core-flow/src/app/api/webhooks/payment/route.ts @@ -0,0 +1,18 @@ +import { z } from "zod"; + +export const PaymentWebhookPayload = z.object({ + eventId: z.string().uuid(), + amount: z.number().int().positive(), +}); + +/** + * Payment webhook + * @webhook paymentReceived + * @body PaymentWebhookPayload + * @response 204 + * @openapi + */ +export async function POST(request: Request) { + const payload = PaymentWebhookPayload.parse(await request.json()); + return new Response(null, { status: 204 }); +} diff --git a/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.0.json b/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.0.json index 23a29d2d..9916ebb1 100644 --- a/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.0.json +++ b/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.0.json @@ -100,7 +100,7 @@ }, "apiDir": "./src/app/api", "schemaDir": "./src", - "schemaType": "typescript", + "schemaType": ["zod", "typescript"], "docsUrl": "api-docs", "ui": "scalar", "outputDir": "./public", diff --git a/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.1.json b/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.1.json index 10e976c2..ea566262 100644 --- a/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.1.json +++ b/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.1.json @@ -101,7 +101,7 @@ }, "apiDir": "./src/app/api", "schemaDir": "./src", - "schemaType": "typescript", + "schemaType": ["zod", "typescript"], "docsUrl": "api-docs", "ui": "scalar", "outputDir": "./public", diff --git a/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.2.json b/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.2.json index c7e07c2f..25acb337 100644 --- a/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.2.json +++ b/tests/fixtures/projects/next/app-router/core-flow/templates/openapi-3.2.json @@ -109,7 +109,7 @@ }, "apiDir": "./src/app/api", "schemaDir": "./src", - "schemaType": "typescript", + "schemaType": ["zod", "typescript"], "docsUrl": "api-docs", "ui": "scalar", "outputDir": "./public", diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..372e9724 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-app-drizzle-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/api-keys/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..715a2d41 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId drizzleScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeySchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId drizzleScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId drizzleScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/api-keys/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..f535bfa1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId drizzleScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuerySchema + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId drizzleScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/attachments/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..8c5a987a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId drizzleScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId drizzleScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId drizzleScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/attachments/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..6b05b473 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId drizzleScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuerySchema + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId drizzleScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/audit-logs/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..cfc8b1d8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId drizzleScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId drizzleScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId drizzleScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/audit-logs/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..b74fa58f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId drizzleScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId drizzleScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/catalog-items/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..b50a8bdb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId drizzleScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId drizzleScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId drizzleScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/catalog-items/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..d84d54d4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId drizzleScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuerySchema + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId drizzleScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/comments/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..9437cb09 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId drizzleScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId drizzleScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId drizzleScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/comments/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..146aa5cd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId drizzleScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId drizzleScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/customers/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..fdb39714 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId drizzleScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId drizzleScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId drizzleScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/customers/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..558c2ea2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId drizzleScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuerySchema + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId drizzleScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/departments/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..0e72b080 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId drizzleScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId drizzleScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId drizzleScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/departments/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..3e3e94d4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId drizzleScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId drizzleScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/documents/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..4ab696fe --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId drizzleScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId drizzleScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId drizzleScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/documents/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..7ef9c458 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId drizzleScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuerySchema + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId drizzleScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/exports/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..23085eb9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId drizzleScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId drizzleScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportSchema + * @response ExportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId drizzleScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/exports/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..61707852 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId drizzleScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuerySchema + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId drizzleScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportSchema + * @response ExportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/invoices/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..89693313 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId drizzleScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId drizzleScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId drizzleScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/invoices/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..0278d3fd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId drizzleScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId drizzleScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/members/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..87bb0368 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId drizzleScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId drizzleScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId drizzleScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/members/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..c475b33b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId drizzleScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId drizzleScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/notifications/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..827a930f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId drizzleScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId drizzleScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId drizzleScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/notifications/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..438c8d80 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId drizzleScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuerySchema + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId drizzleScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/orders/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..4d55eebf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId drizzleScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId drizzleScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId drizzleScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/orders/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..baaa6882 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId drizzleScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId drizzleScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..c03cf9d1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId drizzleScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId drizzleScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId drizzleScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..ee943742 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId drizzleScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuerySchema + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId drizzleScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..27853a3d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId drizzleScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId drizzleScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId drizzleScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..63bec73b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId drizzleScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuerySchema + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId drizzleScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/payments/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..2e7dde00 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId drizzleScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId drizzleScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId drizzleScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/payments/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..7acb42a4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId drizzleScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuerySchema + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId drizzleScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/products/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..67a6b57b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId drizzleScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId drizzleScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductSchema + * @response ProductSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId drizzleScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/products/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..92fed27f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId drizzleScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuerySchema + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId drizzleScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductSchema + * @response ProductSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..37ff9789 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId drizzleScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId drizzleScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId drizzleScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..88ddce6c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId drizzleScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId drizzleScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/refunds/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..2599175f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId drizzleScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId drizzleScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId drizzleScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/refunds/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..6bae8c42 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId drizzleScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId drizzleScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/reports/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..6b734910 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId drizzleScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId drizzleScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId drizzleScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/reports/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..e3d5d81a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId drizzleScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId drizzleScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/sessions/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..9f20f4d3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId drizzleScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId drizzleScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId drizzleScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/sessions/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..1c31f761 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId drizzleScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId drizzleScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/subscriptions/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..283d0720 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId drizzleScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId drizzleScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId drizzleScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/subscriptions/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..6849b653 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId drizzleScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuerySchema + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId drizzleScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/teams/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..20589fa2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId drizzleScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId drizzleScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId drizzleScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/teams/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..0ed47d4a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId drizzleScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuerySchema + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId drizzleScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/webhooks/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..8e6ce950 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId drizzleScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId drizzleScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId drizzleScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/webhooks/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..edcadbc1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId drizzleScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId drizzleScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/workspaces/[id]/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..ea1f3551 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId drizzleScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId drizzleScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId drizzleScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/workspaces/route.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..f27ec291 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId drizzleScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId drizzleScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/db/schema.generated.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/db/schema.generated.ts new file mode 100644 index 00000000..9559b068 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/db/schema.generated.ts @@ -0,0 +1,227 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { boolean, pgTable, serial, timestamp, varchar } from "drizzle-orm/pg-core"; + +export const customers = pgTable("customers", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const invoices = pgTable("invoices", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const projects = pgTable("projects", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const tasks = pgTable("tasks", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const subscriptions = pgTable("subscriptions", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const webhooks = pgTable("webhooks", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const teams = pgTable("teams", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const members = pgTable("members", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const products = pgTable("products", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const orders = pgTable("orders", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const payments = pgTable("payments", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const refunds = pgTable("refunds", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const notifications = pgTable("notifications", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const reports = pgTable("reports", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const exports = pgTable("exports", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const sessions = pgTable("sessions", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const apiKeys = pgTable("api_keys", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const auditLogs = pgTable("audit_logs", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const catalogItems = pgTable("catalog_items", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const workspaces = pgTable("workspaces", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const organizations = pgTable("organizations", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const departments = pgTable("departments", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const documents = pgTable("documents", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const comments = pgTable("comments", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export const attachments = pgTable("attachments", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 120 }).notNull(), + description: varchar("description", { length: 500 }), + active: boolean("active").default(true).notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/author.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/author.ts new file mode 100644 index 00000000..454556ee --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/author.ts @@ -0,0 +1,33 @@ +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { authors } from "../db/schema"; + +export const CreateAuthorSchema = createInsertSchema(authors, { + bio: (schema) => schema.max(280).optional().describe("Author biography"), + email: (schema) => schema.email().describe("Author email address"), + name: (schema) => schema.min(2).max(100).describe("Author display name"), +}).omit({ + createdAt: true, + id: true, +}); + +export const AuthorResponseSchema = createSelectSchema(authors, { + avatarUrl: (schema) => schema.describe("Author avatar URL"), + bio: (schema) => schema.describe("Author biography"), + createdAt: (schema) => schema.describe("Creation timestamp"), + email: (schema) => schema.describe("Author email address"), + name: (schema) => schema.describe("Author display name"), +}); + +export const AuthorsQueryParams = z.object({ + page: z.string().regex(/^\d+$/).optional().describe("Page number"), + limit: z.string().regex(/^\d+$/).optional().describe("Items per page"), + search: z.string().optional().describe("Case-insensitive author search"), + sort: z.enum(["name", "recent"]).optional().describe("Sort mode"), +}); + +export const AuthorBatchStatusUpdateSchema = z.object({ + authorIds: z.array(z.number().int().positive()).min(1).describe("Author IDs to update"), + status: z.enum(["featured", "standard"]).describe("Visibility bucket to assign"), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/api-keys.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/api-keys.ts new file mode 100644 index 00000000..0aea9697 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/api-keys.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { apiKeys } from "../../db/schema.generated"; + +export const CreateApiKeySchema = createInsertSchema(apiKeys, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateApiKeySchema = CreateApiKeySchema.partial(); + +export const ApiKeySchema = createSelectSchema(apiKeys); + +export const ApiKeyListResponse = z.object({ + items: z.array(ApiKeySchema), + total: z.number().int().nonnegative(), +}); + +export const ApiKeyIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const ApiKeyListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/attachments.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/attachments.ts new file mode 100644 index 00000000..41a1a78e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/attachments.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { attachments } from "../../db/schema.generated"; + +export const CreateAttachmentSchema = createInsertSchema(attachments, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateAttachmentSchema = CreateAttachmentSchema.partial(); + +export const AttachmentSchema = createSelectSchema(attachments); + +export const AttachmentListResponse = z.object({ + items: z.array(AttachmentSchema), + total: z.number().int().nonnegative(), +}); + +export const AttachmentIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const AttachmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/audit-logs.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/audit-logs.ts new file mode 100644 index 00000000..b6be035a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/audit-logs.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { auditLogs } from "../../db/schema.generated"; + +export const CreateAuditLogSchema = createInsertSchema(auditLogs, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); + +export const AuditLogSchema = createSelectSchema(auditLogs); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/catalog-items.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/catalog-items.ts new file mode 100644 index 00000000..53d17712 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/catalog-items.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { catalogItems } from "../../db/schema.generated"; + +export const CreateCatalogItemSchema = createInsertSchema(catalogItems, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateCatalogItemSchema = CreateCatalogItemSchema.partial(); + +export const CatalogItemSchema = createSelectSchema(catalogItems); + +export const CatalogItemListResponse = z.object({ + items: z.array(CatalogItemSchema), + total: z.number().int().nonnegative(), +}); + +export const CatalogItemIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const CatalogItemListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/comments.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/comments.ts new file mode 100644 index 00000000..70f8af38 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/comments.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { comments } from "../../db/schema.generated"; + +export const CreateCommentSchema = createInsertSchema(comments, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); + +export const CommentSchema = createSelectSchema(comments); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/customers.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/customers.ts new file mode 100644 index 00000000..c58706bb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/customers.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { customers } from "../../db/schema.generated"; + +export const CreateCustomerSchema = createInsertSchema(customers, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateCustomerSchema = CreateCustomerSchema.partial(); + +export const CustomerSchema = createSelectSchema(customers); + +export const CustomerListResponse = z.object({ + items: z.array(CustomerSchema), + total: z.number().int().nonnegative(), +}); + +export const CustomerIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const CustomerListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/departments.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/departments.ts new file mode 100644 index 00000000..ff3b59bb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/departments.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { departments } from "../../db/schema.generated"; + +export const CreateDepartmentSchema = createInsertSchema(departments, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); + +export const DepartmentSchema = createSelectSchema(departments); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/documents.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/documents.ts new file mode 100644 index 00000000..97c118f7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/documents.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { documents } from "../../db/schema.generated"; + +export const CreateDocumentSchema = createInsertSchema(documents, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateDocumentSchema = CreateDocumentSchema.partial(); + +export const DocumentSchema = createSelectSchema(documents); + +export const DocumentListResponse = z.object({ + items: z.array(DocumentSchema), + total: z.number().int().nonnegative(), +}); + +export const DocumentIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const DocumentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/exports.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/exports.ts new file mode 100644 index 00000000..0f94c931 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/exports.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { exports } from "../../db/schema.generated"; + +export const CreateExportSchema = createInsertSchema(exports, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateExportSchema = CreateExportSchema.partial(); + +export const ExportSchema = createSelectSchema(exports); + +export const ExportListResponse = z.object({ + items: z.array(ExportSchema), + total: z.number().int().nonnegative(), +}); + +export const ExportIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const ExportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/invoices.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/invoices.ts new file mode 100644 index 00000000..b289997b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/invoices.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { invoices } from "../../db/schema.generated"; + +export const CreateInvoiceSchema = createInsertSchema(invoices, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); + +export const InvoiceSchema = createSelectSchema(invoices); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/members.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/members.ts new file mode 100644 index 00000000..4e378a31 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/members.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { members } from "../../db/schema.generated"; + +export const CreateMemberSchema = createInsertSchema(members, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); + +export const MemberSchema = createSelectSchema(members); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/notifications.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/notifications.ts new file mode 100644 index 00000000..25f6051a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/notifications.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { notifications } from "../../db/schema.generated"; + +export const CreateNotificationSchema = createInsertSchema(notifications, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateNotificationSchema = CreateNotificationSchema.partial(); + +export const NotificationSchema = createSelectSchema(notifications); + +export const NotificationListResponse = z.object({ + items: z.array(NotificationSchema), + total: z.number().int().nonnegative(), +}); + +export const NotificationIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const NotificationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/orders.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/orders.ts new file mode 100644 index 00000000..27fcad2c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/orders.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { orders } from "../../db/schema.generated"; + +export const CreateOrderSchema = createInsertSchema(orders, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); + +export const OrderSchema = createSelectSchema(orders); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/organizations.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/organizations.ts new file mode 100644 index 00000000..526e62a5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/organizations.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { organizations } from "../../db/schema.generated"; + +export const CreateOrganizationSchema = createInsertSchema(organizations, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateOrganizationSchema = CreateOrganizationSchema.partial(); + +export const OrganizationSchema = createSelectSchema(organizations); + +export const OrganizationListResponse = z.object({ + items: z.array(OrganizationSchema), + total: z.number().int().nonnegative(), +}); + +export const OrganizationIdParamsSchema = z.object({ + organizationId: z.string().regex(/^\d+$/), +}); + +export const OrganizationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/payments.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/payments.ts new file mode 100644 index 00000000..76152923 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/payments.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { payments } from "../../db/schema.generated"; + +export const CreatePaymentSchema = createInsertSchema(payments, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdatePaymentSchema = CreatePaymentSchema.partial(); + +export const PaymentSchema = createSelectSchema(payments); + +export const PaymentListResponse = z.object({ + items: z.array(PaymentSchema), + total: z.number().int().nonnegative(), +}); + +export const PaymentIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const PaymentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/products.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/products.ts new file mode 100644 index 00000000..f18fee68 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/products.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { products } from "../../db/schema.generated"; + +export const CreateProductSchema = createInsertSchema(products, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateProductSchema = CreateProductSchema.partial(); + +export const ProductSchema = createSelectSchema(products); + +export const ProductListResponse = z.object({ + items: z.array(ProductSchema), + total: z.number().int().nonnegative(), +}); + +export const ProductIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const ProductListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/projects.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/projects.ts new file mode 100644 index 00000000..bf76efe1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/projects.ts @@ -0,0 +1,33 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { projects } from "../../db/schema.generated"; + +export const CreateProjectSchema = createInsertSchema(projects, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateProjectSchema = CreateProjectSchema.partial(); + +export const ProjectSchema = createSelectSchema(projects); + +export const ProjectListResponse = z.object({ + items: z.array(ProjectSchema), + total: z.number().int().nonnegative(), +}); + +export const ProjectCollectionPathParamsSchema = z.object({ + organizationId: z.string().regex(/^\d+$/), +}); + +export const ProjectIdParamsSchema = z.object({ + organizationId: z.string().regex(/^\d+$/), + projectId: z.string().regex(/^\d+$/), +}); + +export const ProjectListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/refunds.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/refunds.ts new file mode 100644 index 00000000..7c2e6efe --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/refunds.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { refunds } from "../../db/schema.generated"; + +export const CreateRefundSchema = createInsertSchema(refunds, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); + +export const RefundSchema = createSelectSchema(refunds); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/reports.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/reports.ts new file mode 100644 index 00000000..c45cda39 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/reports.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { reports } from "../../db/schema.generated"; + +export const CreateReportSchema = createInsertSchema(reports, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateReportSchema = CreateReportSchema.partial(); + +export const ReportSchema = createSelectSchema(reports); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/sessions.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/sessions.ts new file mode 100644 index 00000000..9652dc41 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/sessions.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { sessions } from "../../db/schema.generated"; + +export const CreateSessionSchema = createInsertSchema(sessions, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); + +export const SessionSchema = createSelectSchema(sessions); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/subscriptions.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/subscriptions.ts new file mode 100644 index 00000000..fb68867d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/subscriptions.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { subscriptions } from "../../db/schema.generated"; + +export const CreateSubscriptionSchema = createInsertSchema(subscriptions, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateSubscriptionSchema = CreateSubscriptionSchema.partial(); + +export const SubscriptionSchema = createSelectSchema(subscriptions); + +export const SubscriptionListResponse = z.object({ + items: z.array(SubscriptionSchema), + total: z.number().int().nonnegative(), +}); + +export const SubscriptionIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const SubscriptionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/tasks.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/tasks.ts new file mode 100644 index 00000000..6891205a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/tasks.ts @@ -0,0 +1,33 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { tasks } from "../../db/schema.generated"; + +export const CreateTaskSchema = createInsertSchema(tasks, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); + +export const TaskSchema = createSelectSchema(tasks); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().regex(/^\d+$/), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().regex(/^\d+$/), + id: z.string().regex(/^\d+$/), +}); + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/teams.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/teams.ts new file mode 100644 index 00000000..9e6c1826 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/teams.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { teams } from "../../db/schema.generated"; + +export const CreateTeamSchema = createInsertSchema(teams, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateTeamSchema = CreateTeamSchema.partial(); + +export const TeamSchema = createSelectSchema(teams); + +export const TeamListResponse = z.object({ + items: z.array(TeamSchema), + total: z.number().int().nonnegative(), +}); + +export const TeamIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const TeamListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/webhooks.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/webhooks.ts new file mode 100644 index 00000000..87ec65f5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/webhooks.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { webhooks } from "../../db/schema.generated"; + +export const CreateWebhookSchema = createInsertSchema(webhooks, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); + +export const WebhookSchema = createSelectSchema(webhooks); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/workspaces.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/workspaces.ts new file mode 100644 index 00000000..a5ab927e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/generated/workspaces.ts @@ -0,0 +1,28 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { workspaces } from "../../db/schema.generated"; + +export const CreateWorkspaceSchema = createInsertSchema(workspaces, { + name: (schema) => schema.min(1).max(120), + description: (schema) => schema.max(500).optional(), +}).omit({ id: true, createdAt: true, updatedAt: true }); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); + +export const WorkspaceSchema = createSelectSchema(workspaces); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().regex(/^\d+$/), +}); + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/post.ts b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/post.ts new file mode 100644 index 00000000..88ff7821 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/src/schemas/post.ts @@ -0,0 +1,58 @@ +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import { z } from "zod"; + +import { posts } from "../db/schema"; + +export const CreatePostSchema = createInsertSchema(posts, { + title: (schema) => schema.min(5).max(255).describe("Post title"), + slug: (schema) => + schema + .min(3) + .max(255) + .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "Slug must be lowercase with hyphens") + .describe("URL-friendly slug"), + excerpt: (schema) => schema.max(500).optional().describe("Short excerpt of the post"), + content: (schema) => schema.min(10).describe("Post content in markdown"), + published: (schema) => schema.optional().describe("Whether the post is published"), + authorId: (schema) => schema.positive("Author ID must be positive").describe("Author ID"), +}); + +export const UpdatePostSchema = createInsertSchema(posts, { + title: (schema) => schema.min(5).max(255).optional().describe("Post title"), + slug: (schema) => + schema + .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/) + .optional() + .describe("URL-friendly slug"), + excerpt: (schema) => schema.max(500).optional().describe("Short excerpt"), + content: (schema) => schema.min(10).optional().describe("Post content"), + published: (schema) => schema.optional().describe("Publication status"), +}).omit({ + id: true, + createdAt: true, + updatedAt: true, + viewCount: true, + authorId: true, +}); + +export const PostResponseSchema = createSelectSchema(posts, { + title: (schema) => schema.describe("Post title"), + slug: (schema) => schema.describe("URL-friendly slug"), + excerpt: (schema) => schema.describe("Post excerpt"), + content: (schema) => schema.describe("Full post content"), + published: (schema) => schema.describe("Publication status"), + viewCount: (schema) => schema.describe("Number of views"), + createdAt: (schema) => schema.describe("Creation timestamp"), + updatedAt: (schema) => schema.describe("Last update timestamp"), +}); + +export const PostIdParams = z.object({ + id: z.string().regex(/^\d+$/).describe("Post ID"), +}); + +export const PostsQueryParams = z.object({ + page: z.string().regex(/^\d+$/).optional().describe("Page number"), + limit: z.string().regex(/^\d+$/).optional().describe("Items per page"), + published: z.enum(["true", "false"]).optional().describe("Filter by publication status"), + authorId: z.string().regex(/^\d+$/).optional().describe("Filter by author ID"), +}); diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..21c9cdb6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.0.json @@ -0,0 +1,80 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "App Router Drizzle Zod Flow At Scale", + "version": "1.0.0", + "description": "Large-scale Drizzle Zod fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "401", + "500" + ], + "public": [ + "400", + "500" + ], + "auth": [ + "400", + "401", + "403", + "500" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + }, + "code": { + "type": "string", + "example": "{{ERROR_CODE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request parameters", + "ERROR_CODE": "BAD_REQUEST" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required", + "ERROR_CODE": "UNAUTHORIZED" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied", + "ERROR_CODE": "FORBIDDEN" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "An unexpected error occurred", + "ERROR_CODE": "INTERNAL_ERROR" + } + } + } + }, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..5521579b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.1.json @@ -0,0 +1,80 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "App Router Drizzle Zod Flow At Scale", + "version": "1.0.0", + "description": "Large-scale Drizzle Zod fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "401", + "500" + ], + "public": [ + "400", + "500" + ], + "auth": [ + "400", + "401", + "403", + "500" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + }, + "code": { + "type": "string", + "example": "{{ERROR_CODE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request parameters", + "ERROR_CODE": "BAD_REQUEST" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required", + "ERROR_CODE": "UNAUTHORIZED" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied", + "ERROR_CODE": "FORBIDDEN" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "An unexpected error occurred", + "ERROR_CODE": "INTERNAL_ERROR" + } + } + } + }, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..a74cd25f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/drizzle-zod-flow-at-scale/templates/openapi-3.2.json @@ -0,0 +1,80 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "App Router Drizzle Zod Flow At Scale", + "version": "1.0.0", + "description": "Large-scale Drizzle Zod fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "401", + "500" + ], + "public": [ + "400", + "500" + ], + "auth": [ + "400", + "401", + "403", + "500" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + }, + "code": { + "type": "string", + "example": "{{ERROR_CODE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request parameters", + "ERROR_CODE": "BAD_REQUEST" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required", + "ERROR_CODE": "UNAUTHORIZED" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied", + "ERROR_CODE": "FORBIDDEN" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "An unexpected error occurred", + "ERROR_CODE": "INTERNAL_ERROR" + } + } + } + }, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..6ee82a7a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-app-ignore-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/admin/test/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/admin/test/route.ts new file mode 100644 index 00000000..b0b3c3f4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/admin/test/route.ts @@ -0,0 +1,4 @@ +/** + * Admin test route + */ +export async function POST() {} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/debug/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/debug/route.ts new file mode 100644 index 00000000..aa279d2a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/debug/route.ts @@ -0,0 +1,4 @@ +/** + * Debug route + */ +export async function GET() {} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/api-keys/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..7b48d9ca --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId ignoreScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId ignoreScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId ignoreScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/api-keys/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..e1866c70 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId ignoreScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId ignoreScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/attachments/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..297cd389 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId ignoreScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId ignoreScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId ignoreScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/attachments/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..0a9d1947 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId ignoreScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId ignoreScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/audit-logs/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..f736df6d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId ignoreScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId ignoreScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId ignoreScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/audit-logs/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..acc48c3e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId ignoreScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId ignoreScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/catalog-items/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..d1c2c8a4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId ignoreScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId ignoreScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId ignoreScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/catalog-items/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..5db19880 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId ignoreScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId ignoreScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/comments/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..d0521749 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId ignoreScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId ignoreScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId ignoreScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/comments/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..1d2ade56 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId ignoreScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId ignoreScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/customers/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..9fb2c6f3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId ignoreScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId ignoreScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId ignoreScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/customers/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..e7cdc525 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId ignoreScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId ignoreScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/departments/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..c7757dd0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId ignoreScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId ignoreScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId ignoreScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/departments/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..ccc1f7d6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId ignoreScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId ignoreScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/documents/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..40db3764 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId ignoreScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId ignoreScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId ignoreScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/documents/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..73ee68bf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId ignoreScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId ignoreScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/exports/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..d29391d9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId ignoreScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId ignoreScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId ignoreScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/exports/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..a1407fa6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId ignoreScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId ignoreScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/invoices/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..d9bf8658 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId ignoreScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId ignoreScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId ignoreScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/invoices/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..40b77493 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId ignoreScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId ignoreScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/members/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..c63eea97 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId ignoreScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId ignoreScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId ignoreScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/members/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..2d1472c2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId ignoreScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId ignoreScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/notifications/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..c2c3b17a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId ignoreScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId ignoreScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId ignoreScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/notifications/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..32dd2fc0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId ignoreScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId ignoreScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/orders/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..54d48fd4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId ignoreScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId ignoreScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId ignoreScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/orders/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..9d624c78 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId ignoreScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId ignoreScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..101d390e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId ignoreScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId ignoreScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId ignoreScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..5b540b8a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId ignoreScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId ignoreScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..28d654ee --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId ignoreScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId ignoreScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId ignoreScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..e1f9ca6f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId ignoreScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId ignoreScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/payments/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..eef29735 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId ignoreScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId ignoreScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId ignoreScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/payments/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..9da4b9a2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId ignoreScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId ignoreScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/products/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..2f9d6bf9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId ignoreScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId ignoreScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId ignoreScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/products/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..bafa7673 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId ignoreScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId ignoreScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..b6fb1bf3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId ignoreScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId ignoreScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId ignoreScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..a26ed6e0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId ignoreScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId ignoreScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/refunds/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..4abdd8e4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId ignoreScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId ignoreScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId ignoreScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/refunds/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..048d894a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId ignoreScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId ignoreScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/reports/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..6ffeb7b4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId ignoreScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId ignoreScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId ignoreScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/reports/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..7fce0a58 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId ignoreScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId ignoreScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/sessions/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..18b2359f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId ignoreScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId ignoreScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId ignoreScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/sessions/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..e4d73ddc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId ignoreScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId ignoreScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/subscriptions/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..13afea78 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId ignoreScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId ignoreScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId ignoreScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/subscriptions/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..f6058956 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId ignoreScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId ignoreScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/teams/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..85482f29 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId ignoreScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId ignoreScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId ignoreScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/teams/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..b3b77b56 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId ignoreScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId ignoreScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/webhooks/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..f02135c9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId ignoreScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId ignoreScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId ignoreScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/webhooks/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..c8c2c891 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId ignoreScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId ignoreScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/workspaces/[id]/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..bc22cbc1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId ignoreScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId ignoreScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId ignoreScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/workspaces/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..e34adbcb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId ignoreScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId ignoreScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/internal/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/internal/route.ts new file mode 100644 index 00000000..1864f55e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/internal/route.ts @@ -0,0 +1,5 @@ +/** + * Internal route + * @ignore + */ +export async function GET() {} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/public/info/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/public/info/route.ts new file mode 100644 index 00000000..f6817b18 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/public/info/route.ts @@ -0,0 +1,5 @@ +/** + * Public info route + * @openapi + */ +export async function GET() {} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/users/route.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/users/route.ts new file mode 100644 index 00000000..093c93b7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/app/api/users/route.ts @@ -0,0 +1,5 @@ +/** + * Get all users + * @openapi + */ +export async function GET() {} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/api-keys-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/api-keys-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/attachments-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/attachments-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/audit-logs-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/audit-logs-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/catalog-items-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/catalog-items-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/comments-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/comments-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/customers-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/customers-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/departments-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/departments-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/documents-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/documents-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/exports-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/exports-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/invoices-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/invoices-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/members-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/members-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/notifications-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/notifications-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/orders-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/orders-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/organizations-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/organizations-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/payments-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/payments-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/products-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/products-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/projects-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/projects-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/refunds-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/refunds-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/reports-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/reports-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/sessions-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/sessions-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/subscriptions-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/subscriptions-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/tasks-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/tasks-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/teams-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/teams-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/webhooks-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/webhooks-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/workspaces-entity.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/workspaces-input.ts b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/src/types/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..bd98d05b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.0.json @@ -0,0 +1,22 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Ignore Routes At Scale", + "version": "1.0.0", + "description": "Large-scale fixture with ignore route filtering" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": false, + "debug": false, + "ignoreRoutes": [ + "/admin/*", + "/debug", + "/public/info" + ] +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..3354b1cb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.1.json @@ -0,0 +1,22 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Ignore Routes At Scale", + "version": "1.0.0", + "description": "Large-scale fixture with ignore route filtering" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": false, + "debug": false, + "ignoreRoutes": [ + "/admin/*", + "/debug", + "/public/info" + ] +} diff --git a/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..8eb5257f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ignore-routes-at-scale/templates/openapi-3.2.json @@ -0,0 +1,22 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "Ignore Routes At Scale", + "version": "1.0.0", + "description": "Large-scale fixture with ignore route filtering" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": false, + "debug": false, + "ignoreRoutes": [ + "/admin/*", + "/debug", + "/public/info" + ] +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..87eb83b3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-app-mixed-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/api-keys/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..59f35059 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId mixedScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId mixedScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId mixedScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/api-keys/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..434b1012 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId mixedScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId mixedScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/attachments/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..7b21b114 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId mixedScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId mixedScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId mixedScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/attachments/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..f70aaa23 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId mixedScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId mixedScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/audit-logs/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..9ceea54b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId mixedScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId mixedScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId mixedScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/audit-logs/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..968cbbdc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId mixedScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId mixedScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/catalog-items/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..ecb99783 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId mixedScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId mixedScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId mixedScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/catalog-items/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..e24751e9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId mixedScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId mixedScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/comments/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..258abe38 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId mixedScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId mixedScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId mixedScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/comments/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..82f3e9af --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId mixedScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId mixedScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/customers/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..5ee23e4b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId mixedScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId mixedScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId mixedScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/customers/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..1b89913b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId mixedScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId mixedScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/departments/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..91f7ac3e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId mixedScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId mixedScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId mixedScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/departments/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..15136bbf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId mixedScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId mixedScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/documents/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..bc296427 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId mixedScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId mixedScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId mixedScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/documents/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..4c66a8eb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId mixedScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId mixedScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/exports/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..6bc1f600 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId mixedScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId mixedScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId mixedScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/exports/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..1b8c3c7e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId mixedScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId mixedScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/invoices/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..bd235539 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId mixedScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId mixedScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId mixedScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/invoices/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..951229e1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId mixedScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId mixedScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/members/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..527a0d78 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId mixedScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId mixedScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId mixedScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/members/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..31347f5d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId mixedScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId mixedScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/notifications/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..645d7a2e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId mixedScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId mixedScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId mixedScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/notifications/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..50d136d2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId mixedScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId mixedScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/orders/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..b42a35e7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId mixedScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId mixedScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId mixedScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/orders/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..b407e2ad --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId mixedScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId mixedScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..8870791c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId mixedScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId mixedScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId mixedScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..770da73c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId mixedScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId mixedScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..c6cab51d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId mixedScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId mixedScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId mixedScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..b6fd94b9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId mixedScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId mixedScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/payments/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..2bef5d78 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId mixedScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId mixedScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId mixedScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/payments/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..aec64635 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId mixedScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId mixedScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/products/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..7a99191b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId mixedScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId mixedScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId mixedScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/products/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..867ba0ef --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId mixedScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId mixedScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..b1aa8c1a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId mixedScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId mixedScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId mixedScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..1f830f1d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId mixedScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId mixedScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/refunds/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..44b3c5d6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId mixedScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId mixedScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId mixedScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/refunds/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..12d918ca --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId mixedScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId mixedScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/reports/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..2b9b9205 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId mixedScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId mixedScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId mixedScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/reports/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..899c699c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId mixedScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId mixedScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/sessions/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..03890b1b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId mixedScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId mixedScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId mixedScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/sessions/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..a187783f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId mixedScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId mixedScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/subscriptions/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..734ac012 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId mixedScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId mixedScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId mixedScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/subscriptions/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..437e9817 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId mixedScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId mixedScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/teams/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..be12eac0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId mixedScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId mixedScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId mixedScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/teams/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..c99b7390 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId mixedScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId mixedScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/webhooks/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..2ee13698 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId mixedScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId mixedScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId mixedScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/webhooks/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..47745364 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId mixedScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId mixedScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/workspaces/[id]/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..b6e71e1e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId mixedScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId mixedScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId mixedScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/workspaces/route.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..0c7636b0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId mixedScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId mixedScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/audit-logs-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..bd9b8931 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/audit-logs-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..34e13d87 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAuditLogSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/comments-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..44db99e6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/comments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/comments-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..840de293 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/comments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCommentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/departments-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..92c51920 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/departments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/departments-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..d3705544 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/departments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDepartmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/invoices-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..cbab42ff --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/invoices-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..07d279d2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/invoices-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateInvoiceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/members-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..8a5c5ccd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/members-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/members-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..fdccd311 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/members-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateMemberSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/orders-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..2bf76fbb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/orders-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/orders-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..9826c38f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/orders-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrderSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/refunds-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..9d9867ee --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/refunds-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..f90e1386 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/refunds-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateRefundSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/reports-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..2981e8f1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/reports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/reports-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..d65dbc4c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/reports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateReportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateReportSchema = CreateReportSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/sessions-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..9880f94b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/sessions-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..00d4afeb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/sessions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSessionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/tasks-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..09677f29 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().uuid(), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().uuid(), + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/tasks-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..0c1422c3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/tasks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTaskSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/webhooks-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..ddb257ab --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/webhooks-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..61a0e181 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWebhookSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/workspaces-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..20d92e0e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/workspaces-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..e6b80db9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWorkspaceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/api-keys-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/api-keys-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/attachments-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/attachments-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/catalog-items-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/catalog-items-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/customers-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/customers-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/documents-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/documents-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/exports-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/exports-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/notifications-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/notifications-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/organizations-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/organizations-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/payments-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/payments-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/products-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/products-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/projects-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/projects-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/subscriptions-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/subscriptions-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/teams-entity.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/teams-input.ts b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..9d9d847e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.0.json @@ -0,0 +1,20 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "App Router Mixed Schemas At Scale", + "version": "1.0.0", + "description": "Large-scale mixed TypeScript and Zod fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": [ + "typescript", + "zod" + ], + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..533be9ac --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.1.json @@ -0,0 +1,20 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "App Router Mixed Schemas At Scale", + "version": "1.0.0", + "description": "Large-scale mixed TypeScript and Zod fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": [ + "typescript", + "zod" + ], + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..3408f0ca --- /dev/null +++ b/tests/fixtures/projects/next/app-router/mixed-schemas-at-scale/templates/openapi-3.2.json @@ -0,0 +1,20 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "App Router Mixed Schemas At Scale", + "version": "1.0.0", + "description": "Large-scale mixed TypeScript and Zod fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": [ + "typescript", + "zod" + ], + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..99bb3e52 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-app-ts-full-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..c4d2ebc3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId tsFullScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId tsFullScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId tsFullScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/api-keys/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..e7215e8c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId tsFullScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId tsFullScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..22fd213d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId tsFullScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId tsFullScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId tsFullScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/attachments/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..f990fa93 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId tsFullScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId tsFullScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..935c5c76 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId tsFullScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId tsFullScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId tsFullScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/audit-logs/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..2f7e2049 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId tsFullScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId tsFullScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..7fbf50fb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId tsFullScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId tsFullScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId tsFullScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/catalog-items/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..7d7ce9ed --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId tsFullScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId tsFullScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..d099dc72 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId tsFullScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId tsFullScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId tsFullScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/comments/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..89b6e92c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId tsFullScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId tsFullScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..776c9779 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId tsFullScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId tsFullScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId tsFullScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/customers/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..d64613f2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId tsFullScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId tsFullScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..1b8972c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId tsFullScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId tsFullScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId tsFullScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/departments/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..68d6f632 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId tsFullScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId tsFullScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..dc322464 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId tsFullScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId tsFullScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId tsFullScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/documents/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..4314f758 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId tsFullScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId tsFullScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..db530329 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId tsFullScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId tsFullScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId tsFullScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/exports/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..542bcbf3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId tsFullScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId tsFullScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..c56fdddd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId tsFullScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId tsFullScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId tsFullScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/invoices/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..0cae7641 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId tsFullScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId tsFullScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/members/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..78de919b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId tsFullScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId tsFullScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId tsFullScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/members/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..2a6d36cf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId tsFullScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId tsFullScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..40811db0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId tsFullScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId tsFullScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId tsFullScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/notifications/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..57604367 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId tsFullScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId tsFullScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..3795b258 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId tsFullScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId tsFullScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId tsFullScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/orders/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..6a9f5657 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId tsFullScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId tsFullScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..89d5364b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId tsFullScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId tsFullScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId tsFullScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..1d63762a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId tsFullScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId tsFullScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..b517274e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId tsFullScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId tsFullScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId tsFullScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..adb1b31e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId tsFullScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId tsFullScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..a1045fc4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId tsFullScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId tsFullScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId tsFullScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/payments/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..efe49329 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId tsFullScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId tsFullScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/products/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..4457da00 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId tsFullScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId tsFullScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId tsFullScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/products/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..f06be676 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId tsFullScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId tsFullScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..92b48dd1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId tsFullScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId tsFullScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId tsFullScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..6c7e74f0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId tsFullScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId tsFullScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..6b38101b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId tsFullScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId tsFullScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId tsFullScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/refunds/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..fe985a03 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId tsFullScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId tsFullScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..261ab501 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId tsFullScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId tsFullScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId tsFullScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/reports/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..78028de8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId tsFullScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId tsFullScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..ed4181ba --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId tsFullScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId tsFullScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId tsFullScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/sessions/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..f36edcc1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId tsFullScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId tsFullScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..ae7baf8b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId tsFullScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId tsFullScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId tsFullScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/subscriptions/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..fc394815 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId tsFullScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId tsFullScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..3257d0ea --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId tsFullScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId tsFullScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId tsFullScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/teams/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..13e2d6d0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId tsFullScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId tsFullScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..11640d91 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId tsFullScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId tsFullScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId tsFullScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/webhooks/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..86a230aa --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId tsFullScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId tsFullScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..cfc2c720 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId tsFullScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId tsFullScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId tsFullScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/workspaces/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..eddc192f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId tsFullScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId tsFullScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/collections.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/collections.ts new file mode 100644 index 00000000..c504d512 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/collections.ts @@ -0,0 +1,23 @@ +export type ArrayOfStrings = string[]; +export type GenericArray = Array; +export type ReadonlyNumbers = readonly number[]; +export type FixedTuple = [string, number, boolean]; +export type TupleWithRest = [string, ...number[]]; +export type NamedTuple = [id: string, count: number]; + +export type StringMap = Record; +export type NumberMap = { [key: string]: number }; +export type Mixed = { + id: string; + [key: string]: string; +}; + +export type Nested = { + outer: { + inner: { + leaf: string; + optional?: number; + readonly ro: boolean; + }; + }; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/primitives.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/primitives.ts new file mode 100644 index 00000000..6eaec6b2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/primitives.ts @@ -0,0 +1,12 @@ +export type Primitives = { + str: string; + num: number; + bool: boolean; + anything: any; + something: unknown; + big: bigint; + obj: object; + literalStr: "hello"; + literalNum: 42; + literalBool: true; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/unions.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/unions.ts new file mode 100644 index 00000000..3fe83c98 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/unions.ts @@ -0,0 +1,9 @@ +export type StringEnum = "red" | "green" | "blue"; +export type MixedUnion = string | number; +export type LiteralsEnum = "a" | "b" | "c"; + +export type Cat = { kind: "cat"; meow: boolean }; +export type Dog = { kind: "dog"; bark: boolean }; +export type Pet = Cat | Dog; + +export type Combined = { id: string } & { name: string }; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/utilities.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/utilities.ts new file mode 100644 index 00000000..6c85195c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/schemas/utilities.ts @@ -0,0 +1,19 @@ +export type Base = { id: string; name: string; age: number }; + +export type Picked = Pick; +export type Omitted = Omit; +export type Partialed = Partial; +export type Requireed = Required>; +export type ReadonlyBase = Readonly; +export type NonNull = NonNullable; +export type ExcludedUnion = Exclude<"a" | "b" | "c", "b">; +export type ExtractedUnion = Extract<"a" | "b" | "c", "a" | "b">; +export type AwaitedPromise = Awaited>; + +export type UpperChannel = Uppercase<"red" | "green" | "blue">; +export type LowerWord = Lowercase<"HELLO" | "WORLD">; +export type CapitalWord = Capitalize<"hello" | "world">; +export type UncapitalWord = Uncapitalize<"Hello" | "World">; + +export type Greeting = `hello, ${string}`; +export type Versioned = `v${1 | 2}`; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/api-keys-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/api-keys-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/attachments-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/attachments-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/audit-logs-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/audit-logs-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/catalog-items-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/catalog-items-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/comments-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/comments-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/customers-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/customers-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/departments-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/departments-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/documents-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/documents-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/exports-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/exports-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/invoices-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/invoices-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/members-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/members-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/notifications-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/notifications-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/orders-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/orders-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/organizations-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/organizations-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/payments-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/payments-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/products-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/products-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/projects-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/projects-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/refunds-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/refunds-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/reports-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/reports-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/sessions-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/sessions-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/subscriptions-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/subscriptions-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/tasks-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/tasks-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/teams-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/teams-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/webhooks-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/webhooks-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/workspaces-entity.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/workspaces-input.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/src/types/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..4cd49e58 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.0.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "App Router TypeScript Full Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale TypeScript fixture with feature catalog schemas" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..7a09dc5e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.1.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "App Router TypeScript Full Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale TypeScript fixture with feature catalog schemas" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..331957ec --- /dev/null +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage-at-scale/templates/openapi-3.2.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "App Router TypeScript Full Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale TypeScript fixture with feature catalog schemas" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage/src/app/api/collections/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage/src/app/api/collections/route.ts index 10edade4..4d68c747 100644 --- a/tests/fixtures/projects/next/app-router/ts-full-coverage/src/app/api/collections/route.ts +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage/src/app/api/collections/route.ts @@ -1,6 +1,14 @@ /** * Collection types * @response Nested + * @response 201:GenericArray + * @response 202:ReadonlyNumbers + * @response 203:FixedTuple + * @response 210:TupleWithRest + * @response 211:NamedTuple + * @response 212:StringMap + * @response 213:NumberMap + * @response 214:Mixed * @tag Collections * @openapi */ diff --git a/tests/fixtures/projects/next/app-router/ts-full-coverage/src/app/api/utilities/route.ts b/tests/fixtures/projects/next/app-router/ts-full-coverage/src/app/api/utilities/route.ts index b9de86e0..249ef322 100644 --- a/tests/fixtures/projects/next/app-router/ts-full-coverage/src/app/api/utilities/route.ts +++ b/tests/fixtures/projects/next/app-router/ts-full-coverage/src/app/api/utilities/route.ts @@ -1,6 +1,14 @@ /** * Utility types output * @response Picked + * @response 201:Omitted + * @response 202:Partialed + * @response 203:Requireed + * @response 210:ReadonlyBase + * @response 211:NonNull + * @response 212:ExcludedUnion + * @response 213:ExtractedUnion + * @response 214:AwaitedPromise * @tag Utilities * @openapi */ @@ -9,6 +17,11 @@ export async function GET() {} /** * Template literal type output * @response Versioned + * @response 201:Greeting + * @response 202:UpperChannel + * @response 203:LowerWord + * @response 210:CapitalWord + * @response 211:UncapitalWord * @tag Utilities * @openapi */ diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..5551c98e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-app-zod-full-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..2f4555c1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId zodFullScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeySchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId zodFullScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId zodFullScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/api-keys/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..47a35afb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId zodFullScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuerySchema + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId zodFullScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..09a4a993 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId zodFullScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId zodFullScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId zodFullScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/attachments/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..71e38bbd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId zodFullScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuerySchema + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId zodFullScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..92c61b20 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId zodFullScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId zodFullScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId zodFullScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/audit-logs/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..a3839882 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId zodFullScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId zodFullScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..f7e0b3f2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId zodFullScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId zodFullScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId zodFullScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/catalog-items/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..c1af6910 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId zodFullScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuerySchema + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId zodFullScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..c58f90ce --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId zodFullScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId zodFullScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId zodFullScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/comments/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..c1dcb005 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId zodFullScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId zodFullScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..820347c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId zodFullScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId zodFullScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId zodFullScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/customers/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..e609e652 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId zodFullScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuerySchema + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId zodFullScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..4ad90863 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId zodFullScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId zodFullScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId zodFullScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/departments/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..6cd23411 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId zodFullScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId zodFullScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..76e04b78 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId zodFullScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId zodFullScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId zodFullScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/documents/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..d09672e7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId zodFullScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuerySchema + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId zodFullScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..416a3bfd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId zodFullScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId zodFullScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportSchema + * @response ExportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId zodFullScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/exports/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..4d59820e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId zodFullScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuerySchema + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId zodFullScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportSchema + * @response ExportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..dc2d6561 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId zodFullScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId zodFullScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId zodFullScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/invoices/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..31c601b0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId zodFullScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId zodFullScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/members/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..2ff3b2e2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId zodFullScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId zodFullScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId zodFullScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/members/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..ab3bbdc5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId zodFullScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId zodFullScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..c5c402c3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId zodFullScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId zodFullScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId zodFullScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/notifications/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..296a5b72 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId zodFullScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuerySchema + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId zodFullScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..c299cf36 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId zodFullScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId zodFullScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId zodFullScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/orders/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..3a201973 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId zodFullScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId zodFullScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..f634fb4e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId zodFullScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId zodFullScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId zodFullScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..4ea663ef --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId zodFullScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuerySchema + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId zodFullScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..2a85026f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId zodFullScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId zodFullScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId zodFullScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..2bcdeb39 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId zodFullScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuerySchema + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId zodFullScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..c12e37e2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId zodFullScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId zodFullScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId zodFullScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/payments/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..8adc287b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId zodFullScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuerySchema + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId zodFullScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/products/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..f8675a8a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId zodFullScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId zodFullScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductSchema + * @response ProductSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId zodFullScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/products/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..728397c4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId zodFullScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuerySchema + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId zodFullScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductSchema + * @response ProductSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..2e34c03d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId zodFullScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId zodFullScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId zodFullScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..755c55b0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId zodFullScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId zodFullScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..830b7a56 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId zodFullScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId zodFullScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId zodFullScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/refunds/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..5bb02ad3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId zodFullScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId zodFullScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..d4df0b53 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId zodFullScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId zodFullScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId zodFullScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/reports/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..954abf86 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId zodFullScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId zodFullScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..7d56741e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId zodFullScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId zodFullScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId zodFullScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/sessions/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..8e73e4f7 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId zodFullScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId zodFullScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..1f6f2f31 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId zodFullScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId zodFullScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId zodFullScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/subscriptions/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..171fe45d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId zodFullScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuerySchema + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId zodFullScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..ee71b6bb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId zodFullScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId zodFullScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId zodFullScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/teams/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..14b4d7e0 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId zodFullScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuerySchema + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId zodFullScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..eacacd41 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId zodFullScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId zodFullScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId zodFullScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/webhooks/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..b14f67ce --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId zodFullScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId zodFullScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..4ab99694 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId zodFullScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId zodFullScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId zodFullScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/workspaces/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..4961a86e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId zodFullScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId zodFullScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/advanced.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/advanced.ts new file mode 100644 index 00000000..1e1f5aad --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/advanced.ts @@ -0,0 +1,19 @@ +import { z } from "zod/v4"; + +export const PromisedString = z.promise(z.string()); + +export const Transformed = z.string().transform((value) => value.trim()); + +export const Refined = z.number().refine((value) => value % 2 === 0, { message: "must be even" }); + +type LazyNode = { + value: string; + children: LazyNode[]; +}; + +export const LazyTree: z.ZodType = z.lazy(() => + z.object({ + value: z.string(), + children: z.array(LazyTree), + }), +); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/collections.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/collections.ts new file mode 100644 index 00000000..dc5942d2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/collections.ts @@ -0,0 +1,10 @@ +import { z } from "zod/v4"; + +export const CollectionsSchema = z.object({ + list: z.array(z.string()), + bounded: z.array(z.number()).min(1).max(5), + nonempty: z.array(z.string()).nonempty(), + lengthExact: z.array(z.boolean()).length(3), + set: z.set(z.string()), + map: z.map(z.string(), z.number()), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/api-keys-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..e16eeeeb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeySchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ApiKeyListResponse = z.object({ + items: z.array(ApiKeySchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ApiKeyIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/api-keys-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..12b4864a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeyListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateApiKeySchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateApiKeySchema = CreateApiKeySchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/attachments-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..d67ef024 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AttachmentListResponse = z.object({ + items: z.array(AttachmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AttachmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/attachments-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..845843f3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/attachments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAttachmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAttachmentSchema = CreateAttachmentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/audit-logs-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..bd9b8931 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/audit-logs-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..34e13d87 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAuditLogSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/catalog-items-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e7a311cb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CatalogItemListResponse = z.object({ + items: z.array(CatalogItemSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CatalogItemIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/catalog-items-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..9ca2d0fb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCatalogItemSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCatalogItemSchema = CreateCatalogItemSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/comments-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..44db99e6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/comments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/comments-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..840de293 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/comments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCommentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/customers-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..7da28861 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/customers-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CustomerListResponse = z.object({ + items: z.array(CustomerSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CustomerIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/customers-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..da9fe60a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/customers-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCustomerSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCustomerSchema = CreateCustomerSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/departments-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..92c51920 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/departments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/departments-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..d3705544 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/departments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDepartmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/documents-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..a8f57a10 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/documents-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DocumentListResponse = z.object({ + items: z.array(DocumentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DocumentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/documents-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..869eca94 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/documents-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDocumentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDocumentSchema = CreateDocumentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/exports-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..8b3a79c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/exports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ExportListResponse = z.object({ + items: z.array(ExportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ExportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/exports-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..21c25a5f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/exports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateExportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateExportSchema = CreateExportSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/invoices-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..cbab42ff --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/invoices-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..07d279d2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/invoices-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateInvoiceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/members-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..8a5c5ccd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/members-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/members-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..fdccd311 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/members-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateMemberSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/notifications-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..ff8107e6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const NotificationListResponse = z.object({ + items: z.array(NotificationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const NotificationIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/notifications-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..421e709c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/notifications-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateNotificationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateNotificationSchema = CreateNotificationSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/orders-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..2bf76fbb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/orders-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/orders-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..9826c38f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/orders-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrderSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/organizations-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..4bd841b5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrganizationListResponse = z.object({ + items: z.array(OrganizationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrganizationIdParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/organizations-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..24198e68 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/organizations-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrganizationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrganizationSchema = CreateOrganizationSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/payments-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..fca47a60 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/payments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const PaymentListResponse = z.object({ + items: z.array(PaymentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const PaymentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/payments-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..15f4871f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/payments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreatePaymentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdatePaymentSchema = CreatePaymentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/products-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..681fc713 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/products-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProductListResponse = z.object({ + items: z.array(ProductSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProductIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/products-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..d8cd63e2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/products-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProductSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProductSchema = CreateProductSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/projects-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..4d3f3c01 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/projects-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProjectListResponse = z.object({ + items: z.array(ProjectSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProjectCollectionPathParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); + +export const ProjectIdParamsSchema = z.object({ + organizationId: z.string().uuid(), + projectId: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/projects-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..7f687df8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/projects-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProjectSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProjectSchema = CreateProjectSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/refunds-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..9d9867ee --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/refunds-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..f90e1386 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/refunds-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateRefundSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/reports-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..2981e8f1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/reports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/reports-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..d65dbc4c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/reports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateReportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateReportSchema = CreateReportSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/sessions-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..9880f94b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/sessions-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..00d4afeb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/sessions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSessionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/subscriptions-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..2d61082d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SubscriptionListResponse = z.object({ + items: z.array(SubscriptionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SubscriptionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/subscriptions-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..28273921 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSubscriptionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSubscriptionSchema = CreateSubscriptionSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/tasks-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..09677f29 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().uuid(), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().uuid(), + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/tasks-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..0c1422c3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/tasks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTaskSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/teams-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..afbf8fcf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/teams-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TeamListResponse = z.object({ + items: z.array(TeamSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TeamIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/teams-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..7043e4b5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/teams-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTeamSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTeamSchema = CreateTeamSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/webhooks-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..ddb257ab --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/webhooks-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..61a0e181 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWebhookSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/workspaces-entity.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..20d92e0e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/workspaces-input.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..e6b80db9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWorkspaceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/objects.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/objects.ts new file mode 100644 index 00000000..95b66bac --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/objects.ts @@ -0,0 +1,20 @@ +import { z } from "zod/v4"; + +const BaseShape = { + id: z.string(), + slug: z.string(), +}; + +export const BaseObject = z.object(BaseShape); + +export const StrictObject = z.object({ ...BaseShape, name: z.string() }).strict(); +export const PassthroughObject = z.object({ id: z.string() }).passthrough(); +export const CatchAllObject = z.object({ id: z.string() }).catchall(z.string()); +export const PickedObject = BaseObject.pick({ id: true }); +export const OmittedObject = BaseObject.omit({ slug: true }); +export const PartialObject = BaseObject.partial(); +// .meta({ id }) overrides the component name in the generated OpenAPI spec +export const ExtendedObject = BaseObject.extend({ createdAt: z.iso.datetime() }).meta({ + id: "ExtendedBase", +}); +export const MergedObject = BaseObject.merge(z.object({ active: z.boolean() })); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/primitives.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/primitives.ts new file mode 100644 index 00000000..8c3e8bbe --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/primitives.ts @@ -0,0 +1,53 @@ +import { z } from "zod/v4"; + +export const StringFormatsSchema = z.object({ + uuid: z.uuid(), + email: z.email(), + url: z.url(), + cuid: z.cuid(), + cuid2: z.string().cuid2(), + ulid: z.string().ulid(), + nanoid: z.string().nanoid(), + jwt: z.string().jwt(), + base64: z.string().base64(), + base64url: z.string().base64url(), + ip: z.string().ip(), + cidr: z.string().cidr(), + e164: z.string().e164(), + datetime: z.iso.datetime(), + date: z.iso.date(), + time: z.iso.time(), + duration: z.iso.duration(), + regex: z.string().regex(/^[a-z]+$/), + minLen: z.string().min(3), + maxLen: z.string().max(20), + lenFixed: z.string().length(10), + startsWith: z.string().startsWith("api-"), + endsWith: z.string().endsWith("-prod"), + nonempty: z.string().nonempty(), + upper: z.string().toUpperCase(), + lower: z.string().toLowerCase(), +}); + +export const NumberRefinementsSchema = z.object({ + int: z.number().int(), + positive: z.number().positive(), + nonneg: z.number().nonnegative(), + negative: z.number().negative(), + nonpos: z.number().nonpositive(), + safe: z.number().safe(), + finite: z.number().finite(), + bounded: z.number().min(0).max(100), + step: z.number().multipleOf(0.5), + bigint: z.bigint(), +}); + +export const ScalarsSchema = z.object({ + bool: z.boolean(), + date: z.date(), + any: z.any(), + unknown: z.unknown(), + file: z.instanceof(File).optional(), + url: z.instanceof(URL).optional(), + regex: z.instanceof(RegExp).optional(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/unions.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/unions.ts new file mode 100644 index 00000000..006d50d1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/src/schemas/unions.ts @@ -0,0 +1,18 @@ +import { z } from "zod/v4"; + +export const ColorEnum = z.enum(["red", "green", "blue"]); + +export const StringOrNumber = z.union([z.string(), z.number()]); + +export const Cat = z.object({ kind: z.literal("cat"), meow: z.boolean() }); +export const Dog = z.object({ kind: z.literal("dog"), bark: z.boolean() }); +export const Pet = z.discriminatedUnion("kind", [Cat, Dog]); + +export const NullableScalar = z.string().nullable(); +export const NullishScalar = z.string().nullish(); +export const OptionalScalar = z.string().optional(); +export const WithDefault = z.string().default("anon"); +export const ReadonlyField = z.string().readonly(); + +export const Branded = z.string().brand<"UserId">(); +export const Described = z.number().describe("A score between 0 and 100"); diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..8d41399d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.0.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "App Router Zod Full Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale Zod fixture with feature catalog schemas" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..ce692eb4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.1.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "App Router Zod Full Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale Zod fixture with feature catalog schemas" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..c97ad62d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage-at-scale/templates/openapi-3.2.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "App Router Zod Full Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale Zod fixture with feature catalog schemas" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/advanced/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/advanced/route.ts index f5e7805a..05fb2155 100644 --- a/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/advanced/route.ts +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/advanced/route.ts @@ -1,6 +1,9 @@ /** * Advanced types (lazy recursion, promises) * @response 200:LazyTree + * @response 201:PromisedString + * @response 202:Transformed + * @response 203:Refined * @tag Advanced * @openapi */ diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/objects/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/objects/route.ts index b88d0574..8e8d590a 100644 --- a/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/objects/route.ts +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/objects/route.ts @@ -2,6 +2,9 @@ * Object modes catalog * @body ExtendedObject * @response 200:MergedObject + * @response 201:StrictObject + * @response 202:PassthroughObject + * @response 203:CatchAllObject * @tag Objects * @openapi */ @@ -12,6 +15,8 @@ export async function POST() { /** * Picked / omitted objects * @response 200:PickedObject + * @response 206:OmittedObject + * @response 207:PartialObject * @tag Objects * @openapi */ diff --git a/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/union/route.ts b/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/union/route.ts index 8724145c..2fa5d7e7 100644 --- a/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/union/route.ts +++ b/tests/fixtures/projects/next/app-router/zod-full-coverage/src/app/api/union/route.ts @@ -1,6 +1,15 @@ /** * Discriminated unions and enums * @response 200:Pet + * @response 201:ColorEnum + * @response 202:StringOrNumber + * @response 203:NullableScalar + * @response 210:NullishScalar + * @response 211:OptionalScalar + * @response 212:WithDefault + * @response 213:ReadonlyField + * @response 214:Branded + * @response 215:Described * @tag Unions * @openapi */ diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..08243090 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-app-zod-only-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts new file mode 100644 index 00000000..c2e22a01 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/api-keys/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId zodOnlyScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeySchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId zodOnlyScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId zodOnlyScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/api-keys/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/api-keys/route.ts new file mode 100644 index 00000000..24b86c70 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/api-keys/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId zodOnlyScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuerySchema + * @response ApiKeyListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId zodOnlyScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeySchema + * @response ApiKeySchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts new file mode 100644 index 00000000..2c98d346 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/attachments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId zodOnlyScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId zodOnlyScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId zodOnlyScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/attachments/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/attachments/route.ts new file mode 100644 index 00000000..9622ee12 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/attachments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId zodOnlyScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuerySchema + * @response AttachmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId zodOnlyScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentSchema + * @response AttachmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts new file mode 100644 index 00000000..9cb7dde6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/audit-logs/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId zodOnlyScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId zodOnlyScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId zodOnlyScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/audit-logs/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/audit-logs/route.ts new file mode 100644 index 00000000..bfe2983c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/audit-logs/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId zodOnlyScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId zodOnlyScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts new file mode 100644 index 00000000..9895a283 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/catalog-items/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId zodOnlyScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId zodOnlyScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId zodOnlyScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/catalog-items/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/catalog-items/route.ts new file mode 100644 index 00000000..78574a90 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/catalog-items/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId zodOnlyScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuerySchema + * @response CatalogItemListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId zodOnlyScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts new file mode 100644 index 00000000..f6057780 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/comments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId zodOnlyScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update comment + * @description Updates an existing comment + * @operationId zodOnlyScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId zodOnlyScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/comments/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/comments/route.ts new file mode 100644 index 00000000..57018ad6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/comments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId zodOnlyScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create comment + * @description Creates a new comment + * @operationId zodOnlyScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts new file mode 100644 index 00000000..3b9f0cfc --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/customers/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId zodOnlyScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update customer + * @description Updates an existing customer + * @operationId zodOnlyScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId zodOnlyScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/customers/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/customers/route.ts new file mode 100644 index 00000000..31f797a6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/customers/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId zodOnlyScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuerySchema + * @response CustomerListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create customer + * @description Creates a new customer + * @operationId zodOnlyScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerSchema + * @response CustomerSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts new file mode 100644 index 00000000..f3501cc6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/departments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId zodOnlyScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update department + * @description Updates an existing department + * @operationId zodOnlyScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete department + * @description Deletes a department by identifier + * @operationId zodOnlyScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/departments/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/departments/route.ts new file mode 100644 index 00000000..9896cda2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/departments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId zodOnlyScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create department + * @description Creates a new department + * @operationId zodOnlyScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts new file mode 100644 index 00000000..38a04086 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/documents/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId zodOnlyScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update document + * @description Updates an existing document + * @operationId zodOnlyScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete document + * @description Deletes a document by identifier + * @operationId zodOnlyScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/documents/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/documents/route.ts new file mode 100644 index 00000000..ad7dfe05 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/documents/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId zodOnlyScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuerySchema + * @response DocumentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create document + * @description Creates a new document + * @operationId zodOnlyScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentSchema + * @response DocumentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts new file mode 100644 index 00000000..1a3f1435 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/exports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId zodOnlyScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update export + * @description Updates an existing export + * @operationId zodOnlyScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportSchema + * @response ExportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete export + * @description Deletes a export by identifier + * @operationId zodOnlyScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/exports/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/exports/route.ts new file mode 100644 index 00000000..a412f037 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/exports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId zodOnlyScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuerySchema + * @response ExportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create export + * @description Creates a new export + * @operationId zodOnlyScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportSchema + * @response ExportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts new file mode 100644 index 00000000..dd1e0d19 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/invoices/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId zodOnlyScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId zodOnlyScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId zodOnlyScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/invoices/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/invoices/route.ts new file mode 100644 index 00000000..d46adeba --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/invoices/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId zodOnlyScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId zodOnlyScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/members/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/members/[id]/route.ts new file mode 100644 index 00000000..3e71d144 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/members/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId zodOnlyScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update member + * @description Updates an existing member + * @operationId zodOnlyScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete member + * @description Deletes a member by identifier + * @operationId zodOnlyScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/members/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/members/route.ts new file mode 100644 index 00000000..15be7b9d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/members/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId zodOnlyScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create member + * @description Creates a new member + * @operationId zodOnlyScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts new file mode 100644 index 00000000..0696beeb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/notifications/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId zodOnlyScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update notification + * @description Updates an existing notification + * @operationId zodOnlyScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId zodOnlyScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/notifications/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/notifications/route.ts new file mode 100644 index 00000000..42aaabbf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/notifications/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId zodOnlyScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuerySchema + * @response NotificationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create notification + * @description Creates a new notification + * @operationId zodOnlyScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationSchema + * @response NotificationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts new file mode 100644 index 00000000..8bd8e950 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/orders/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId zodOnlyScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update order + * @description Updates an existing order + * @operationId zodOnlyScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete order + * @description Deletes a order by identifier + * @operationId zodOnlyScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/orders/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/orders/route.ts new file mode 100644 index 00000000..d7b120e9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/orders/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId zodOnlyScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create order + * @description Creates a new order + * @operationId zodOnlyScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts new file mode 100644 index 00000000..23a40743 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/[projectId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId zodOnlyScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update project + * @description Updates an existing project + * @operationId zodOnlyScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete project + * @description Deletes a project by identifier + * @operationId zodOnlyScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts new file mode 100644 index 00000000..5dbc780c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/projects/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId zodOnlyScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuerySchema + * @response ProjectListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create project + * @description Creates a new project + * @operationId zodOnlyScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectSchema + * @response ProjectSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts new file mode 100644 index 00000000..959312c1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/[organizationId]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId zodOnlyScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update organization + * @description Updates an existing organization + * @operationId zodOnlyScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId zodOnlyScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/route.ts new file mode 100644 index 00000000..1f9aaf79 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/organizations/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId zodOnlyScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuerySchema + * @response OrganizationListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create organization + * @description Creates a new organization + * @operationId zodOnlyScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationSchema + * @response OrganizationSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts new file mode 100644 index 00000000..68cd32b1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/payments/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId zodOnlyScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update payment + * @description Updates an existing payment + * @operationId zodOnlyScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId zodOnlyScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/payments/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/payments/route.ts new file mode 100644 index 00000000..97a52db5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/payments/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId zodOnlyScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuerySchema + * @response PaymentListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create payment + * @description Creates a new payment + * @operationId zodOnlyScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentSchema + * @response PaymentSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/products/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/products/[id]/route.ts new file mode 100644 index 00000000..34d65d80 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/products/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId zodOnlyScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update product + * @description Updates an existing product + * @operationId zodOnlyScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductSchema + * @response ProductSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete product + * @description Deletes a product by identifier + * @operationId zodOnlyScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/products/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/products/route.ts new file mode 100644 index 00000000..13790c71 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/products/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId zodOnlyScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuerySchema + * @response ProductListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create product + * @description Creates a new product + * @operationId zodOnlyScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductSchema + * @response ProductSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts new file mode 100644 index 00000000..dbde12f4 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId zodOnlyScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update task + * @description Updates an existing task + * @operationId zodOnlyScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete task + * @description Deletes a task by identifier + * @operationId zodOnlyScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts new file mode 100644 index 00000000..d2f21703 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/projects/[projectId]/tasks/route.ts @@ -0,0 +1,31 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId zodOnlyScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create task + * @description Creates a new task + * @operationId zodOnlyScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts new file mode 100644 index 00000000..107cc204 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/refunds/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId zodOnlyScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update refund + * @description Updates an existing refund + * @operationId zodOnlyScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId zodOnlyScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/refunds/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/refunds/route.ts new file mode 100644 index 00000000..b0822158 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/refunds/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId zodOnlyScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create refund + * @description Creates a new refund + * @operationId zodOnlyScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts new file mode 100644 index 00000000..62138d27 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/reports/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId zodOnlyScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update report + * @description Updates an existing report + * @operationId zodOnlyScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete report + * @description Deletes a report by identifier + * @operationId zodOnlyScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/reports/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/reports/route.ts new file mode 100644 index 00000000..46baf922 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/reports/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId zodOnlyScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create report + * @description Creates a new report + * @operationId zodOnlyScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts new file mode 100644 index 00000000..93648d45 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/sessions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId zodOnlyScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update session + * @description Updates an existing session + * @operationId zodOnlyScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete session + * @description Deletes a session by identifier + * @operationId zodOnlyScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/sessions/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/sessions/route.ts new file mode 100644 index 00000000..3e2c2d31 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/sessions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId zodOnlyScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create session + * @description Creates a new session + * @operationId zodOnlyScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts new file mode 100644 index 00000000..3e75849e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/subscriptions/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId zodOnlyScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId zodOnlyScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId zodOnlyScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/subscriptions/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/subscriptions/route.ts new file mode 100644 index 00000000..48f69c96 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/subscriptions/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId zodOnlyScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuerySchema + * @response SubscriptionListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId zodOnlyScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts new file mode 100644 index 00000000..18ca13be --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/teams/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId zodOnlyScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update team + * @description Updates an existing team + * @operationId zodOnlyScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete team + * @description Deletes a team by identifier + * @operationId zodOnlyScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/teams/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/teams/route.ts new file mode 100644 index 00000000..0b123497 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/teams/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId zodOnlyScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuerySchema + * @response TeamListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create team + * @description Creates a new team + * @operationId zodOnlyScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamSchema + * @response TeamSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts new file mode 100644 index 00000000..120f93fa --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/webhooks/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId zodOnlyScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId zodOnlyScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId zodOnlyScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/webhooks/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/webhooks/route.ts new file mode 100644 index 00000000..c5a396cf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/webhooks/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId zodOnlyScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId zodOnlyScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts new file mode 100644 index 00000000..ce4199be --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/workspaces/[id]/route.ts @@ -0,0 +1,46 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId zodOnlyScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId zodOnlyScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function PATCH() { + return Response.json({}); +} + +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId zodOnlyScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + */ +export async function DELETE() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/workspaces/route.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/workspaces/route.ts new file mode 100644 index 00000000..4d3398a9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/app/api/generated/workspaces/route.ts @@ -0,0 +1,29 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId zodOnlyScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + */ +export async function GET() { + return Response.json({}); +} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId zodOnlyScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + */ +export async function POST() { + return Response.json({}); +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/auth.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/auth.ts new file mode 100644 index 00000000..c26c7805 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/auth.ts @@ -0,0 +1,22 @@ +import { z } from "zod/v4"; + +import { ProviderSchema, SafeRedirectPathSchema } from "./shared"; + +export const OAuthStartQuerySchema = z.object({ + next: SafeRedirectPathSchema.optional(), + provider: ProviderSchema, +}); + +export const AuthUserSchema = z.object({ + id: z.uuid(), + email: z.email().nullable(), + createdAt: z.iso.datetime(), + lastSignInAt: z.iso.datetime().nullable(), + website: z.url().optional(), +}); + +export const LoginResponseSchema = z.object({ + user: AuthUserSchema, +}); + +export type LoginResponse = z.infer; diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/api-keys-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..e16eeeeb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/api-keys-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeySchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ApiKeyListResponse = z.object({ + items: z.array(ApiKeySchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ApiKeyIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/api-keys-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..12b4864a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/api-keys-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeyListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateApiKeySchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateApiKeySchema = CreateApiKeySchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/attachments-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..d67ef024 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/attachments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AttachmentListResponse = z.object({ + items: z.array(AttachmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AttachmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/attachments-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..845843f3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/attachments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAttachmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAttachmentSchema = CreateAttachmentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/audit-logs-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..bd9b8931 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/audit-logs-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..34e13d87 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/audit-logs-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAuditLogSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/catalog-items-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e7a311cb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CatalogItemListResponse = z.object({ + items: z.array(CatalogItemSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CatalogItemIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/catalog-items-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..9ca2d0fb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/catalog-items-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCatalogItemSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCatalogItemSchema = CreateCatalogItemSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/comments-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..44db99e6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/comments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/comments-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/comments-input.ts new file mode 100644 index 00000000..840de293 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/comments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCommentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/customers-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..7da28861 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/customers-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CustomerListResponse = z.object({ + items: z.array(CustomerSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CustomerIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/customers-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/customers-input.ts new file mode 100644 index 00000000..da9fe60a --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/customers-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCustomerSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCustomerSchema = CreateCustomerSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/departments-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..92c51920 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/departments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/departments-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/departments-input.ts new file mode 100644 index 00000000..d3705544 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/departments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDepartmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/documents-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..a8f57a10 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/documents-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DocumentListResponse = z.object({ + items: z.array(DocumentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DocumentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/documents-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/documents-input.ts new file mode 100644 index 00000000..869eca94 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/documents-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDocumentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDocumentSchema = CreateDocumentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/exports-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..8b3a79c8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/exports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ExportListResponse = z.object({ + items: z.array(ExportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ExportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/exports-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/exports-input.ts new file mode 100644 index 00000000..21c25a5f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/exports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateExportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateExportSchema = CreateExportSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/invoices-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..cbab42ff --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/invoices-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/invoices-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..07d279d2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/invoices-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateInvoiceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/members-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/members-entity.ts new file mode 100644 index 00000000..8a5c5ccd --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/members-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/members-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/members-input.ts new file mode 100644 index 00000000..fdccd311 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/members-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateMemberSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/notifications-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..ff8107e6 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/notifications-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const NotificationListResponse = z.object({ + items: z.array(NotificationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const NotificationIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/notifications-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..421e709c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/notifications-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateNotificationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateNotificationSchema = CreateNotificationSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/orders-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..2bf76fbb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/orders-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/orders-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/orders-input.ts new file mode 100644 index 00000000..9826c38f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/orders-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrderSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/organizations-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..4bd841b5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/organizations-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrganizationListResponse = z.object({ + items: z.array(OrganizationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrganizationIdParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/organizations-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..24198e68 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/organizations-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrganizationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrganizationSchema = CreateOrganizationSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/payments-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..fca47a60 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/payments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const PaymentListResponse = z.object({ + items: z.array(PaymentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const PaymentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/payments-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/payments-input.ts new file mode 100644 index 00000000..15f4871f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/payments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreatePaymentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdatePaymentSchema = CreatePaymentSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/products-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/products-entity.ts new file mode 100644 index 00000000..681fc713 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/products-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProductListResponse = z.object({ + items: z.array(ProductSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProductIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/products-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/products-input.ts new file mode 100644 index 00000000..d8cd63e2 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/products-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProductSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProductSchema = CreateProductSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/projects-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..4d3f3c01 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/projects-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProjectListResponse = z.object({ + items: z.array(ProjectSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProjectCollectionPathParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); + +export const ProjectIdParamsSchema = z.object({ + organizationId: z.string().uuid(), + projectId: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/projects-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/projects-input.ts new file mode 100644 index 00000000..7f687df8 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/projects-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProjectSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProjectSchema = CreateProjectSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/refunds-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..9d9867ee --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/refunds-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/refunds-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..f90e1386 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/refunds-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateRefundSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/reports-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..2981e8f1 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/reports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/reports-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/reports-input.ts new file mode 100644 index 00000000..d65dbc4c --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/reports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateReportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateReportSchema = CreateReportSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/sessions-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..9880f94b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/sessions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/sessions-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..00d4afeb --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/sessions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSessionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/subscriptions-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..2d61082d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SubscriptionListResponse = z.object({ + items: z.array(SubscriptionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SubscriptionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/subscriptions-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..28273921 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/subscriptions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSubscriptionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSubscriptionSchema = CreateSubscriptionSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/tasks-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..09677f29 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/tasks-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().uuid(), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().uuid(), + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/tasks-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..0c1422c3 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/tasks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTaskSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/teams-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..afbf8fcf --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/teams-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TeamListResponse = z.object({ + items: z.array(TeamSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TeamIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/teams-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/teams-input.ts new file mode 100644 index 00000000..7043e4b5 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/teams-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTeamSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTeamSchema = CreateTeamSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/webhooks-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..ddb257ab --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/webhooks-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/webhooks-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..61a0e181 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/webhooks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWebhookSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/workspaces-entity.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..20d92e0e --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/workspaces-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/workspaces-input.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..e6b80db9 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/generated/workspaces-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWorkspaceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/shared.ts b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/shared.ts new file mode 100644 index 00000000..b1b85096 --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/src/schemas/shared.ts @@ -0,0 +1,11 @@ +import { z } from "zod/v4"; + +export const ProviderSchema = z.enum(["github", "google"]); + +export const SafeRedirectPathSchema = z + .string() + .trim() + .transform((value) => value || "/") + .refine((value) => value.startsWith("/") && !value.startsWith("//")) + .refine((value) => !value.includes("://")) + .brand<"SafeRedirectPath">(); diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..9c759b0b --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.0.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "App Router Zod Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale Zod-only fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..147c3d4d --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.1.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "App Router Zod Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale Zod-only fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..3db3be4f --- /dev/null +++ b/tests/fixtures/projects/next/app-router/zod-only-coverage-at-scale/templates/openapi-3.2.json @@ -0,0 +1,17 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "App Router Zod Coverage At Scale", + "version": "1.0.0", + "description": "Large-scale Zod-only fixture" + }, + "apiDir": "./src/app/api", + "schemaDir": "./src/schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..024c59c1 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-pages-core-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/api-keys/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/api-keys/[id].ts new file mode 100644 index 00000000..75275d8a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/api-keys/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId pagesScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + * @method GET + */ +/** + * Update apikey + * @description Updates an existing apikey + * @operationId pagesScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + * @method PATCH + */ +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId pagesScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/api-keys/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/api-keys/index.ts new file mode 100644 index 00000000..a75ed3e0 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/api-keys/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId pagesScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + * @method GET + */ +/** + * Create apikey + * @description Creates a new apikey + * @operationId pagesScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/attachments/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/attachments/[id].ts new file mode 100644 index 00000000..1f5d668e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/attachments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId pagesScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + * @method GET + */ +/** + * Update attachment + * @description Updates an existing attachment + * @operationId pagesScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + * @method PATCH + */ +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId pagesScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/attachments/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/attachments/index.ts new file mode 100644 index 00000000..be306a25 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/attachments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId pagesScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + * @method GET + */ +/** + * Create attachment + * @description Creates a new attachment + * @operationId pagesScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/audit-logs/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/audit-logs/[id].ts new file mode 100644 index 00000000..db6d7726 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/audit-logs/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId pagesScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + * @method GET + */ +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId pagesScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + * @method PATCH + */ +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId pagesScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/audit-logs/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/audit-logs/index.ts new file mode 100644 index 00000000..977cbcc8 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/audit-logs/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId pagesScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + * @method GET + */ +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId pagesScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/catalog-items/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/catalog-items/[id].ts new file mode 100644 index 00000000..f911c509 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/catalog-items/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId pagesScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + * @method GET + */ +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId pagesScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + * @method PATCH + */ +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId pagesScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/catalog-items/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/catalog-items/index.ts new file mode 100644 index 00000000..545312d6 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/catalog-items/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId pagesScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + * @method GET + */ +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId pagesScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/comments/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/comments/[id].ts new file mode 100644 index 00000000..80418d92 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/comments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId pagesScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + * @method GET + */ +/** + * Update comment + * @description Updates an existing comment + * @operationId pagesScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + * @method PATCH + */ +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId pagesScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/comments/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/comments/index.ts new file mode 100644 index 00000000..218d8137 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/comments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId pagesScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + * @method GET + */ +/** + * Create comment + * @description Creates a new comment + * @operationId pagesScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/customers/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/customers/[id].ts new file mode 100644 index 00000000..9437c9b3 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/customers/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId pagesScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + * @method GET + */ +/** + * Update customer + * @description Updates an existing customer + * @operationId pagesScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + * @method PATCH + */ +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId pagesScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/customers/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/customers/index.ts new file mode 100644 index 00000000..f99a6672 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/customers/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId pagesScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + * @method GET + */ +/** + * Create customer + * @description Creates a new customer + * @operationId pagesScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/departments/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/departments/[id].ts new file mode 100644 index 00000000..c971c03a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/departments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId pagesScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + * @method GET + */ +/** + * Update department + * @description Updates an existing department + * @operationId pagesScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + * @method PATCH + */ +/** + * Delete department + * @description Deletes a department by identifier + * @operationId pagesScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/departments/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/departments/index.ts new file mode 100644 index 00000000..15932052 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/departments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId pagesScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + * @method GET + */ +/** + * Create department + * @description Creates a new department + * @operationId pagesScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/documents/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/documents/[id].ts new file mode 100644 index 00000000..96fc78ab --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/documents/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId pagesScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + * @method GET + */ +/** + * Update document + * @description Updates an existing document + * @operationId pagesScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + * @method PATCH + */ +/** + * Delete document + * @description Deletes a document by identifier + * @operationId pagesScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/documents/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/documents/index.ts new file mode 100644 index 00000000..06a4ec4f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/documents/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId pagesScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + * @method GET + */ +/** + * Create document + * @description Creates a new document + * @operationId pagesScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/exports/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/exports/[id].ts new file mode 100644 index 00000000..1b78854b --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/exports/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId pagesScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + * @method GET + */ +/** + * Update export + * @description Updates an existing export + * @operationId pagesScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + * @method PATCH + */ +/** + * Delete export + * @description Deletes a export by identifier + * @operationId pagesScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/exports/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/exports/index.ts new file mode 100644 index 00000000..e7f5e522 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/exports/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId pagesScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + * @method GET + */ +/** + * Create export + * @description Creates a new export + * @operationId pagesScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/invoices/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/invoices/[id].ts new file mode 100644 index 00000000..274de41d --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/invoices/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId pagesScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + * @method GET + */ +/** + * Update invoice + * @description Updates an existing invoice + * @operationId pagesScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + * @method PATCH + */ +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId pagesScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/invoices/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/invoices/index.ts new file mode 100644 index 00000000..738a8f6e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/invoices/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId pagesScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + * @method GET + */ +/** + * Create invoice + * @description Creates a new invoice + * @operationId pagesScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/members/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/members/[id].ts new file mode 100644 index 00000000..8c52c952 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/members/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId pagesScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + * @method GET + */ +/** + * Update member + * @description Updates an existing member + * @operationId pagesScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + * @method PATCH + */ +/** + * Delete member + * @description Deletes a member by identifier + * @operationId pagesScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/members/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/members/index.ts new file mode 100644 index 00000000..f3bad735 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/members/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId pagesScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + * @method GET + */ +/** + * Create member + * @description Creates a new member + * @operationId pagesScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/notifications/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/notifications/[id].ts new file mode 100644 index 00000000..50ddac93 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/notifications/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId pagesScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + * @method GET + */ +/** + * Update notification + * @description Updates an existing notification + * @operationId pagesScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + * @method PATCH + */ +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId pagesScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/notifications/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/notifications/index.ts new file mode 100644 index 00000000..2ce29486 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/notifications/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId pagesScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + * @method GET + */ +/** + * Create notification + * @description Creates a new notification + * @operationId pagesScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/orders/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/orders/[id].ts new file mode 100644 index 00000000..50efd20f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/orders/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId pagesScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + * @method GET + */ +/** + * Update order + * @description Updates an existing order + * @operationId pagesScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + * @method PATCH + */ +/** + * Delete order + * @description Deletes a order by identifier + * @operationId pagesScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/orders/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/orders/index.ts new file mode 100644 index 00000000..91f5ded1 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/orders/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId pagesScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + * @method GET + */ +/** + * Create order + * @description Creates a new order + * @operationId pagesScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/organizations/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/organizations/[id].ts new file mode 100644 index 00000000..618f93c9 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/organizations/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId pagesScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + * @method GET + */ +/** + * Update organization + * @description Updates an existing organization + * @operationId pagesScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + * @method PATCH + */ +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId pagesScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/organizations/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/organizations/index.ts new file mode 100644 index 00000000..93960e60 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/organizations/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId pagesScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + * @method GET + */ +/** + * Create organization + * @description Creates a new organization + * @operationId pagesScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/payments/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/payments/[id].ts new file mode 100644 index 00000000..7711ca59 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/payments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId pagesScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + * @method GET + */ +/** + * Update payment + * @description Updates an existing payment + * @operationId pagesScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + * @method PATCH + */ +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId pagesScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/payments/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/payments/index.ts new file mode 100644 index 00000000..dc0b4552 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/payments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId pagesScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + * @method GET + */ +/** + * Create payment + * @description Creates a new payment + * @operationId pagesScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/products/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/products/[id].ts new file mode 100644 index 00000000..c7e01ce9 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/products/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId pagesScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + * @method GET + */ +/** + * Update product + * @description Updates an existing product + * @operationId pagesScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + * @method PATCH + */ +/** + * Delete product + * @description Deletes a product by identifier + * @operationId pagesScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/products/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/products/index.ts new file mode 100644 index 00000000..f486dfd0 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/products/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId pagesScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + * @method GET + */ +/** + * Create product + * @description Creates a new product + * @operationId pagesScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/projects/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/projects/[id].ts new file mode 100644 index 00000000..cb8d17d2 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/projects/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId pagesScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + * @method GET + */ +/** + * Update project + * @description Updates an existing project + * @operationId pagesScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + * @method PATCH + */ +/** + * Delete project + * @description Deletes a project by identifier + * @operationId pagesScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/projects/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/projects/index.ts new file mode 100644 index 00000000..3a16dde0 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/projects/index.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId pagesScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + * @method GET + */ +/** + * Create project + * @description Creates a new project + * @operationId pagesScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/refunds/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/refunds/[id].ts new file mode 100644 index 00000000..7c69a107 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/refunds/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId pagesScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + * @method GET + */ +/** + * Update refund + * @description Updates an existing refund + * @operationId pagesScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + * @method PATCH + */ +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId pagesScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/refunds/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/refunds/index.ts new file mode 100644 index 00000000..861d977d --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/refunds/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId pagesScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + * @method GET + */ +/** + * Create refund + * @description Creates a new refund + * @operationId pagesScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/reports/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/reports/[id].ts new file mode 100644 index 00000000..1793e740 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/reports/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId pagesScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + * @method GET + */ +/** + * Update report + * @description Updates an existing report + * @operationId pagesScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + * @method PATCH + */ +/** + * Delete report + * @description Deletes a report by identifier + * @operationId pagesScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/reports/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/reports/index.ts new file mode 100644 index 00000000..5ca30483 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/reports/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId pagesScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + * @method GET + */ +/** + * Create report + * @description Creates a new report + * @operationId pagesScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/sessions/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/sessions/[id].ts new file mode 100644 index 00000000..d20340f0 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/sessions/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId pagesScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + * @method GET + */ +/** + * Update session + * @description Updates an existing session + * @operationId pagesScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + * @method PATCH + */ +/** + * Delete session + * @description Deletes a session by identifier + * @operationId pagesScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/sessions/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/sessions/index.ts new file mode 100644 index 00000000..f612e7f4 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/sessions/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId pagesScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + * @method GET + */ +/** + * Create session + * @description Creates a new session + * @operationId pagesScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/subscriptions/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/subscriptions/[id].ts new file mode 100644 index 00000000..7dc38491 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/subscriptions/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId pagesScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + * @method GET + */ +/** + * Update subscription + * @description Updates an existing subscription + * @operationId pagesScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + * @method PATCH + */ +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId pagesScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/subscriptions/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/subscriptions/index.ts new file mode 100644 index 00000000..62324bc3 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/subscriptions/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId pagesScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + * @method GET + */ +/** + * Create subscription + * @description Creates a new subscription + * @operationId pagesScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/tasks/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/tasks/[id].ts new file mode 100644 index 00000000..3174eb4a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/tasks/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId pagesScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + * @method GET + */ +/** + * Update task + * @description Updates an existing task + * @operationId pagesScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + * @method PATCH + */ +/** + * Delete task + * @description Deletes a task by identifier + * @operationId pagesScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/tasks/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/tasks/index.ts new file mode 100644 index 00000000..694c4018 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/tasks/index.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId pagesScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + * @method GET + */ +/** + * Create task + * @description Creates a new task + * @operationId pagesScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/teams/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/teams/[id].ts new file mode 100644 index 00000000..3e1524b9 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/teams/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId pagesScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + * @method GET + */ +/** + * Update team + * @description Updates an existing team + * @operationId pagesScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + * @method PATCH + */ +/** + * Delete team + * @description Deletes a team by identifier + * @operationId pagesScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/teams/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/teams/index.ts new file mode 100644 index 00000000..ab8e6f66 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/teams/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId pagesScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + * @method GET + */ +/** + * Create team + * @description Creates a new team + * @operationId pagesScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/webhooks/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/webhooks/[id].ts new file mode 100644 index 00000000..ddd16639 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/webhooks/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId pagesScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + * @method GET + */ +/** + * Update webhook + * @description Updates an existing webhook + * @operationId pagesScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + * @method PATCH + */ +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId pagesScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/webhooks/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/webhooks/index.ts new file mode 100644 index 00000000..eab22450 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/webhooks/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId pagesScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + * @method GET + */ +/** + * Create webhook + * @description Creates a new webhook + * @operationId pagesScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/workspaces/[id].ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/workspaces/[id].ts new file mode 100644 index 00000000..b6cd50fa --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/workspaces/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId pagesScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + * @method GET + */ +/** + * Update workspace + * @description Updates an existing workspace + * @operationId pagesScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + * @method PATCH + */ +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId pagesScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/workspaces/index.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/workspaces/index.ts new file mode 100644 index 00000000..0a62b574 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/pages/api/generated/workspaces/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId pagesScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + * @method GET + */ +/** + * Create workspace + * @description Creates a new workspace + * @operationId pagesScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/api-keys-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/api-keys-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/attachments-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/attachments-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/audit-logs-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/audit-logs-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/catalog-items-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/catalog-items-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/comments-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/comments-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/customers-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/customers-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/departments-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/departments-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/documents-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/documents-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/exports-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/exports-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/invoices-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/invoices-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/members-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/members-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/notifications-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/notifications-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/orders-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/orders-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/organizations-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/organizations-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/payments-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/payments-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/products-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/products-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/projects-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/projects-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/refunds-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/refunds-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/reports-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/reports-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/sessions-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/sessions-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/subscriptions-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/subscriptions-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/tasks-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/tasks-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/teams-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/teams-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/webhooks-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/webhooks-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/workspaces-entity.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/workspaces-input.ts b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/schemas/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..363f9ceb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.0.json @@ -0,0 +1,27 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Pages Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale pages router TypeScript fixture" + }, + "components": { + "securitySchemes": { + "BearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + }, + "routerType": "pages", + "apiDir": "./pages/api", + "schemaDir": "./schemas", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..f6c87f8a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.1.json @@ -0,0 +1,27 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Pages Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale pages router TypeScript fixture" + }, + "components": { + "securitySchemes": { + "BearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + }, + "routerType": "pages", + "apiDir": "./pages/api", + "schemaDir": "./schemas", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..54efcce5 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/core-flow-at-scale/templates/openapi-3.2.json @@ -0,0 +1,27 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "Pages Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale pages router TypeScript fixture" + }, + "components": { + "securitySchemes": { + "BearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + }, + "routerType": "pages", + "apiDir": "./pages/api", + "schemaDir": "./schemas", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/GENERATED.scale.json b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..04885dba --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "next-pages-zod-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/api-keys/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/api-keys/[id].ts new file mode 100644 index 00000000..0e373d33 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/api-keys/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId pagesZodScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeySchema + * @openapi + * @method GET + */ +/** + * Update apikey + * @description Updates an existing apikey + * @operationId pagesZodScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeySchema + * @response ApiKeySchema + * @openapi + * @method PATCH + */ +/** + * Delete apikey + * @description Deletes a apikey by identifier + * @operationId pagesZodScaleDeleteApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/api-keys/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/api-keys/index.ts new file mode 100644 index 00000000..7f90af1b --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/api-keys/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId pagesZodScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuerySchema + * @response ApiKeyListResponse + * @openapi + * @method GET + */ +/** + * Create apikey + * @description Creates a new apikey + * @operationId pagesZodScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeySchema + * @response ApiKeySchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/attachments/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/attachments/[id].ts new file mode 100644 index 00000000..849a1423 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/attachments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId pagesZodScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentSchema + * @openapi + * @method GET + */ +/** + * Update attachment + * @description Updates an existing attachment + * @operationId pagesZodScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentSchema + * @response AttachmentSchema + * @openapi + * @method PATCH + */ +/** + * Delete attachment + * @description Deletes a attachment by identifier + * @operationId pagesZodScaleDeleteAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/attachments/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/attachments/index.ts new file mode 100644 index 00000000..e2c96998 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/attachments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId pagesZodScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuerySchema + * @response AttachmentListResponse + * @openapi + * @method GET + */ +/** + * Create attachment + * @description Creates a new attachment + * @operationId pagesZodScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentSchema + * @response AttachmentSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/audit-logs/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/audit-logs/[id].ts new file mode 100644 index 00000000..c3322fcc --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/audit-logs/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId pagesZodScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogSchema + * @openapi + * @method GET + */ +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId pagesZodScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogSchema + * @response AuditLogSchema + * @openapi + * @method PATCH + */ +/** + * Delete auditlog + * @description Deletes a auditlog by identifier + * @operationId pagesZodScaleDeleteAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/audit-logs/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/audit-logs/index.ts new file mode 100644 index 00000000..e02b29dd --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/audit-logs/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId pagesZodScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuerySchema + * @response AuditLogListResponse + * @openapi + * @method GET + */ +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId pagesZodScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogSchema + * @response AuditLogSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/catalog-items/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/catalog-items/[id].ts new file mode 100644 index 00000000..74fad849 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/catalog-items/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId pagesZodScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemSchema + * @openapi + * @method GET + */ +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId pagesZodScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + * @method PATCH + */ +/** + * Delete catalogitem + * @description Deletes a catalogitem by identifier + * @operationId pagesZodScaleDeleteCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/catalog-items/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/catalog-items/index.ts new file mode 100644 index 00000000..bda5df7e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/catalog-items/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId pagesZodScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuerySchema + * @response CatalogItemListResponse + * @openapi + * @method GET + */ +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId pagesZodScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemSchema + * @response CatalogItemSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/comments/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/comments/[id].ts new file mode 100644 index 00000000..4f7107ad --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/comments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId pagesZodScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentSchema + * @openapi + * @method GET + */ +/** + * Update comment + * @description Updates an existing comment + * @operationId pagesZodScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentSchema + * @response CommentSchema + * @openapi + * @method PATCH + */ +/** + * Delete comment + * @description Deletes a comment by identifier + * @operationId pagesZodScaleDeleteComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/comments/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/comments/index.ts new file mode 100644 index 00000000..b9d4b24f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/comments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId pagesZodScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuerySchema + * @response CommentListResponse + * @openapi + * @method GET + */ +/** + * Create comment + * @description Creates a new comment + * @operationId pagesZodScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentSchema + * @response CommentSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/customers/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/customers/[id].ts new file mode 100644 index 00000000..d3af9610 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/customers/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId pagesZodScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerSchema + * @openapi + * @method GET + */ +/** + * Update customer + * @description Updates an existing customer + * @operationId pagesZodScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerSchema + * @response CustomerSchema + * @openapi + * @method PATCH + */ +/** + * Delete customer + * @description Deletes a customer by identifier + * @operationId pagesZodScaleDeleteCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/customers/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/customers/index.ts new file mode 100644 index 00000000..b8f0263d --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/customers/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId pagesZodScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuerySchema + * @response CustomerListResponse + * @openapi + * @method GET + */ +/** + * Create customer + * @description Creates a new customer + * @operationId pagesZodScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerSchema + * @response CustomerSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/departments/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/departments/[id].ts new file mode 100644 index 00000000..b47878e6 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/departments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId pagesZodScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentSchema + * @openapi + * @method GET + */ +/** + * Update department + * @description Updates an existing department + * @operationId pagesZodScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentSchema + * @response DepartmentSchema + * @openapi + * @method PATCH + */ +/** + * Delete department + * @description Deletes a department by identifier + * @operationId pagesZodScaleDeleteDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/departments/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/departments/index.ts new file mode 100644 index 00000000..2b934281 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/departments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId pagesZodScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuerySchema + * @response DepartmentListResponse + * @openapi + * @method GET + */ +/** + * Create department + * @description Creates a new department + * @operationId pagesZodScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentSchema + * @response DepartmentSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/documents/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/documents/[id].ts new file mode 100644 index 00000000..99cc91d1 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/documents/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId pagesZodScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentSchema + * @openapi + * @method GET + */ +/** + * Update document + * @description Updates an existing document + * @operationId pagesZodScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentSchema + * @response DocumentSchema + * @openapi + * @method PATCH + */ +/** + * Delete document + * @description Deletes a document by identifier + * @operationId pagesZodScaleDeleteDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/documents/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/documents/index.ts new file mode 100644 index 00000000..c18cc19e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/documents/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId pagesZodScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuerySchema + * @response DocumentListResponse + * @openapi + * @method GET + */ +/** + * Create document + * @description Creates a new document + * @operationId pagesZodScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentSchema + * @response DocumentSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/exports/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/exports/[id].ts new file mode 100644 index 00000000..cf364c4f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/exports/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId pagesZodScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportSchema + * @openapi + * @method GET + */ +/** + * Update export + * @description Updates an existing export + * @operationId pagesZodScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportSchema + * @response ExportSchema + * @openapi + * @method PATCH + */ +/** + * Delete export + * @description Deletes a export by identifier + * @operationId pagesZodScaleDeleteExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/exports/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/exports/index.ts new file mode 100644 index 00000000..f79c38fd --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/exports/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId pagesZodScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuerySchema + * @response ExportListResponse + * @openapi + * @method GET + */ +/** + * Create export + * @description Creates a new export + * @operationId pagesZodScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportSchema + * @response ExportSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/invoices/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/invoices/[id].ts new file mode 100644 index 00000000..95d0a62f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/invoices/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId pagesZodScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceSchema + * @openapi + * @method GET + */ +/** + * Update invoice + * @description Updates an existing invoice + * @operationId pagesZodScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceSchema + * @response InvoiceSchema + * @openapi + * @method PATCH + */ +/** + * Delete invoice + * @description Deletes a invoice by identifier + * @operationId pagesZodScaleDeleteInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/invoices/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/invoices/index.ts new file mode 100644 index 00000000..3b0ed329 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/invoices/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId pagesZodScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuerySchema + * @response InvoiceListResponse + * @openapi + * @method GET + */ +/** + * Create invoice + * @description Creates a new invoice + * @operationId pagesZodScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceSchema + * @response InvoiceSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/members/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/members/[id].ts new file mode 100644 index 00000000..05c71b09 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/members/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId pagesZodScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberSchema + * @openapi + * @method GET + */ +/** + * Update member + * @description Updates an existing member + * @operationId pagesZodScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberSchema + * @response MemberSchema + * @openapi + * @method PATCH + */ +/** + * Delete member + * @description Deletes a member by identifier + * @operationId pagesZodScaleDeleteMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/members/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/members/index.ts new file mode 100644 index 00000000..764fc84a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/members/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId pagesZodScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuerySchema + * @response MemberListResponse + * @openapi + * @method GET + */ +/** + * Create member + * @description Creates a new member + * @operationId pagesZodScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberSchema + * @response MemberSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/notifications/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/notifications/[id].ts new file mode 100644 index 00000000..3915b0f9 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/notifications/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId pagesZodScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationSchema + * @openapi + * @method GET + */ +/** + * Update notification + * @description Updates an existing notification + * @operationId pagesZodScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationSchema + * @response NotificationSchema + * @openapi + * @method PATCH + */ +/** + * Delete notification + * @description Deletes a notification by identifier + * @operationId pagesZodScaleDeleteNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/notifications/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/notifications/index.ts new file mode 100644 index 00000000..6d45382a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/notifications/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId pagesZodScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuerySchema + * @response NotificationListResponse + * @openapi + * @method GET + */ +/** + * Create notification + * @description Creates a new notification + * @operationId pagesZodScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationSchema + * @response NotificationSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/orders/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/orders/[id].ts new file mode 100644 index 00000000..1691e3d5 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/orders/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId pagesZodScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderSchema + * @openapi + * @method GET + */ +/** + * Update order + * @description Updates an existing order + * @operationId pagesZodScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderSchema + * @response OrderSchema + * @openapi + * @method PATCH + */ +/** + * Delete order + * @description Deletes a order by identifier + * @operationId pagesZodScaleDeleteOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/orders/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/orders/index.ts new file mode 100644 index 00000000..af7b4280 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/orders/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId pagesZodScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuerySchema + * @response OrderListResponse + * @openapi + * @method GET + */ +/** + * Create order + * @description Creates a new order + * @operationId pagesZodScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderSchema + * @response OrderSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/organizations/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/organizations/[id].ts new file mode 100644 index 00000000..00c19be6 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/organizations/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId pagesZodScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationSchema + * @openapi + * @method GET + */ +/** + * Update organization + * @description Updates an existing organization + * @operationId pagesZodScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationSchema + * @response OrganizationSchema + * @openapi + * @method PATCH + */ +/** + * Delete organization + * @description Deletes a organization by identifier + * @operationId pagesZodScaleDeleteOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/organizations/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/organizations/index.ts new file mode 100644 index 00000000..9084db8d --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/organizations/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId pagesZodScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuerySchema + * @response OrganizationListResponse + * @openapi + * @method GET + */ +/** + * Create organization + * @description Creates a new organization + * @operationId pagesZodScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationSchema + * @response OrganizationSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/payments/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/payments/[id].ts new file mode 100644 index 00000000..53ec4bcc --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/payments/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId pagesZodScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentSchema + * @openapi + * @method GET + */ +/** + * Update payment + * @description Updates an existing payment + * @operationId pagesZodScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentSchema + * @response PaymentSchema + * @openapi + * @method PATCH + */ +/** + * Delete payment + * @description Deletes a payment by identifier + * @operationId pagesZodScaleDeletePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/payments/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/payments/index.ts new file mode 100644 index 00000000..50e12ce8 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/payments/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId pagesZodScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuerySchema + * @response PaymentListResponse + * @openapi + * @method GET + */ +/** + * Create payment + * @description Creates a new payment + * @operationId pagesZodScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentSchema + * @response PaymentSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/products/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/products/[id].ts new file mode 100644 index 00000000..160ac98c --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/products/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId pagesZodScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductSchema + * @openapi + * @method GET + */ +/** + * Update product + * @description Updates an existing product + * @operationId pagesZodScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductSchema + * @response ProductSchema + * @openapi + * @method PATCH + */ +/** + * Delete product + * @description Deletes a product by identifier + * @operationId pagesZodScaleDeleteProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/products/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/products/index.ts new file mode 100644 index 00000000..a993601f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/products/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId pagesZodScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuerySchema + * @response ProductListResponse + * @openapi + * @method GET + */ +/** + * Create product + * @description Creates a new product + * @operationId pagesZodScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductSchema + * @response ProductSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/projects/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/projects/[id].ts new file mode 100644 index 00000000..2b6c421e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/projects/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId pagesZodScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectSchema + * @openapi + * @method GET + */ +/** + * Update project + * @description Updates an existing project + * @operationId pagesZodScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectSchema + * @response ProjectSchema + * @openapi + * @method PATCH + */ +/** + * Delete project + * @description Deletes a project by identifier + * @operationId pagesZodScaleDeleteProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/projects/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/projects/index.ts new file mode 100644 index 00000000..20a118e4 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/projects/index.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId pagesZodScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuerySchema + * @response ProjectListResponse + * @openapi + * @method GET + */ +/** + * Create project + * @description Creates a new project + * @operationId pagesZodScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectSchema + * @response ProjectSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/refunds/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/refunds/[id].ts new file mode 100644 index 00000000..6c52e716 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/refunds/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId pagesZodScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundSchema + * @openapi + * @method GET + */ +/** + * Update refund + * @description Updates an existing refund + * @operationId pagesZodScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundSchema + * @response RefundSchema + * @openapi + * @method PATCH + */ +/** + * Delete refund + * @description Deletes a refund by identifier + * @operationId pagesZodScaleDeleteRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/refunds/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/refunds/index.ts new file mode 100644 index 00000000..83215073 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/refunds/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId pagesZodScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuerySchema + * @response RefundListResponse + * @openapi + * @method GET + */ +/** + * Create refund + * @description Creates a new refund + * @operationId pagesZodScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundSchema + * @response RefundSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/reports/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/reports/[id].ts new file mode 100644 index 00000000..667ddc83 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/reports/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId pagesZodScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportSchema + * @openapi + * @method GET + */ +/** + * Update report + * @description Updates an existing report + * @operationId pagesZodScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportSchema + * @response ReportSchema + * @openapi + * @method PATCH + */ +/** + * Delete report + * @description Deletes a report by identifier + * @operationId pagesZodScaleDeleteReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/reports/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/reports/index.ts new file mode 100644 index 00000000..f333c411 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/reports/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId pagesZodScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuerySchema + * @response ReportListResponse + * @openapi + * @method GET + */ +/** + * Create report + * @description Creates a new report + * @operationId pagesZodScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportSchema + * @response ReportSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/sessions/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/sessions/[id].ts new file mode 100644 index 00000000..5e485e69 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/sessions/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId pagesZodScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionSchema + * @openapi + * @method GET + */ +/** + * Update session + * @description Updates an existing session + * @operationId pagesZodScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionSchema + * @response SessionSchema + * @openapi + * @method PATCH + */ +/** + * Delete session + * @description Deletes a session by identifier + * @operationId pagesZodScaleDeleteSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/sessions/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/sessions/index.ts new file mode 100644 index 00000000..f47cb67f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/sessions/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId pagesZodScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuerySchema + * @response SessionListResponse + * @openapi + * @method GET + */ +/** + * Create session + * @description Creates a new session + * @operationId pagesZodScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionSchema + * @response SessionSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/subscriptions/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/subscriptions/[id].ts new file mode 100644 index 00000000..b274f097 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/subscriptions/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId pagesZodScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionSchema + * @openapi + * @method GET + */ +/** + * Update subscription + * @description Updates an existing subscription + * @operationId pagesZodScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + * @method PATCH + */ +/** + * Delete subscription + * @description Deletes a subscription by identifier + * @operationId pagesZodScaleDeleteSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/subscriptions/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/subscriptions/index.ts new file mode 100644 index 00000000..80dcd010 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/subscriptions/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId pagesZodScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuerySchema + * @response SubscriptionListResponse + * @openapi + * @method GET + */ +/** + * Create subscription + * @description Creates a new subscription + * @operationId pagesZodScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionSchema + * @response SubscriptionSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/tasks/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/tasks/[id].ts new file mode 100644 index 00000000..3caa49e5 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/tasks/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId pagesZodScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskSchema + * @openapi + * @method GET + */ +/** + * Update task + * @description Updates an existing task + * @operationId pagesZodScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskSchema + * @response TaskSchema + * @openapi + * @method PATCH + */ +/** + * Delete task + * @description Deletes a task by identifier + * @operationId pagesZodScaleDeleteTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/tasks/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/tasks/index.ts new file mode 100644 index 00000000..d0ffcdb4 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/tasks/index.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId pagesZodScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuerySchema + * @response TaskListResponse + * @openapi + * @method GET + */ +/** + * Create task + * @description Creates a new task + * @operationId pagesZodScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskSchema + * @response TaskSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/teams/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/teams/[id].ts new file mode 100644 index 00000000..e9c17028 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/teams/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId pagesZodScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamSchema + * @openapi + * @method GET + */ +/** + * Update team + * @description Updates an existing team + * @operationId pagesZodScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamSchema + * @response TeamSchema + * @openapi + * @method PATCH + */ +/** + * Delete team + * @description Deletes a team by identifier + * @operationId pagesZodScaleDeleteTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/teams/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/teams/index.ts new file mode 100644 index 00000000..9e21bbe2 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/teams/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId pagesZodScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuerySchema + * @response TeamListResponse + * @openapi + * @method GET + */ +/** + * Create team + * @description Creates a new team + * @operationId pagesZodScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamSchema + * @response TeamSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/webhooks/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/webhooks/[id].ts new file mode 100644 index 00000000..084efade --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/webhooks/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId pagesZodScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookSchema + * @openapi + * @method GET + */ +/** + * Update webhook + * @description Updates an existing webhook + * @operationId pagesZodScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookSchema + * @response WebhookSchema + * @openapi + * @method PATCH + */ +/** + * Delete webhook + * @description Deletes a webhook by identifier + * @operationId pagesZodScaleDeleteWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/webhooks/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/webhooks/index.ts new file mode 100644 index 00000000..bf3ab2bb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/webhooks/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId pagesZodScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuerySchema + * @response WebhookListResponse + * @openapi + * @method GET + */ +/** + * Create webhook + * @description Creates a new webhook + * @operationId pagesZodScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookSchema + * @response WebhookSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/workspaces/[id].ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/workspaces/[id].ts new file mode 100644 index 00000000..d92bfab1 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/workspaces/[id].ts @@ -0,0 +1,39 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId pagesZodScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceSchema + * @openapi + * @method GET + */ +/** + * Update workspace + * @description Updates an existing workspace + * @operationId pagesZodScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + * @method PATCH + */ +/** + * Delete workspace + * @description Deletes a workspace by identifier + * @operationId pagesZodScaleDeleteWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @response 204:Empty:Resource deleted successfully + * @openapi + * @method DELETE + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/workspaces/index.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/workspaces/index.ts new file mode 100644 index 00000000..b5f40b9c --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/pages/api/generated/workspaces/index.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId pagesZodScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuerySchema + * @response WorkspaceListResponse + * @openapi + * @method GET + */ +/** + * Create workspace + * @description Creates a new workspace + * @operationId pagesZodScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceSchema + * @response WorkspaceSchema + * @openapi + * @method POST + */ +export default function handler() {} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/api-keys-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/api-keys-entity.ts new file mode 100644 index 00000000..e16eeeeb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/api-keys-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeySchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ApiKeyListResponse = z.object({ + items: z.array(ApiKeySchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ApiKeyIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/api-keys-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/api-keys-input.ts new file mode 100644 index 00000000..12b4864a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/api-keys-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ApiKeyListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateApiKeySchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateApiKeySchema = CreateApiKeySchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/attachments-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/attachments-entity.ts new file mode 100644 index 00000000..d67ef024 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/attachments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AttachmentListResponse = z.object({ + items: z.array(AttachmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AttachmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/attachments-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/attachments-input.ts new file mode 100644 index 00000000..845843f3 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/attachments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AttachmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAttachmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAttachmentSchema = CreateAttachmentSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/audit-logs-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/audit-logs-entity.ts new file mode 100644 index 00000000..bd9b8931 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/audit-logs-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const AuditLogListResponse = z.object({ + items: z.array(AuditLogSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const AuditLogIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/audit-logs-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/audit-logs-input.ts new file mode 100644 index 00000000..34e13d87 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/audit-logs-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const AuditLogListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateAuditLogSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateAuditLogSchema = CreateAuditLogSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/catalog-items-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e7a311cb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/catalog-items-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CatalogItemListResponse = z.object({ + items: z.array(CatalogItemSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CatalogItemIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/catalog-items-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/catalog-items-input.ts new file mode 100644 index 00000000..9ca2d0fb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/catalog-items-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CatalogItemListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCatalogItemSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCatalogItemSchema = CreateCatalogItemSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/comments-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/comments-entity.ts new file mode 100644 index 00000000..44db99e6 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/comments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CommentListResponse = z.object({ + items: z.array(CommentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CommentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/comments-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/comments-input.ts new file mode 100644 index 00000000..840de293 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/comments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CommentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCommentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCommentSchema = CreateCommentSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/customers-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/customers-entity.ts new file mode 100644 index 00000000..7da28861 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/customers-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const CustomerListResponse = z.object({ + items: z.array(CustomerSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const CustomerIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/customers-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/customers-input.ts new file mode 100644 index 00000000..da9fe60a --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/customers-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const CustomerListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateCustomerSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateCustomerSchema = CreateCustomerSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/departments-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/departments-entity.ts new file mode 100644 index 00000000..92c51920 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/departments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DepartmentListResponse = z.object({ + items: z.array(DepartmentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DepartmentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/departments-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/departments-input.ts new file mode 100644 index 00000000..d3705544 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/departments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DepartmentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDepartmentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDepartmentSchema = CreateDepartmentSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/documents-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/documents-entity.ts new file mode 100644 index 00000000..a8f57a10 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/documents-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const DocumentListResponse = z.object({ + items: z.array(DocumentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const DocumentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/documents-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/documents-input.ts new file mode 100644 index 00000000..869eca94 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/documents-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const DocumentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateDocumentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateDocumentSchema = CreateDocumentSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/exports-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/exports-entity.ts new file mode 100644 index 00000000..8b3a79c8 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/exports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ExportListResponse = z.object({ + items: z.array(ExportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ExportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/exports-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/exports-input.ts new file mode 100644 index 00000000..21c25a5f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/exports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ExportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateExportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateExportSchema = CreateExportSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/invoices-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/invoices-entity.ts new file mode 100644 index 00000000..cbab42ff --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/invoices-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const InvoiceListResponse = z.object({ + items: z.array(InvoiceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const InvoiceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/invoices-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/invoices-input.ts new file mode 100644 index 00000000..07d279d2 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/invoices-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const InvoiceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateInvoiceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateInvoiceSchema = CreateInvoiceSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/members-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/members-entity.ts new file mode 100644 index 00000000..8a5c5ccd --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/members-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const MemberListResponse = z.object({ + items: z.array(MemberSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const MemberIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/members-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/members-input.ts new file mode 100644 index 00000000..fdccd311 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/members-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const MemberListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateMemberSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateMemberSchema = CreateMemberSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/notifications-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/notifications-entity.ts new file mode 100644 index 00000000..ff8107e6 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/notifications-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const NotificationListResponse = z.object({ + items: z.array(NotificationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const NotificationIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/notifications-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/notifications-input.ts new file mode 100644 index 00000000..421e709c --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/notifications-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const NotificationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateNotificationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateNotificationSchema = CreateNotificationSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/orders-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/orders-entity.ts new file mode 100644 index 00000000..2bf76fbb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/orders-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrderListResponse = z.object({ + items: z.array(OrderSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrderIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/orders-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/orders-input.ts new file mode 100644 index 00000000..9826c38f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/orders-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrderListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrderSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrderSchema = CreateOrderSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/organizations-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/organizations-entity.ts new file mode 100644 index 00000000..4bd841b5 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/organizations-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const OrganizationListResponse = z.object({ + items: z.array(OrganizationSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const OrganizationIdParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/organizations-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/organizations-input.ts new file mode 100644 index 00000000..24198e68 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/organizations-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const OrganizationListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateOrganizationSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateOrganizationSchema = CreateOrganizationSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/payments-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/payments-entity.ts new file mode 100644 index 00000000..fca47a60 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/payments-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const PaymentListResponse = z.object({ + items: z.array(PaymentSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const PaymentIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/payments-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/payments-input.ts new file mode 100644 index 00000000..15f4871f --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/payments-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const PaymentListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreatePaymentSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdatePaymentSchema = CreatePaymentSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/products-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/products-entity.ts new file mode 100644 index 00000000..681fc713 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/products-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProductListResponse = z.object({ + items: z.array(ProductSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProductIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/products-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/products-input.ts new file mode 100644 index 00000000..d8cd63e2 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/products-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProductListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProductSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProductSchema = CreateProductSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/projects-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/projects-entity.ts new file mode 100644 index 00000000..4d3f3c01 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/projects-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ProjectListResponse = z.object({ + items: z.array(ProjectSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ProjectCollectionPathParamsSchema = z.object({ + organizationId: z.string().uuid(), +}); + +export const ProjectIdParamsSchema = z.object({ + organizationId: z.string().uuid(), + projectId: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/projects-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/projects-input.ts new file mode 100644 index 00000000..7f687df8 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/projects-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ProjectListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateProjectSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateProjectSchema = CreateProjectSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/refunds-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/refunds-entity.ts new file mode 100644 index 00000000..9d9867ee --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/refunds-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const RefundListResponse = z.object({ + items: z.array(RefundSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const RefundIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/refunds-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/refunds-input.ts new file mode 100644 index 00000000..f90e1386 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/refunds-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const RefundListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateRefundSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateRefundSchema = CreateRefundSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/reports-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/reports-entity.ts new file mode 100644 index 00000000..2981e8f1 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/reports-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const ReportListResponse = z.object({ + items: z.array(ReportSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const ReportIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/reports-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/reports-input.ts new file mode 100644 index 00000000..d65dbc4c --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/reports-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const ReportListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateReportSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateReportSchema = CreateReportSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/sessions-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/sessions-entity.ts new file mode 100644 index 00000000..9880f94b --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/sessions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SessionListResponse = z.object({ + items: z.array(SessionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SessionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/sessions-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/sessions-input.ts new file mode 100644 index 00000000..00d4afeb --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/sessions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SessionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSessionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSessionSchema = CreateSessionSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/subscriptions-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/subscriptions-entity.ts new file mode 100644 index 00000000..2d61082d --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/subscriptions-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const SubscriptionListResponse = z.object({ + items: z.array(SubscriptionSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const SubscriptionIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/subscriptions-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/subscriptions-input.ts new file mode 100644 index 00000000..28273921 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/subscriptions-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const SubscriptionListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateSubscriptionSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateSubscriptionSchema = CreateSubscriptionSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/tasks-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/tasks-entity.ts new file mode 100644 index 00000000..09677f29 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/tasks-entity.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TaskListResponse = z.object({ + items: z.array(TaskSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TaskCollectionPathParamsSchema = z.object({ + projectId: z.string().uuid(), +}); + +export const TaskIdParamsSchema = z.object({ + projectId: z.string().uuid(), + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/tasks-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/tasks-input.ts new file mode 100644 index 00000000..0c1422c3 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/tasks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TaskListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTaskSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTaskSchema = CreateTaskSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/teams-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/teams-entity.ts new file mode 100644 index 00000000..afbf8fcf --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/teams-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const TeamListResponse = z.object({ + items: z.array(TeamSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const TeamIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/teams-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/teams-input.ts new file mode 100644 index 00000000..7043e4b5 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/teams-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const TeamListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateTeamSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateTeamSchema = CreateTeamSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/webhooks-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/webhooks-entity.ts new file mode 100644 index 00000000..ddb257ab --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/webhooks-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WebhookListResponse = z.object({ + items: z.array(WebhookSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WebhookIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/webhooks-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/webhooks-input.ts new file mode 100644 index 00000000..61a0e181 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/webhooks-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WebhookListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWebhookSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWebhookSchema = CreateWebhookSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/workspaces-entity.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/workspaces-entity.ts new file mode 100644 index 00000000..20d92e0e --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/workspaces-entity.ts @@ -0,0 +1,22 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceSchema = z.object({ + id: z.string().uuid(), + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean(), + createdAt: z.string().datetime().optional(), + updatedAt: z.string().datetime().optional(), +}); + +export const WorkspaceListResponse = z.object({ + items: z.array(WorkspaceSchema), + total: z.number().int().nonnegative(), + page: z.number().int().positive(), + limit: z.number().int().positive(), +}); + +export const WorkspaceIdParamsSchema = z.object({ + id: z.string().uuid(), +}); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/workspaces-input.ts b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/workspaces-input.ts new file mode 100644 index 00000000..e6b80db9 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/schemas/generated/workspaces-input.ts @@ -0,0 +1,17 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +import { z } from "zod"; + +export const WorkspaceListQuerySchema = z.object({ + page: z.string().regex(/^\d+$/).optional(), + limit: z.string().regex(/^\d+$/).optional(), + search: z.string().max(120).optional(), + active: z.enum(["true", "false"]).optional(), +}); + +export const CreateWorkspaceSchema = z.object({ + name: z.string().min(1).max(120), + description: z.string().max(500).optional(), + active: z.boolean().optional(), +}); + +export const UpdateWorkspaceSchema = CreateWorkspaceSchema.partial(); diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..ea7456b8 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.0.json @@ -0,0 +1,18 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Pages Router Zod Flow At Scale", + "version": "1.0.0", + "description": "Large-scale pages router Zod fixture" + }, + "routerType": "pages", + "apiDir": "./pages/api", + "schemaDir": "./schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..21353d9c --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.1.json @@ -0,0 +1,18 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Pages Router Zod Flow At Scale", + "version": "1.0.0", + "description": "Large-scale pages router Zod fixture" + }, + "routerType": "pages", + "apiDir": "./pages/api", + "schemaDir": "./schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..586bf561 --- /dev/null +++ b/tests/fixtures/projects/next/pages-router/zod-flow-at-scale/templates/openapi-3.2.json @@ -0,0 +1,18 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "Pages Router Zod Flow At Scale", + "version": "1.0.0", + "description": "Large-scale pages router Zod fixture" + }, + "routerType": "pages", + "apiDir": "./pages/api", + "schemaDir": "./schemas", + "schemaType": "zod", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/GENERATED.scale.json b/tests/fixtures/projects/react-router/core-flow-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..0e3e70dd --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "react-router-core-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/api-keys.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/api-keys.$id.ts new file mode 100644 index 00000000..686caec6 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/api-keys.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId reactRouterScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function loader() {} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId reactRouterScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/api-keys.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/api-keys.ts new file mode 100644 index 00000000..50765d80 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/api-keys.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId reactRouterScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId reactRouterScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/attachments.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/attachments.$id.ts new file mode 100644 index 00000000..f1f5deea --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/attachments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId reactRouterScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId reactRouterScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/attachments.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/attachments.ts new file mode 100644 index 00000000..ec7834b3 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/attachments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId reactRouterScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId reactRouterScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/audit-logs.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/audit-logs.$id.ts new file mode 100644 index 00000000..46d21f38 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/audit-logs.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId reactRouterScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function loader() {} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId reactRouterScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/audit-logs.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/audit-logs.ts new file mode 100644 index 00000000..9aacf209 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/audit-logs.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId reactRouterScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId reactRouterScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/catalog-items.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/catalog-items.$id.ts new file mode 100644 index 00000000..eeaec462 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/catalog-items.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId reactRouterScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function loader() {} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId reactRouterScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/catalog-items.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/catalog-items.ts new file mode 100644 index 00000000..94d92c76 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/catalog-items.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId reactRouterScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId reactRouterScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/comments.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/comments.$id.ts new file mode 100644 index 00000000..a9b73513 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/comments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId reactRouterScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update comment + * @description Updates an existing comment + * @operationId reactRouterScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/comments.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/comments.ts new file mode 100644 index 00000000..66716963 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/comments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId reactRouterScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create comment + * @description Creates a new comment + * @operationId reactRouterScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/customers.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/customers.$id.ts new file mode 100644 index 00000000..e59d3f64 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/customers.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId reactRouterScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function loader() {} + +/** + * Update customer + * @description Updates an existing customer + * @operationId reactRouterScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/customers.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/customers.ts new file mode 100644 index 00000000..3068b747 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/customers.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId reactRouterScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create customer + * @description Creates a new customer + * @operationId reactRouterScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/departments.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/departments.$id.ts new file mode 100644 index 00000000..d59699f1 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/departments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId reactRouterScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update department + * @description Updates an existing department + * @operationId reactRouterScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/departments.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/departments.ts new file mode 100644 index 00000000..ad4427c2 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/departments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId reactRouterScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create department + * @description Creates a new department + * @operationId reactRouterScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/documents.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/documents.$id.ts new file mode 100644 index 00000000..eaeb0d0f --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/documents.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId reactRouterScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update document + * @description Updates an existing document + * @operationId reactRouterScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/documents.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/documents.ts new file mode 100644 index 00000000..cab953cc --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/documents.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId reactRouterScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create document + * @description Creates a new document + * @operationId reactRouterScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/exports.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/exports.$id.ts new file mode 100644 index 00000000..077921ec --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/exports.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId reactRouterScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function loader() {} + +/** + * Update export + * @description Updates an existing export + * @operationId reactRouterScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/exports.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/exports.ts new file mode 100644 index 00000000..d0955d45 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/exports.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId reactRouterScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create export + * @description Creates a new export + * @operationId reactRouterScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/invoices.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/invoices.$id.ts new file mode 100644 index 00000000..a5e3f1f0 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/invoices.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId reactRouterScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function loader() {} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId reactRouterScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/invoices.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/invoices.ts new file mode 100644 index 00000000..610ff8f8 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/invoices.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId reactRouterScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId reactRouterScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/members.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/members.$id.ts new file mode 100644 index 00000000..3b482ea7 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/members.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId reactRouterScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function loader() {} + +/** + * Update member + * @description Updates an existing member + * @operationId reactRouterScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/members.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/members.ts new file mode 100644 index 00000000..3bb9de5c --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/members.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId reactRouterScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create member + * @description Creates a new member + * @operationId reactRouterScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/notifications.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/notifications.$id.ts new file mode 100644 index 00000000..6301bff4 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/notifications.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId reactRouterScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function loader() {} + +/** + * Update notification + * @description Updates an existing notification + * @operationId reactRouterScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/notifications.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/notifications.ts new file mode 100644 index 00000000..78ed28ad --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/notifications.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId reactRouterScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create notification + * @description Creates a new notification + * @operationId reactRouterScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/orders.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/orders.$id.ts new file mode 100644 index 00000000..2a4ce4f8 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/orders.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId reactRouterScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function loader() {} + +/** + * Update order + * @description Updates an existing order + * @operationId reactRouterScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/orders.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/orders.ts new file mode 100644 index 00000000..25ca704d --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/orders.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId reactRouterScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create order + * @description Creates a new order + * @operationId reactRouterScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/organizations.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/organizations.$id.ts new file mode 100644 index 00000000..6d1590cb --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/organizations.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId reactRouterScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function loader() {} + +/** + * Update organization + * @description Updates an existing organization + * @operationId reactRouterScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/organizations.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/organizations.ts new file mode 100644 index 00000000..8517cd85 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/organizations.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId reactRouterScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create organization + * @description Creates a new organization + * @operationId reactRouterScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/payments.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/payments.$id.ts new file mode 100644 index 00000000..810d33b4 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/payments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId reactRouterScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update payment + * @description Updates an existing payment + * @operationId reactRouterScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/payments.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/payments.ts new file mode 100644 index 00000000..bb769716 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/payments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId reactRouterScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create payment + * @description Creates a new payment + * @operationId reactRouterScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/products.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/products.$id.ts new file mode 100644 index 00000000..f2e9fc6f --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/products.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId reactRouterScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function loader() {} + +/** + * Update product + * @description Updates an existing product + * @operationId reactRouterScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/products.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/products.ts new file mode 100644 index 00000000..c51b14a0 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/products.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId reactRouterScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create product + * @description Creates a new product + * @operationId reactRouterScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/projects.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/projects.$id.ts new file mode 100644 index 00000000..cbd53790 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/projects.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId reactRouterScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function loader() {} + +/** + * Update project + * @description Updates an existing project + * @operationId reactRouterScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/projects.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/projects.ts new file mode 100644 index 00000000..a1a0f121 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/projects.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId reactRouterScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create project + * @description Creates a new project + * @operationId reactRouterScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/refunds.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/refunds.$id.ts new file mode 100644 index 00000000..6a07cec1 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/refunds.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId reactRouterScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function loader() {} + +/** + * Update refund + * @description Updates an existing refund + * @operationId reactRouterScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/refunds.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/refunds.ts new file mode 100644 index 00000000..10a256e0 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/refunds.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId reactRouterScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create refund + * @description Creates a new refund + * @operationId reactRouterScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/reports.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/reports.$id.ts new file mode 100644 index 00000000..ae5843cf --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/reports.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId reactRouterScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function loader() {} + +/** + * Update report + * @description Updates an existing report + * @operationId reactRouterScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/reports.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/reports.ts new file mode 100644 index 00000000..13980f0d --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/reports.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId reactRouterScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create report + * @description Creates a new report + * @operationId reactRouterScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/sessions.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/sessions.$id.ts new file mode 100644 index 00000000..fccbe58a --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/sessions.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId reactRouterScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function loader() {} + +/** + * Update session + * @description Updates an existing session + * @operationId reactRouterScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/sessions.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/sessions.ts new file mode 100644 index 00000000..f0744900 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/sessions.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId reactRouterScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create session + * @description Creates a new session + * @operationId reactRouterScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/subscriptions.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/subscriptions.$id.ts new file mode 100644 index 00000000..cbed88a6 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/subscriptions.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId reactRouterScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function loader() {} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId reactRouterScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/subscriptions.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/subscriptions.ts new file mode 100644 index 00000000..82ebefd2 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/subscriptions.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId reactRouterScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId reactRouterScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/tasks.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/tasks.$id.ts new file mode 100644 index 00000000..18f39acf --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/tasks.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId reactRouterScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function loader() {} + +/** + * Update task + * @description Updates an existing task + * @operationId reactRouterScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/tasks.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/tasks.ts new file mode 100644 index 00000000..2781eac3 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/tasks.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId reactRouterScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create task + * @description Creates a new task + * @operationId reactRouterScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/teams.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/teams.$id.ts new file mode 100644 index 00000000..f61ecb2f --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/teams.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId reactRouterScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function loader() {} + +/** + * Update team + * @description Updates an existing team + * @operationId reactRouterScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/teams.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/teams.ts new file mode 100644 index 00000000..46af1eb7 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/teams.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId reactRouterScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create team + * @description Creates a new team + * @operationId reactRouterScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/webhooks.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/webhooks.$id.ts new file mode 100644 index 00000000..cccfc897 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/webhooks.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId reactRouterScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function loader() {} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId reactRouterScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/webhooks.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/webhooks.ts new file mode 100644 index 00000000..a96390db --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/webhooks.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId reactRouterScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId reactRouterScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/workspaces.$id.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/workspaces.$id.ts new file mode 100644 index 00000000..1556811f --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/workspaces.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId reactRouterScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function loader() {} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId reactRouterScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/workspaces.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/workspaces.ts new file mode 100644 index 00000000..f011b212 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/routes/api/generated/workspaces.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId reactRouterScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId reactRouterScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/api-keys-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/api-keys-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/attachments-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/attachments-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/audit-logs-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/audit-logs-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/catalog-items-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/catalog-items-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/comments-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/comments-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/customers-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/customers-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/departments-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/departments-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/documents-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/documents-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/exports-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/exports-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/invoices-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/invoices-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/members-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/members-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/notifications-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/notifications-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/orders-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/orders-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/organizations-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/organizations-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/payments-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/payments-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/products-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/products-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/projects-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/projects-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/refunds-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/refunds-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/reports-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/reports-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/sessions-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/sessions-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/subscriptions-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/subscriptions-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/tasks-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/tasks-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/teams-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/teams-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/webhooks-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/webhooks-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/workspaces-entity.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/workspaces-input.ts b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/src/types/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..a6686409 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.0.json @@ -0,0 +1,68 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "React Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale React Router fixture" + }, + "framework": { + "kind": "reactrouter" + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/routes/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..1f0a0380 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.1.json @@ -0,0 +1,68 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "React Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale React Router fixture" + }, + "framework": { + "kind": "reactrouter" + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/routes/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..77212947 --- /dev/null +++ b/tests/fixtures/projects/react-router/core-flow-at-scale/templates/openapi-3.2.json @@ -0,0 +1,68 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "React Router Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale React Router fixture" + }, + "framework": { + "kind": "reactrouter" + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/routes/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/GENERATED.scale.json b/tests/fixtures/projects/tanstack/core-flow-at-scale/GENERATED.scale.json new file mode 100644 index 00000000..3059d7e7 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/GENERATED.scale.json @@ -0,0 +1,6 @@ +{ + "generator": "scripts/generate-scale-fixtures.mts", + "target": "tanstack-core-at-scale", + "routeCount": 125, + "schemaModules": 50 +} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/api-keys.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/api-keys.$id.ts new file mode 100644 index 00000000..ff2eebee --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/api-keys.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get apikey by ID + * @description Returns a single apikey by identifier + * @operationId tanstackScaleGetApiKey + * @tag ApiKeys + * @responseSet common + * @auth bearer + * @pathParams ApiKeyIdParams + * @response ApiKeyEntity + * @openapi + */ +export async function loader() {} + +/** + * Update apikey + * @description Updates an existing apikey + * @operationId tanstackScaleUpdateApiKey + * @tag ApiKeys + * @responseSet auth + * @auth bearer + * @pathParams ApiKeyIdParams + * @body UpdateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/api-keys.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/api-keys.ts new file mode 100644 index 00000000..6ceb5767 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/api-keys.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List api-keys + * @description Returns a paginated list of api-keys + * @operationId tanstackScaleListApiKey + * @tag ApiKeys + * @responseSet public + * @params ApiKeyListQuery + * @response ApiKeyListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create apikey + * @description Creates a new apikey + * @operationId tanstackScaleCreateApiKey + * @tag ApiKeys + * @responseSet crud + * @auth bearer + * @body CreateApiKeyInput + * @response ApiKeyEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/attachments.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/attachments.$id.ts new file mode 100644 index 00000000..9ee52cc9 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/attachments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get attachment by ID + * @description Returns a single attachment by identifier + * @operationId tanstackScaleGetAttachment + * @tag Attachments + * @responseSet common + * @auth bearer + * @pathParams AttachmentIdParams + * @response AttachmentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update attachment + * @description Updates an existing attachment + * @operationId tanstackScaleUpdateAttachment + * @tag Attachments + * @responseSet auth + * @auth bearer + * @pathParams AttachmentIdParams + * @body UpdateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/attachments.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/attachments.ts new file mode 100644 index 00000000..17a3f4c2 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/attachments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List attachments + * @description Returns a paginated list of attachments + * @operationId tanstackScaleListAttachment + * @tag Attachments + * @responseSet public + * @params AttachmentListQuery + * @response AttachmentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create attachment + * @description Creates a new attachment + * @operationId tanstackScaleCreateAttachment + * @tag Attachments + * @responseSet crud + * @auth bearer + * @body CreateAttachmentInput + * @response AttachmentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/audit-logs.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/audit-logs.$id.ts new file mode 100644 index 00000000..bb1f4c9c --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/audit-logs.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get auditlog by ID + * @description Returns a single auditlog by identifier + * @operationId tanstackScaleGetAuditLog + * @tag AuditLogs + * @responseSet common + * @auth bearer + * @pathParams AuditLogIdParams + * @response AuditLogEntity + * @openapi + */ +export async function loader() {} + +/** + * Update auditlog + * @description Updates an existing auditlog + * @operationId tanstackScaleUpdateAuditLog + * @tag AuditLogs + * @responseSet auth + * @auth bearer + * @pathParams AuditLogIdParams + * @body UpdateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/audit-logs.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/audit-logs.ts new file mode 100644 index 00000000..61151e81 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/audit-logs.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List audit-logs + * @description Returns a paginated list of audit-logs + * @operationId tanstackScaleListAuditLog + * @tag AuditLogs + * @responseSet public + * @params AuditLogListQuery + * @response AuditLogListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create auditlog + * @description Creates a new auditlog + * @operationId tanstackScaleCreateAuditLog + * @tag AuditLogs + * @responseSet crud + * @auth bearer + * @body CreateAuditLogInput + * @response AuditLogEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/catalog-items.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/catalog-items.$id.ts new file mode 100644 index 00000000..532f0965 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/catalog-items.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get catalogitem by ID + * @description Returns a single catalogitem by identifier + * @operationId tanstackScaleGetCatalogItem + * @tag Catalog + * @responseSet common + * @auth bearer + * @pathParams CatalogItemIdParams + * @response CatalogItemEntity + * @openapi + */ +export async function loader() {} + +/** + * Update catalogitem + * @description Updates an existing catalogitem + * @operationId tanstackScaleUpdateCatalogItem + * @tag Catalog + * @responseSet auth + * @auth bearer + * @pathParams CatalogItemIdParams + * @body UpdateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/catalog-items.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/catalog-items.ts new file mode 100644 index 00000000..018e8bc3 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/catalog-items.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List catalog-items + * @description Returns a paginated list of catalog-items + * @operationId tanstackScaleListCatalogItem + * @tag Catalog + * @responseSet public + * @params CatalogItemListQuery + * @response CatalogItemListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create catalogitem + * @description Creates a new catalogitem + * @operationId tanstackScaleCreateCatalogItem + * @tag Catalog + * @responseSet crud + * @auth bearer + * @body CreateCatalogItemInput + * @response CatalogItemEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/comments.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/comments.$id.ts new file mode 100644 index 00000000..07b72177 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/comments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get comment by ID + * @description Returns a single comment by identifier + * @operationId tanstackScaleGetComment + * @tag Comments + * @responseSet common + * @auth bearer + * @pathParams CommentIdParams + * @response CommentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update comment + * @description Updates an existing comment + * @operationId tanstackScaleUpdateComment + * @tag Comments + * @responseSet auth + * @auth bearer + * @pathParams CommentIdParams + * @body UpdateCommentInput + * @response CommentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/comments.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/comments.ts new file mode 100644 index 00000000..00e8dfb1 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/comments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List comments + * @description Returns a paginated list of comments + * @operationId tanstackScaleListComment + * @tag Comments + * @responseSet public + * @params CommentListQuery + * @response CommentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create comment + * @description Creates a new comment + * @operationId tanstackScaleCreateComment + * @tag Comments + * @responseSet crud + * @auth bearer + * @body CreateCommentInput + * @response CommentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/customers.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/customers.$id.ts new file mode 100644 index 00000000..283a433e --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/customers.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get customer by ID + * @description Returns a single customer by identifier + * @operationId tanstackScaleGetCustomer + * @tag Customers + * @responseSet common + * @auth bearer + * @pathParams CustomerIdParams + * @response CustomerEntity + * @openapi + */ +export async function loader() {} + +/** + * Update customer + * @description Updates an existing customer + * @operationId tanstackScaleUpdateCustomer + * @tag Customers + * @responseSet auth + * @auth bearer + * @pathParams CustomerIdParams + * @body UpdateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/customers.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/customers.ts new file mode 100644 index 00000000..eed85653 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/customers.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List customers + * @description Returns a paginated list of customers + * @operationId tanstackScaleListCustomer + * @tag Customers + * @responseSet public + * @params CustomerListQuery + * @response CustomerListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create customer + * @description Creates a new customer + * @operationId tanstackScaleCreateCustomer + * @tag Customers + * @responseSet crud + * @auth bearer + * @body CreateCustomerInput + * @response CustomerEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/departments.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/departments.$id.ts new file mode 100644 index 00000000..589e21cd --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/departments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get department by ID + * @description Returns a single department by identifier + * @operationId tanstackScaleGetDepartment + * @tag Departments + * @responseSet common + * @auth bearer + * @pathParams DepartmentIdParams + * @response DepartmentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update department + * @description Updates an existing department + * @operationId tanstackScaleUpdateDepartment + * @tag Departments + * @responseSet auth + * @auth bearer + * @pathParams DepartmentIdParams + * @body UpdateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/departments.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/departments.ts new file mode 100644 index 00000000..15fd79cc --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/departments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List departments + * @description Returns a paginated list of departments + * @operationId tanstackScaleListDepartment + * @tag Departments + * @responseSet public + * @params DepartmentListQuery + * @response DepartmentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create department + * @description Creates a new department + * @operationId tanstackScaleCreateDepartment + * @tag Departments + * @responseSet crud + * @auth bearer + * @body CreateDepartmentInput + * @response DepartmentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/documents.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/documents.$id.ts new file mode 100644 index 00000000..d350df9c --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/documents.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get document by ID + * @description Returns a single document by identifier + * @operationId tanstackScaleGetDocument + * @tag Documents + * @responseSet common + * @auth bearer + * @pathParams DocumentIdParams + * @response DocumentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update document + * @description Updates an existing document + * @operationId tanstackScaleUpdateDocument + * @tag Documents + * @responseSet auth + * @auth bearer + * @pathParams DocumentIdParams + * @body UpdateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/documents.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/documents.ts new file mode 100644 index 00000000..1a51a5e7 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/documents.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List documents + * @description Returns a paginated list of documents + * @operationId tanstackScaleListDocument + * @tag Documents + * @responseSet public + * @params DocumentListQuery + * @response DocumentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create document + * @description Creates a new document + * @operationId tanstackScaleCreateDocument + * @tag Documents + * @responseSet crud + * @auth bearer + * @body CreateDocumentInput + * @response DocumentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/exports.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/exports.$id.ts new file mode 100644 index 00000000..c0b71ef7 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/exports.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get export by ID + * @description Returns a single export by identifier + * @operationId tanstackScaleGetExport + * @tag Exports + * @responseSet common + * @auth bearer + * @pathParams ExportIdParams + * @response ExportEntity + * @openapi + */ +export async function loader() {} + +/** + * Update export + * @description Updates an existing export + * @operationId tanstackScaleUpdateExport + * @tag Exports + * @responseSet auth + * @auth bearer + * @pathParams ExportIdParams + * @body UpdateExportInput + * @response ExportEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/exports.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/exports.ts new file mode 100644 index 00000000..364dc078 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/exports.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List exports + * @description Returns a paginated list of exports + * @operationId tanstackScaleListExport + * @tag Exports + * @responseSet public + * @params ExportListQuery + * @response ExportListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create export + * @description Creates a new export + * @operationId tanstackScaleCreateExport + * @tag Exports + * @responseSet crud + * @auth bearer + * @body CreateExportInput + * @response ExportEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/invoices.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/invoices.$id.ts new file mode 100644 index 00000000..84f46258 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/invoices.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get invoice by ID + * @description Returns a single invoice by identifier + * @operationId tanstackScaleGetInvoice + * @tag Invoices + * @responseSet common + * @auth bearer + * @pathParams InvoiceIdParams + * @response InvoiceEntity + * @openapi + */ +export async function loader() {} + +/** + * Update invoice + * @description Updates an existing invoice + * @operationId tanstackScaleUpdateInvoice + * @tag Invoices + * @responseSet auth + * @auth bearer + * @pathParams InvoiceIdParams + * @body UpdateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/invoices.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/invoices.ts new file mode 100644 index 00000000..447231e5 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/invoices.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List invoices + * @description Returns a paginated list of invoices + * @operationId tanstackScaleListInvoice + * @tag Invoices + * @responseSet public + * @params InvoiceListQuery + * @response InvoiceListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create invoice + * @description Creates a new invoice + * @operationId tanstackScaleCreateInvoice + * @tag Invoices + * @responseSet crud + * @auth bearer + * @body CreateInvoiceInput + * @response InvoiceEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/members.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/members.$id.ts new file mode 100644 index 00000000..04ea617f --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/members.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get member by ID + * @description Returns a single member by identifier + * @operationId tanstackScaleGetMember + * @tag Members + * @responseSet common + * @auth bearer + * @pathParams MemberIdParams + * @response MemberEntity + * @openapi + */ +export async function loader() {} + +/** + * Update member + * @description Updates an existing member + * @operationId tanstackScaleUpdateMember + * @tag Members + * @responseSet auth + * @auth bearer + * @pathParams MemberIdParams + * @body UpdateMemberInput + * @response MemberEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/members.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/members.ts new file mode 100644 index 00000000..4a0107c1 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/members.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List members + * @description Returns a paginated list of members + * @operationId tanstackScaleListMember + * @tag Members + * @responseSet public + * @params MemberListQuery + * @response MemberListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create member + * @description Creates a new member + * @operationId tanstackScaleCreateMember + * @tag Members + * @responseSet crud + * @auth bearer + * @body CreateMemberInput + * @response MemberEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/notifications.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/notifications.$id.ts new file mode 100644 index 00000000..2eb8067d --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/notifications.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get notification by ID + * @description Returns a single notification by identifier + * @operationId tanstackScaleGetNotification + * @tag Notifications + * @responseSet common + * @auth bearer + * @pathParams NotificationIdParams + * @response NotificationEntity + * @openapi + */ +export async function loader() {} + +/** + * Update notification + * @description Updates an existing notification + * @operationId tanstackScaleUpdateNotification + * @tag Notifications + * @responseSet auth + * @auth bearer + * @pathParams NotificationIdParams + * @body UpdateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/notifications.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/notifications.ts new file mode 100644 index 00000000..4bcfc828 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/notifications.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List notifications + * @description Returns a paginated list of notifications + * @operationId tanstackScaleListNotification + * @tag Notifications + * @responseSet public + * @params NotificationListQuery + * @response NotificationListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create notification + * @description Creates a new notification + * @operationId tanstackScaleCreateNotification + * @tag Notifications + * @responseSet crud + * @auth bearer + * @body CreateNotificationInput + * @response NotificationEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/orders.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/orders.$id.ts new file mode 100644 index 00000000..51b66c65 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/orders.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get order by ID + * @description Returns a single order by identifier + * @operationId tanstackScaleGetOrder + * @tag Orders + * @responseSet common + * @auth bearer + * @pathParams OrderIdParams + * @response OrderEntity + * @openapi + */ +export async function loader() {} + +/** + * Update order + * @description Updates an existing order + * @operationId tanstackScaleUpdateOrder + * @tag Orders + * @responseSet auth + * @auth bearer + * @pathParams OrderIdParams + * @body UpdateOrderInput + * @response OrderEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/orders.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/orders.ts new file mode 100644 index 00000000..d4bb7ebe --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/orders.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List orders + * @description Returns a paginated list of orders + * @operationId tanstackScaleListOrder + * @tag Orders + * @responseSet public + * @params OrderListQuery + * @response OrderListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create order + * @description Creates a new order + * @operationId tanstackScaleCreateOrder + * @tag Orders + * @responseSet crud + * @auth bearer + * @body CreateOrderInput + * @response OrderEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/organizations.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/organizations.$id.ts new file mode 100644 index 00000000..df54695a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/organizations.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get organization by ID + * @description Returns a single organization by identifier + * @operationId tanstackScaleGetOrganization + * @tag Organizations + * @responseSet common + * @auth bearer + * @pathParams OrganizationIdParams + * @response OrganizationEntity + * @openapi + */ +export async function loader() {} + +/** + * Update organization + * @description Updates an existing organization + * @operationId tanstackScaleUpdateOrganization + * @tag Organizations + * @responseSet auth + * @auth bearer + * @pathParams OrganizationIdParams + * @body UpdateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/organizations.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/organizations.ts new file mode 100644 index 00000000..e0ba1f99 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/organizations.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List organizations + * @description Returns a paginated list of organizations + * @operationId tanstackScaleListOrganization + * @tag Organizations + * @responseSet public + * @params OrganizationListQuery + * @response OrganizationListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create organization + * @description Creates a new organization + * @operationId tanstackScaleCreateOrganization + * @tag Organizations + * @responseSet crud + * @auth bearer + * @body CreateOrganizationInput + * @response OrganizationEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/payments.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/payments.$id.ts new file mode 100644 index 00000000..039c00d5 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/payments.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get payment by ID + * @description Returns a single payment by identifier + * @operationId tanstackScaleGetPayment + * @tag Payments + * @responseSet common + * @auth bearer + * @pathParams PaymentIdParams + * @response PaymentEntity + * @openapi + */ +export async function loader() {} + +/** + * Update payment + * @description Updates an existing payment + * @operationId tanstackScaleUpdatePayment + * @tag Payments + * @responseSet auth + * @auth bearer + * @pathParams PaymentIdParams + * @body UpdatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/payments.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/payments.ts new file mode 100644 index 00000000..0782668a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/payments.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List payments + * @description Returns a paginated list of payments + * @operationId tanstackScaleListPayment + * @tag Payments + * @responseSet public + * @params PaymentListQuery + * @response PaymentListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create payment + * @description Creates a new payment + * @operationId tanstackScaleCreatePayment + * @tag Payments + * @responseSet crud + * @auth bearer + * @body CreatePaymentInput + * @response PaymentEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/products.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/products.$id.ts new file mode 100644 index 00000000..010aa1fc --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/products.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get product by ID + * @description Returns a single product by identifier + * @operationId tanstackScaleGetProduct + * @tag Products + * @responseSet common + * @auth bearer + * @pathParams ProductIdParams + * @response ProductEntity + * @openapi + */ +export async function loader() {} + +/** + * Update product + * @description Updates an existing product + * @operationId tanstackScaleUpdateProduct + * @tag Products + * @responseSet auth + * @auth bearer + * @pathParams ProductIdParams + * @body UpdateProductInput + * @response ProductEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/products.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/products.ts new file mode 100644 index 00000000..d862df2e --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/products.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List products + * @description Returns a paginated list of products + * @operationId tanstackScaleListProduct + * @tag Products + * @responseSet public + * @params ProductListQuery + * @response ProductListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create product + * @description Creates a new product + * @operationId tanstackScaleCreateProduct + * @tag Products + * @responseSet crud + * @auth bearer + * @body CreateProductInput + * @response ProductEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/projects.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/projects.$id.ts new file mode 100644 index 00000000..b53a6482 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/projects.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get project by ID + * @description Returns a single project by identifier + * @operationId tanstackScaleGetProject + * @tag Projects + * @responseSet common + * @auth bearer + * @pathParams ProjectIdParams + * @response ProjectEntity + * @openapi + */ +export async function loader() {} + +/** + * Update project + * @description Updates an existing project + * @operationId tanstackScaleUpdateProject + * @tag Projects + * @responseSet auth + * @auth bearer + * @pathParams ProjectIdParams + * @body UpdateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/projects.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/projects.ts new file mode 100644 index 00000000..aef73a8f --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/projects.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List projects + * @description Returns a paginated list of projects + * @operationId tanstackScaleListProject + * @tag Projects + * @responseSet public + * @pathParams ProjectCollectionPathParams + * @params ProjectListQuery + * @response ProjectListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create project + * @description Creates a new project + * @operationId tanstackScaleCreateProject + * @tag Projects + * @responseSet crud + * @auth bearer + * @pathParams ProjectCollectionPathParams + * @body CreateProjectInput + * @response ProjectEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/refunds.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/refunds.$id.ts new file mode 100644 index 00000000..9d9ffcb1 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/refunds.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get refund by ID + * @description Returns a single refund by identifier + * @operationId tanstackScaleGetRefund + * @tag Refunds + * @responseSet common + * @auth bearer + * @pathParams RefundIdParams + * @response RefundEntity + * @openapi + */ +export async function loader() {} + +/** + * Update refund + * @description Updates an existing refund + * @operationId tanstackScaleUpdateRefund + * @tag Refunds + * @responseSet auth + * @auth bearer + * @pathParams RefundIdParams + * @body UpdateRefundInput + * @response RefundEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/refunds.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/refunds.ts new file mode 100644 index 00000000..fdcf092f --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/refunds.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List refunds + * @description Returns a paginated list of refunds + * @operationId tanstackScaleListRefund + * @tag Refunds + * @responseSet public + * @params RefundListQuery + * @response RefundListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create refund + * @description Creates a new refund + * @operationId tanstackScaleCreateRefund + * @tag Refunds + * @responseSet crud + * @auth bearer + * @body CreateRefundInput + * @response RefundEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/reports.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/reports.$id.ts new file mode 100644 index 00000000..9cf9f50f --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/reports.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get report by ID + * @description Returns a single report by identifier + * @operationId tanstackScaleGetReport + * @tag Reports + * @responseSet common + * @auth bearer + * @pathParams ReportIdParams + * @response ReportEntity + * @openapi + */ +export async function loader() {} + +/** + * Update report + * @description Updates an existing report + * @operationId tanstackScaleUpdateReport + * @tag Reports + * @responseSet auth + * @auth bearer + * @pathParams ReportIdParams + * @body UpdateReportInput + * @response ReportEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/reports.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/reports.ts new file mode 100644 index 00000000..48535991 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/reports.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List reports + * @description Returns a paginated list of reports + * @operationId tanstackScaleListReport + * @tag Reports + * @responseSet public + * @params ReportListQuery + * @response ReportListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create report + * @description Creates a new report + * @operationId tanstackScaleCreateReport + * @tag Reports + * @responseSet crud + * @auth bearer + * @body CreateReportInput + * @response ReportEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/sessions.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/sessions.$id.ts new file mode 100644 index 00000000..c9f98d1a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/sessions.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get session by ID + * @description Returns a single session by identifier + * @operationId tanstackScaleGetSession + * @tag Sessions + * @responseSet common + * @auth bearer + * @pathParams SessionIdParams + * @response SessionEntity + * @openapi + */ +export async function loader() {} + +/** + * Update session + * @description Updates an existing session + * @operationId tanstackScaleUpdateSession + * @tag Sessions + * @responseSet auth + * @auth bearer + * @pathParams SessionIdParams + * @body UpdateSessionInput + * @response SessionEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/sessions.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/sessions.ts new file mode 100644 index 00000000..cac37e6a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/sessions.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List sessions + * @description Returns a paginated list of sessions + * @operationId tanstackScaleListSession + * @tag Sessions + * @responseSet public + * @params SessionListQuery + * @response SessionListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create session + * @description Creates a new session + * @operationId tanstackScaleCreateSession + * @tag Sessions + * @responseSet crud + * @auth bearer + * @body CreateSessionInput + * @response SessionEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/subscriptions.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/subscriptions.$id.ts new file mode 100644 index 00000000..8f13e35e --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/subscriptions.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get subscription by ID + * @description Returns a single subscription by identifier + * @operationId tanstackScaleGetSubscription + * @tag Subscriptions + * @responseSet common + * @auth bearer + * @pathParams SubscriptionIdParams + * @response SubscriptionEntity + * @openapi + */ +export async function loader() {} + +/** + * Update subscription + * @description Updates an existing subscription + * @operationId tanstackScaleUpdateSubscription + * @tag Subscriptions + * @responseSet auth + * @auth bearer + * @pathParams SubscriptionIdParams + * @body UpdateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/subscriptions.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/subscriptions.ts new file mode 100644 index 00000000..931ab633 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/subscriptions.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List subscriptions + * @description Returns a paginated list of subscriptions + * @operationId tanstackScaleListSubscription + * @tag Subscriptions + * @responseSet public + * @params SubscriptionListQuery + * @response SubscriptionListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create subscription + * @description Creates a new subscription + * @operationId tanstackScaleCreateSubscription + * @tag Subscriptions + * @responseSet crud + * @auth bearer + * @body CreateSubscriptionInput + * @response SubscriptionEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/tasks.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/tasks.$id.ts new file mode 100644 index 00000000..a4a9adcd --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/tasks.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get task by ID + * @description Returns a single task by identifier + * @operationId tanstackScaleGetTask + * @tag Tasks + * @responseSet common + * @auth bearer + * @pathParams TaskIdParams + * @response TaskEntity + * @openapi + */ +export async function loader() {} + +/** + * Update task + * @description Updates an existing task + * @operationId tanstackScaleUpdateTask + * @tag Tasks + * @responseSet auth + * @auth bearer + * @pathParams TaskIdParams + * @body UpdateTaskInput + * @response TaskEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/tasks.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/tasks.ts new file mode 100644 index 00000000..336ad6f4 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/tasks.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List tasks + * @description Returns a paginated list of tasks + * @operationId tanstackScaleListTask + * @tag Tasks + * @responseSet public + * @pathParams TaskCollectionPathParams + * @params TaskListQuery + * @response TaskListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create task + * @description Creates a new task + * @operationId tanstackScaleCreateTask + * @tag Tasks + * @responseSet crud + * @auth bearer + * @pathParams TaskCollectionPathParams + * @body CreateTaskInput + * @response TaskEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/teams.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/teams.$id.ts new file mode 100644 index 00000000..47229d39 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/teams.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get team by ID + * @description Returns a single team by identifier + * @operationId tanstackScaleGetTeam + * @tag Teams + * @responseSet common + * @auth bearer + * @pathParams TeamIdParams + * @response TeamEntity + * @openapi + */ +export async function loader() {} + +/** + * Update team + * @description Updates an existing team + * @operationId tanstackScaleUpdateTeam + * @tag Teams + * @responseSet auth + * @auth bearer + * @pathParams TeamIdParams + * @body UpdateTeamInput + * @response TeamEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/teams.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/teams.ts new file mode 100644 index 00000000..ac342fc3 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/teams.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List teams + * @description Returns a paginated list of teams + * @operationId tanstackScaleListTeam + * @tag Teams + * @responseSet public + * @params TeamListQuery + * @response TeamListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create team + * @description Creates a new team + * @operationId tanstackScaleCreateTeam + * @tag Teams + * @responseSet crud + * @auth bearer + * @body CreateTeamInput + * @response TeamEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/webhooks.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/webhooks.$id.ts new file mode 100644 index 00000000..03b4fa88 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/webhooks.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get webhook by ID + * @description Returns a single webhook by identifier + * @operationId tanstackScaleGetWebhook + * @tag Webhooks + * @responseSet common + * @auth bearer + * @pathParams WebhookIdParams + * @response WebhookEntity + * @openapi + */ +export async function loader() {} + +/** + * Update webhook + * @description Updates an existing webhook + * @operationId tanstackScaleUpdateWebhook + * @tag Webhooks + * @responseSet auth + * @auth bearer + * @pathParams WebhookIdParams + * @body UpdateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/webhooks.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/webhooks.ts new file mode 100644 index 00000000..72c9bb7a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/webhooks.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List webhooks + * @description Returns a paginated list of webhooks + * @operationId tanstackScaleListWebhook + * @tag Webhooks + * @responseSet public + * @params WebhookListQuery + * @response WebhookListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create webhook + * @description Creates a new webhook + * @operationId tanstackScaleCreateWebhook + * @tag Webhooks + * @responseSet crud + * @auth bearer + * @body CreateWebhookInput + * @response WebhookEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/workspaces.$id.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/workspaces.$id.ts new file mode 100644 index 00000000..e377ab4a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/workspaces.$id.ts @@ -0,0 +1,27 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * Get workspace by ID + * @description Returns a single workspace by identifier + * @operationId tanstackScaleGetWorkspace + * @tag Workspaces + * @responseSet common + * @auth bearer + * @pathParams WorkspaceIdParams + * @response WorkspaceEntity + * @openapi + */ +export async function loader() {} + +/** + * Update workspace + * @description Updates an existing workspace + * @operationId tanstackScaleUpdateWorkspace + * @tag Workspaces + * @responseSet auth + * @auth bearer + * @pathParams WorkspaceIdParams + * @body UpdateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/workspaces.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/workspaces.ts new file mode 100644 index 00000000..831b2f08 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/routes/api/generated/workspaces.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +/** + * List workspaces + * @description Returns a paginated list of workspaces + * @operationId tanstackScaleListWorkspace + * @tag Workspaces + * @responseSet public + * @params WorkspaceListQuery + * @response WorkspaceListResponse + * @openapi + */ +export async function loader() {} + +/** + * Create workspace + * @description Creates a new workspace + * @operationId tanstackScaleCreateWorkspace + * @tag Workspaces + * @responseSet crud + * @auth bearer + * @body CreateWorkspaceInput + * @response WorkspaceEntity + * @openapi + */ +export async function action() {} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/api-keys-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/api-keys-entity.ts new file mode 100644 index 00000000..bc2165bc --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/api-keys-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ApiKeyListResponse = { + items: ApiKeyEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ApiKeyIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/api-keys-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/api-keys-input.ts new file mode 100644 index 00000000..dd074e66 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/api-keys-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ApiKeyListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateApiKeyInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateApiKeyInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/attachments-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/attachments-entity.ts new file mode 100644 index 00000000..ce6b059f --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/attachments-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type AttachmentListResponse = { + items: AttachmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AttachmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/attachments-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/attachments-input.ts new file mode 100644 index 00000000..071bdef7 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/attachments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AttachmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAttachmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAttachmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/audit-logs-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/audit-logs-entity.ts new file mode 100644 index 00000000..6051cbe1 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/audit-logs-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type AuditLogListResponse = { + items: AuditLogEntity[]; + total: number; + page: number; + limit: number; +}; + +export type AuditLogIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/audit-logs-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/audit-logs-input.ts new file mode 100644 index 00000000..1992a93e --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/audit-logs-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type AuditLogListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateAuditLogInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateAuditLogInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/catalog-items-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/catalog-items-entity.ts new file mode 100644 index 00000000..e62b6139 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/catalog-items-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CatalogItemListResponse = { + items: CatalogItemEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CatalogItemIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/catalog-items-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/catalog-items-input.ts new file mode 100644 index 00000000..1087dbe5 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/catalog-items-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CatalogItemListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCatalogItemInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCatalogItemInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/comments-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/comments-entity.ts new file mode 100644 index 00000000..ebcbac23 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/comments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type CommentListResponse = { + items: CommentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CommentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/comments-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/comments-input.ts new file mode 100644 index 00000000..0549bc59 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/comments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CommentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCommentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCommentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/customers-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/customers-entity.ts new file mode 100644 index 00000000..e5837451 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/customers-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type CustomerListResponse = { + items: CustomerEntity[]; + total: number; + page: number; + limit: number; +}; + +export type CustomerIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/customers-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/customers-input.ts new file mode 100644 index 00000000..cfab0d42 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/customers-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type CustomerListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateCustomerInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateCustomerInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/departments-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/departments-entity.ts new file mode 100644 index 00000000..535c703a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/departments-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type DepartmentListResponse = { + items: DepartmentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DepartmentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/departments-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/departments-input.ts new file mode 100644 index 00000000..39aea84d --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/departments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DepartmentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDepartmentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDepartmentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/documents-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/documents-entity.ts new file mode 100644 index 00000000..4473a70d --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/documents-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type DocumentListResponse = { + items: DocumentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type DocumentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/documents-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/documents-input.ts new file mode 100644 index 00000000..1f93a19c --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/documents-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type DocumentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateDocumentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateDocumentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/exports-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/exports-entity.ts new file mode 100644 index 00000000..512859c8 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/exports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ExportListResponse = { + items: ExportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ExportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/exports-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/exports-input.ts new file mode 100644 index 00000000..b6d7fd4a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/exports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ExportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateExportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateExportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/invoices-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/invoices-entity.ts new file mode 100644 index 00000000..6b58c510 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/invoices-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type InvoiceListResponse = { + items: InvoiceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type InvoiceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/invoices-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/invoices-input.ts new file mode 100644 index 00000000..9bcd954e --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/invoices-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type InvoiceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateInvoiceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateInvoiceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/members-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/members-entity.ts new file mode 100644 index 00000000..079bb38a --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/members-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type MemberListResponse = { + items: MemberEntity[]; + total: number; + page: number; + limit: number; +}; + +export type MemberIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/members-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/members-input.ts new file mode 100644 index 00000000..2155f5a7 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/members-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type MemberListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateMemberInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateMemberInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/notifications-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/notifications-entity.ts new file mode 100644 index 00000000..22990b98 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/notifications-entity.ts @@ -0,0 +1,21 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type NotificationListResponse = { + items: NotificationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type NotificationIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/notifications-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/notifications-input.ts new file mode 100644 index 00000000..fffca1a8 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/notifications-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type NotificationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateNotificationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateNotificationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/orders-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/orders-entity.ts new file mode 100644 index 00000000..81ab04aa --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/orders-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type OrderListResponse = { + items: OrderEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrderIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/orders-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/orders-input.ts new file mode 100644 index 00000000..fb142f19 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/orders-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrderListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrderInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrderInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/organizations-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/organizations-entity.ts new file mode 100644 index 00000000..de6e72c8 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/organizations-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type OrganizationListResponse = { + items: OrganizationEntity[]; + total: number; + page: number; + limit: number; +}; + +export type OrganizationIdParams = { + organizationId: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/organizations-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/organizations-input.ts new file mode 100644 index 00000000..47844a7f --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/organizations-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type OrganizationListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateOrganizationInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateOrganizationInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/payments-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/payments-entity.ts new file mode 100644 index 00000000..d9af86c2 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/payments-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type PaymentListResponse = { + items: PaymentEntity[]; + total: number; + page: number; + limit: number; +}; + +export type PaymentIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/payments-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/payments-input.ts new file mode 100644 index 00000000..c1edb2e4 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/payments-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type PaymentListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreatePaymentInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdatePaymentInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/products-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/products-entity.ts new file mode 100644 index 00000000..1d599a1c --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/products-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type ProductListResponse = { + items: ProductEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProductIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/products-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/products-input.ts new file mode 100644 index 00000000..0d2b51d9 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/products-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProductListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProductInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProductInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/projects-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/projects-entity.ts new file mode 100644 index 00000000..c5db14cb --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/projects-entity.ts @@ -0,0 +1,23 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ProjectListResponse = { + items: ProjectEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ProjectCollectionPathParams = { + organizationId: string; +}; + +export type ProjectIdParams = { + organizationId: string; + projectId: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/projects-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/projects-input.ts new file mode 100644 index 00000000..f06146e0 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/projects-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ProjectListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateProjectInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateProjectInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/refunds-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/refunds-entity.ts new file mode 100644 index 00000000..a097af6f --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/refunds-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type RefundListResponse = { + items: RefundEntity[]; + total: number; + page: number; + limit: number; +}; + +export type RefundIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/refunds-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/refunds-input.ts new file mode 100644 index 00000000..b11559f9 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/refunds-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type RefundListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateRefundInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateRefundInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/reports-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/reports-entity.ts new file mode 100644 index 00000000..c11ec8dc --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/reports-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type ReportListResponse = { + items: ReportEntity[]; + total: number; + page: number; + limit: number; +}; + +export type ReportIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/reports-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/reports-input.ts new file mode 100644 index 00000000..f7439a0b --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/reports-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type ReportListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateReportInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateReportInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/sessions-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/sessions-entity.ts new file mode 100644 index 00000000..215fd703 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/sessions-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type SessionListResponse = { + items: SessionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SessionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/sessions-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/sessions-input.ts new file mode 100644 index 00000000..a793c370 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/sessions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SessionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSessionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSessionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/subscriptions-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/subscriptions-entity.ts new file mode 100644 index 00000000..281f074e --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/subscriptions-entity.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionEntity = { + id: string; + name: string; + description?: string; + active: boolean; + status: "draft" | "active" | "archived"; +}; + +export type SubscriptionListResponse = { + items: SubscriptionEntity[]; + total: number; + page: number; + limit: number; +}; + +export type SubscriptionIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/subscriptions-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/subscriptions-input.ts new file mode 100644 index 00000000..df8ddb66 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/subscriptions-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type SubscriptionListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateSubscriptionInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateSubscriptionInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/tasks-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/tasks-entity.ts new file mode 100644 index 00000000..d55a35f7 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/tasks-entity.ts @@ -0,0 +1,25 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TaskListResponse = { + items: TaskEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TaskCollectionPathParams = { + projectId: string; +}; + +export type TaskIdParams = { + projectId: string; + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/tasks-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/tasks-input.ts new file mode 100644 index 00000000..f15e4b49 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/tasks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TaskListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTaskInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTaskInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/teams-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/teams-entity.ts new file mode 100644 index 00000000..913a341c --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/teams-entity.ts @@ -0,0 +1,20 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamEntity = { + id: string; + name: string; + description?: string; + active: boolean; + readonly createdAt: string; + readonly updatedAt: string; +}; + +export type TeamListResponse = { + items: TeamEntity[]; + total: number; + page: number; + limit: number; +}; + +export type TeamIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/teams-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/teams-input.ts new file mode 100644 index 00000000..ac1b02f3 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/teams-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type TeamListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateTeamInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateTeamInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/webhooks-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/webhooks-entity.ts new file mode 100644 index 00000000..b286d401 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/webhooks-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WebhookListResponse = { + items: WebhookEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WebhookIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/webhooks-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/webhooks-input.ts new file mode 100644 index 00000000..2572fddb --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/webhooks-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WebhookListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWebhookInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWebhookInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/workspaces-entity.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/workspaces-entity.ts new file mode 100644 index 00000000..0e96d77e --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/workspaces-entity.ts @@ -0,0 +1,18 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceEntity = { + id: string; + name: string; + description?: string; + active: boolean; +}; + +export type WorkspaceListResponse = { + items: WorkspaceEntity[]; + total: number; + page: number; + limit: number; +}; + +export type WorkspaceIdParams = { + id: string; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/workspaces-input.ts b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/workspaces-input.ts new file mode 100644 index 00000000..18e01e3b --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/src/types/generated/workspaces-input.ts @@ -0,0 +1,19 @@ +// @generated by scripts/generate-scale-fixtures.mts — do not edit +export type WorkspaceListQuery = { + page?: string; + limit?: string; + search?: string; + active?: "true" | "false"; +}; + +export type CreateWorkspaceInput = { + name: string; + description?: string; + active?: boolean; +}; + +export type UpdateWorkspaceInput = { + name?: string; + description?: string; + active?: boolean; +}; diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.0.json b/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.0.json new file mode 100644 index 00000000..be78d233 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.0.json @@ -0,0 +1,68 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "TanStack Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale TanStack fixture" + }, + "framework": { + "kind": "tanstack" + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/routes/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.1.json b/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.1.json new file mode 100644 index 00000000..7c6105e2 --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.1.json @@ -0,0 +1,68 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "TanStack Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale TanStack fixture" + }, + "framework": { + "kind": "tanstack" + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/routes/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.2.json b/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.2.json new file mode 100644 index 00000000..d1a1ed0c --- /dev/null +++ b/tests/fixtures/projects/tanstack/core-flow-at-scale/templates/openapi-3.2.json @@ -0,0 +1,68 @@ +{ + "openapi": "3.2.0", + "info": { + "title": "TanStack Core Flow At Scale", + "version": "1.0.0", + "description": "Large-scale TanStack fixture" + }, + "framework": { + "kind": "tanstack" + }, + "defaultResponseSet": "common", + "responseSets": { + "common": [ + "400", + "500" + ], + "auth": [ + "401", + "403" + ] + }, + "errorConfig": { + "template": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "{{ERROR_MESSAGE}}" + } + } + }, + "codes": { + "400": { + "description": "Bad Request", + "variables": { + "ERROR_MESSAGE": "Invalid request" + } + }, + "401": { + "description": "Unauthorized", + "variables": { + "ERROR_MESSAGE": "Authentication required" + } + }, + "403": { + "description": "Forbidden", + "variables": { + "ERROR_MESSAGE": "Access denied" + } + }, + "500": { + "description": "Internal Server Error", + "variables": { + "ERROR_MESSAGE": "Unexpected error" + } + } + } + }, + "apiDir": "./src/routes/api", + "schemaDir": "./src", + "schemaType": "typescript", + "docsUrl": "api-docs", + "ui": "scalar", + "outputDir": "./public", + "outputFile": "openapi.json", + "includeOpenApiRoutes": true, + "debug": false +} diff --git a/tests/fixtures/unions/zod-schemas.ts b/tests/fixtures/unions/zod-schemas.ts index c994fc99..72ed8882 100644 --- a/tests/fixtures/unions/zod-schemas.ts +++ b/tests/fixtures/unions/zod-schemas.ts @@ -4,7 +4,7 @@ import { z } from "zod"; // ======================================== -// 1. Simple Unions (should use oneOf) +// 1. Simple Unions (should use anyOf) // ======================================== export const StringOrNumberSchema = z.union([z.string(), z.number()]); @@ -63,7 +63,7 @@ export const NullableObjectSchema = z.union([ ]); // ======================================== -// 4. Schema Reference Unions (should use oneOf with $ref) +// 4. Schema Reference Unions (should use anyOf with $ref) // ======================================== const SuccessResponseSchema = z.object({ diff --git a/tests/integration/generator/at-scale-fixtures.test.ts b/tests/integration/generator/at-scale-fixtures.test.ts new file mode 100644 index 00000000..eac655bd --- /dev/null +++ b/tests/integration/generator/at-scale-fixtures.test.ts @@ -0,0 +1,145 @@ +import path from "node:path"; + +import type { OpenApiDocument } from "next-openapi-gen"; +import { describe, expect, it } from "vitest"; + +import { generateFixtureSpec, getProjectFixturePath } from "../../helpers/test-project.js"; + +const AT_SCALE_FIXTURES: Array<{ label: string; fixturePath: string }> = [ + { + label: "next/app-router/core-flow-at-scale", + fixturePath: getProjectFixturePath("next", "app-router", "core-flow-at-scale"), + }, + { + label: "next/app-router/ts-full-coverage-at-scale", + fixturePath: getProjectFixturePath("next", "app-router", "ts-full-coverage-at-scale"), + }, + { + label: "next/app-router/zod-full-coverage-at-scale", + fixturePath: getProjectFixturePath("next", "app-router", "zod-full-coverage-at-scale"), + }, + { + label: "next/app-router/zod-only-coverage-at-scale", + fixturePath: getProjectFixturePath("next", "app-router", "zod-only-coverage-at-scale"), + }, + { + label: "next/app-router/mixed-schemas-at-scale", + fixturePath: getProjectFixturePath("next", "app-router", "mixed-schemas-at-scale"), + }, + { + label: "next/app-router/drizzle-zod-flow-at-scale", + fixturePath: getProjectFixturePath("next", "app-router", "drizzle-zod-flow-at-scale"), + }, + { + label: "next/app-router/ignore-routes-at-scale", + fixturePath: getProjectFixturePath("next", "app-router", "ignore-routes-at-scale"), + }, + { + label: "next/pages-router/core-flow-at-scale", + fixturePath: getProjectFixturePath("next", "pages-router", "core-flow-at-scale"), + }, + { + label: "next/pages-router/zod-flow-at-scale", + fixturePath: getProjectFixturePath("next", "pages-router", "zod-flow-at-scale"), + }, + { + label: "tanstack/core-flow-at-scale", + fixturePath: getProjectFixturePath("tanstack", "core-flow-at-scale"), + }, + { + label: "react-router/core-flow-at-scale", + fixturePath: getProjectFixturePath("react-router", "core-flow-at-scale"), + }, +]; + +function countPathOperations(spec: OpenApiDocument): number { + return Object.values(spec.paths ?? {}).reduce((count, pathItem) => { + if (!pathItem || typeof pathItem !== "object") { + return count; + } + return ( + count + + Object.keys(pathItem).filter( + (key) => !["parameters", "summary", "description", "servers"].includes(key), + ).length + ); + }, 0); +} + +describe("at-scale fixture generation", () => { + it.each(AT_SCALE_FIXTURES)("generates a large OpenAPI document for $label", ({ fixturePath }) => { + const { project, spec, performanceProfile } = generateFixtureSpec({ + fixturePath, + openapiVersion: "3.2", + }); + + try { + expect(Object.keys(spec.paths ?? {}).length).toBeGreaterThanOrEqual(45); + expect(countPathOperations(spec)).toBeGreaterThanOrEqual( + fixturePath.includes(`${path.sep}tanstack${path.sep}`) || + fixturePath.includes(`${path.sep}react-router${path.sep}`) + ? 95 + : 120, + ); + expect(Object.keys(spec.components?.schemas ?? {}).length).toBeGreaterThanOrEqual(50); + expect(performanceProfile?.totalMs).toBeGreaterThan(0); + } finally { + project.cleanup(); + } + }); + + it("maps TanStack scale routes with loader/action handlers", () => { + const fixturePath = getProjectFixturePath("tanstack", "core-flow-at-scale"); + const { project, spec } = generateFixtureSpec({ + fixturePath, + openapiVersion: "3.2", + }); + + try { + expect(spec.paths?.["/generated/customers"]?.get).toMatchObject({ + operationId: "tanstackScaleListCustomer", + tags: ["Customers"], + }); + expect(spec.paths?.["/generated/customers"]?.post).toMatchObject({ + operationId: "tanstackScaleCreateCustomer", + }); + } finally { + project.cleanup(); + } + }); + + it("maps React Router scale routes with loader/action handlers", () => { + const fixturePath = getProjectFixturePath("react-router", "core-flow-at-scale"); + const { project, spec } = generateFixtureSpec({ + fixturePath, + openapiVersion: "3.2", + }); + + try { + expect(spec.paths?.["/generated/products/{id}"]?.get).toMatchObject({ + operationId: "reactRouterScaleGetProduct", + tags: ["Products"], + }); + expect(spec.paths?.["/generated/products/{id}"]?.post).toMatchObject({ + operationId: "reactRouterScaleUpdateProduct", + }); + } finally { + project.cleanup(); + } + }); + + it("respects ignoreRoutes filtering on the ignore-routes-at-scale fixture", () => { + const fixturePath = getProjectFixturePath("next", "app-router", "ignore-routes-at-scale"); + const { project, spec } = generateFixtureSpec({ + fixturePath, + openapiVersion: "3.2", + }); + + try { + expect(spec.paths?.["/admin/test"]).toBeUndefined(); + expect(spec.paths?.["/generated/customers"]).toBeDefined(); + } finally { + project.cleanup(); + } + }); +}); diff --git a/tests/integration/generator/cross-framework-fixtures.test.ts b/tests/integration/generator/cross-framework-fixtures.test.ts new file mode 100644 index 00000000..02bdba83 --- /dev/null +++ b/tests/integration/generator/cross-framework-fixtures.test.ts @@ -0,0 +1,158 @@ +import { describe, expect, it } from "vitest"; + +import { generateFixtureSpec, getProjectFixturePath } from "../../helpers/test-project.js"; + +const tanstackFixture = getProjectFixturePath("tanstack", "core-flow"); +const reactRouterFixture = getProjectFixturePath("react-router", "core-flow"); + +describe("cross-framework fixture generation", () => { + it("maps TanStack route files, loaders, actions, and response sets", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: tanstackFixture, + openapiVersion: "3.1", + }); + + try { + expect(spec.paths?.["/users/{id}"]?.get).toMatchObject({ + operationId: "tanstackGetUserById", + tags: ["Users"], + parameters: [ + { + in: "path", + name: "id", + required: true, + schema: { + type: "string", + }, + }, + ], + responses: { + "200": { + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/User", + }, + }, + }, + }, + "401": { + $ref: "#/components/responses/401", + }, + "403": { + $ref: "#/components/responses/403", + }, + }, + }); + expect(spec.paths?.["/users/{id}"]?.post).toMatchObject({ + operationId: "tanstackUpdateUserById", + requestBody: { + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/UpdateUserInput", + }, + }, + }, + }, + }); + expect(spec.paths?.["/reports/{reportId}/summary"]?.get).toMatchObject({ + operationId: "tanstackGetReportSummary", + responses: { + "400": { + $ref: "#/components/responses/400", + }, + "500": { + $ref: "#/components/responses/500", + }, + }, + }); + expect(spec.components?.schemas?.ReportSummary).toMatchObject({ + type: "object", + properties: { + status: { + type: "string", + enum: ["draft", "published"], + }, + }, + }); + } finally { + project.cleanup(); + } + }); + + it("maps React Router route files, loaders, actions, and response sets", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: reactRouterFixture, + openapiVersion: "3.1", + }); + + try { + expect(spec.paths?.["/projects/{projectId}"]?.get).toMatchObject({ + operationId: "reactRouterGetProjectById", + tags: ["Projects"], + parameters: [ + { + in: "path", + name: "projectId", + required: true, + schema: { + type: "string", + }, + }, + ], + responses: { + "200": { + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/Project", + }, + }, + }, + }, + "401": { + $ref: "#/components/responses/401", + }, + "403": { + $ref: "#/components/responses/403", + }, + }, + }); + expect(spec.paths?.["/projects/{projectId}"]?.post).toMatchObject({ + operationId: "reactRouterUpdateProjectById", + requestBody: { + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/ProjectMutationInput", + }, + }, + }, + }, + }); + expect(spec.paths?.["/settings/profile"]?.get).toMatchObject({ + operationId: "reactRouterGetProfileSettings", + responses: { + "400": { + $ref: "#/components/responses/400", + }, + "500": { + $ref: "#/components/responses/500", + }, + }, + }); + expect(spec.components?.schemas?.ProfileSettings).toMatchObject({ + type: "object", + properties: { + theme: { + type: "string", + enum: ["light", "dark"], + }, + }, + }); + } finally { + project.cleanup(); + } + }); +}); diff --git a/tests/integration/generator/drizzle-zod-flow.test.ts b/tests/integration/generator/drizzle-zod-flow.test.ts new file mode 100644 index 00000000..05e9f7ec --- /dev/null +++ b/tests/integration/generator/drizzle-zod-flow.test.ts @@ -0,0 +1,88 @@ +import { describe, expect, it } from "vitest"; + +import { generateFixtureSpec, getProjectFixturePath } from "../../helpers/test-project.js"; + +const drizzleZodFixture = getProjectFixturePath("next", "app-router", "drizzle-zod-flow"); + +describe("drizzle-zod fixture generation", () => { + it("emits Drizzle-derived Zod schemas, path params, and request bodies", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: drizzleZodFixture, + openapiVersion: "3.1", + }); + + try { + expect(spec.paths?.["/posts"]?.get?.parameters).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + in: "query", + name: "published", + schema: { + type: "string", + enum: ["true", "false"], + description: "Filter by publication status", + }, + required: false, + }), + expect.objectContaining({ + in: "query", + name: "authorId", + schema: expect.objectContaining({ + pattern: "^\\d+$", + }), + required: false, + }), + ]), + ); + expect(spec.paths?.["/posts"]?.post?.requestBody).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/CreatePostSchema", + }, + }, + }, + }); + expect(spec.paths?.["/posts/{id}"]?.patch).toMatchObject({ + parameters: [ + { + in: "path", + name: "id", + required: true, + schema: { + type: "string", + pattern: "^\\d+$", + description: "Post ID", + }, + description: "Post ID", + example: "123", + }, + ], + requestBody: { + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/UpdatePostSchema", + }, + }, + }, + }, + }); + expect(spec.components?.schemas?.PostResponseSchema).toMatchObject({ + type: "object", + properties: { + title: { + type: "string", + description: "Post title", + }, + published: { + type: "boolean", + description: "Publication status", + }, + }, + }); + } finally { + project.cleanup(); + } + }); +}); diff --git a/tests/integration/generator/example-app-zod-smoke.test.ts b/tests/integration/generator/example-app-zod-smoke.test.ts new file mode 100644 index 00000000..fba9fdff --- /dev/null +++ b/tests/integration/generator/example-app-zod-smoke.test.ts @@ -0,0 +1,33 @@ +import path from "node:path"; + +import { describe, expect, it } from "vitest"; + +import { generateProjectSpec } from "../../helpers/test-project.js"; + +const rootDir = process.cwd(); +const zodAppPath = path.join(rootDir, "apps", "next-app-zod"); + +describe("next-app-zod inference smoke", () => { + it("infers UUID path params from handler validation without @pathParams", () => { + const { project, spec } = generateProjectSpec({ + projectPath: zodAppPath, + }); + + try { + const organizationIdParam = spec.paths?.[ + "/organizations/{organizationId}" + ]?.get?.parameters?.find((parameter) => parameter.name === "organizationId"); + + expect(organizationIdParam).toMatchObject({ + in: "path", + required: true, + schema: { + type: "string", + format: "uuid", + }, + }); + } finally { + project.cleanup(); + } + }); +}); diff --git a/tests/integration/generator/openapi-generator-flow.test.ts b/tests/integration/generator/openapi-generator-flow.test.ts index e031b208..fc4f6215 100644 --- a/tests/integration/generator/openapi-generator-flow.test.ts +++ b/tests/integration/generator/openapi-generator-flow.test.ts @@ -266,13 +266,12 @@ describe.sequential("OpenApiGenerator integration flow", () => { type: "object", }, }); - expect(diagnostics).toHaveLength(2); - expect(diagnostics).toSatisfy((entries) => - entries.every( + expect( + diagnostics.filter( (entry) => entry.code === "missing-path-params-type" && entry.routePath === "/diagnostics/{id}", ), - ); + ).toHaveLength(2); const pathKeys = Object.keys(spec.paths ?? {}); expect(pathKeys.indexOf("/reports")).toBeLessThan(pathKeys.indexOf("/reports/{id}/summary")); diff --git a/tests/integration/generator/readme-samples.test.ts b/tests/integration/generator/readme-samples.test.ts index efac756f..22cb99fa 100644 --- a/tests/integration/generator/readme-samples.test.ts +++ b/tests/integration/generator/readme-samples.test.ts @@ -94,6 +94,53 @@ describe.sequential("README-backed generator samples", () => { ); expect(spec.components?.schemas?.ExtendedSchema).toBeDefined(); expect(spec.components?.schemas?.DoubleExtendedSchema).toBeDefined(); + expect(spec.openapi).toBe("3.2.0"); + expect(spec.$self).toBe("https://example.com/openapi/next-app-zod.json"); + expect(spec.paths?.["/events"]?.get?.parameters).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + in: "querystring", + name: "advancedQuery", + }), + ]), + ); + expect(spec.paths?.["/events"]?.get?.responses?.["200"]).toMatchObject({ + content: { + "text/event-stream": { + itemSchema: { + $ref: "#/components/schemas/EventChunk", + }, + }, + }, + }); + expect(spec.paths?.["/integrations/subscribe"]?.post?.callbacks).toMatchObject({ + paymentEvent: { + "{$request.body#/callbackUrl}": { + $ref: "#/components/callbacks/SubscriptionEventPayload", + }, + }, + }); + expect(spec.webhooks?.paymentEvent?.post?.requestBody).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/PaymentEvent", + }, + }, + }, + }); + expect(spec.paths?.["/organizations/{organizationId}"]?.get?.parameters).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + in: "path", + name: "organizationId", + schema: { + type: "string", + format: "uuid", + }, + }), + ]), + ); } finally { project.cleanup(); } @@ -141,6 +188,44 @@ describe.sequential("README-backed generator samples", () => { { BearerAuth: [] }, { PartnerToken: [] }, ]); + expect(spec.openapi).toBe("3.1.0"); + expect(spec.paths?.["/upload"]?.post?.requestBody).toMatchObject({ + content: { + "multipart/form-data": { + schema: { + $ref: "#/components/schemas/UploadFormData", + }, + }, + }, + }); + expect( + spec.paths?.["/organizations/{orgId}/projects/{projectId}/tasks/{taskId}/comments"]?.get + ?.parameters, + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + in: "path", + name: "orgId", + }), + expect.objectContaining({ + in: "path", + name: "projectId", + }), + expect.objectContaining({ + in: "path", + name: "taskId", + }), + expect.objectContaining({ + in: "query", + name: "sort", + schema: { + type: "string", + enum: ["newest", "oldest", "likes"], + description: "Sort order", + }, + }), + ]), + ); } finally { project.cleanup(); } @@ -189,6 +274,36 @@ describe.sequential("README-backed generator samples", () => { description: "User role definition from protobuf", }); expect(spec.components?.schemas?.Permission).toBeDefined(); + expect(spec.openapi).toBe("3.2.0"); + expect(spec.webhooks?.integrationEvent?.post?.requestBody).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/WebhookEnvelope", + }, + }, + }, + }); + expect(spec.paths?.["/integrations/webhooks"]?.post).toMatchObject({ + operationId: "mixedRegisterWebhookEndpoint", + callbacks: expect.any(Object), + }); + expect(spec.paths?.["/integrations/webhooks/deliveries/{deliveryId}"]?.get).toMatchObject({ + operationId: "mixedGetWebhookDelivery", + parameters: [ + { + in: "path", + name: "deliveryId", + required: true, + schema: { + type: "string", + description: "Delivery attempt identifier", + }, + description: "Delivery attempt identifier", + example: "123", + }, + ], + }); } finally { project.cleanup(); } @@ -227,4 +342,61 @@ describe.sequential("README-backed generator samples", () => { project.cleanup(); } }); + + it("covers TanStack and React Router sample-app route mapping and multipart actions", () => { + const tanstack = generateProjectSpec({ + projectPath: path.join(rootDir, "apps", "tanstack-app"), + }); + const reactRouter = generateProjectSpec({ + projectPath: path.join(rootDir, "apps", "react-router-app"), + }); + + try { + expect(tanstack.spec.paths?.["/reports/{reportId}/summary"]?.get).toMatchObject({ + operationId: "tanstackGetReportSummary", + parameters: [ + { + in: "path", + name: "reportId", + required: true, + schema: { + type: "string", + }, + example: "123", + }, + ], + }); + expect(tanstack.spec.paths?.["/uploads"]?.post).toMatchObject({ + operationId: "tanstackCreateUpload", + requestBody: { + content: { + "multipart/form-data": { + schema: { + $ref: "#/components/schemas/AssetUploadInput", + }, + }, + }, + }, + }); + expect(reactRouter.spec.paths?.["/projects/{projectId}"]?.get).toMatchObject({ + operationId: "reactRouterGetProjectById", + tags: ["Projects", "Workspace"], + }); + expect(reactRouter.spec.paths?.["/uploads"]?.post).toMatchObject({ + operationId: "reactRouterCreateUpload", + requestBody: { + content: { + "multipart/form-data": { + schema: { + $ref: "#/components/schemas/UploadDraft", + }, + }, + }, + }, + }); + } finally { + tanstack.project.cleanup(); + reactRouter.project.cleanup(); + } + }); }); diff --git a/tests/integration/generator/schema-full-coverage.test.ts b/tests/integration/generator/schema-full-coverage.test.ts new file mode 100644 index 00000000..1490b5d9 --- /dev/null +++ b/tests/integration/generator/schema-full-coverage.test.ts @@ -0,0 +1,322 @@ +import { describe, expect, it } from "vitest"; + +import { generateFixtureSpec, getProjectFixturePath } from "../../helpers/test-project.js"; + +const openApiVersions = ["3.0", "3.1", "3.2"] as const; + +const zodFullCoverageFixture = getProjectFixturePath("next", "app-router", "zod-full-coverage"); +const typescriptFullCoverageFixture = getProjectFixturePath( + "next", + "app-router", + "ts-full-coverage", +); + +describe("full coverage fixture generation", { timeout: 15_000 }, () => { + it.each(openApiVersions)("wires representative Zod schemas for OpenAPI %s", (openapiVersion) => { + const { project, spec } = generateFixtureSpec({ + fixturePath: zodFullCoverageFixture, + openapiVersion, + }); + + try { + const schemas = spec.components?.schemas ?? {}; + + expect(spec.paths?.["/catalog"]?.get?.responses?.["200"]).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/StringFormatsSchema", + }, + }, + }, + }); + expect(spec.paths?.["/objects"]?.post?.responses?.["201"]).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/StrictObject", + }, + }, + }, + }); + expect(spec.paths?.["/union"]?.get?.responses?.["214"]).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/Branded", + }, + }, + }, + }); + expect(spec.paths?.["/advanced"]?.get?.responses?.["203"]).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/Refined", + }, + }, + }, + }); + + expect(schemas.StringFormatsSchema).toMatchObject({ + type: "object", + properties: { + uuid: { + type: "string", + format: "uuid", + }, + email: { + type: "string", + format: "email", + }, + datetime: { + type: "string", + format: "date-time", + }, + }, + }); + expect(schemas.NumberRefinementsSchema).toMatchObject({ + type: "object", + properties: { + int: { + type: "integer", + }, + bounded: { + type: "number", + minimum: 0, + maximum: 100, + }, + step: { + type: "number", + multipleOf: 0.5, + }, + }, + }); + expect(schemas.CollectionsSchema).toMatchObject({ + type: "object", + properties: { + bounded: { + type: "array", + minItems: 1, + maxItems: 5, + }, + set: { + type: "array", + uniqueItems: true, + }, + map: { + type: "object", + additionalProperties: { + type: "number", + }, + }, + }, + }); + expect(schemas.StrictObject).toMatchObject({ + type: "object", + additionalProperties: false, + }); + expect(schemas.CatchAllObject).toMatchObject({ + type: "object", + additionalProperties: { + type: "string", + }, + }); + expect(schemas.ExtendedObject).toMatchObject({ + type: "object", + properties: { + createdAt: { + type: "string", + format: "date-time", + }, + }, + }); + expect(schemas.Pet).toMatchObject({ + oneOf: [{ $ref: "#/components/schemas/Cat" }, { $ref: "#/components/schemas/Dog" }], + discriminator: { + propertyName: "kind", + }, + }); + expect(schemas.ColorEnum).toMatchObject({ + type: "string", + enum: ["red", "green", "blue"], + }); + expect(schemas.Described).toMatchObject({ + type: "number", + description: "A score between 0 and 100", + }); + expect(schemas.LazyTree).toMatchObject({ + type: "object", + properties: { + value: { + type: "string", + }, + children: { + type: "array", + }, + }, + }); + expect(schemas.Transformed).toMatchObject({ + type: "string", + }); + expect(schemas.Refined).toMatchObject({ + type: "number", + }); + + const expectedNullableScalar = + openapiVersion === "3.0" + ? { + type: "string", + nullable: true, + } + : { + type: ["string", "null"], + }; + expect(schemas.NullableScalar).toMatchObject(expectedNullableScalar); + } finally { + project.cleanup(); + } + }); + + it.each(openApiVersions)( + "wires representative TypeScript schemas for OpenAPI %s", + (openapiVersion) => { + const { project, spec } = generateFixtureSpec({ + fixturePath: typescriptFullCoverageFixture, + openapiVersion, + }); + + try { + const schemas = spec.components?.schemas ?? {}; + + expect(spec.paths?.["/collections"]?.get?.responses?.["203"]).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/FixedTuple", + }, + }, + }, + }); + expect(spec.paths?.["/utilities"]?.get?.responses?.["214"]).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/AwaitedPromise", + }, + }, + }, + }); + expect(spec.paths?.["/utilities"]?.post?.responses?.["202"]).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/UpperChannel", + }, + }, + }, + }); + + expect(schemas.Primitives).toMatchObject({ + type: "object", + properties: { + str: { + type: "string", + }, + num: { + type: "number", + }, + literalNum: { + type: "number", + enum: [42], + }, + }, + }); + expect(schemas.ArrayOfStrings).toMatchObject({ + type: "array", + items: { + type: "string", + }, + }); + expect(schemas.ReadonlyNumbers).toMatchObject({ + type: "array", + items: { + type: "number", + }, + }); + expect(schemas.FixedTuple).toMatchObject({ + type: "array", + minItems: 3, + maxItems: 3, + }); + expect(schemas.StringMap).toMatchObject({ + type: "object", + additionalProperties: { + type: "string", + }, + }); + expect(schemas.Mixed).toMatchObject({ + type: "object", + properties: { + id: { + type: "string", + }, + }, + additionalProperties: { + type: "string", + }, + }); + expect(schemas.Picked).toMatchObject({ + type: "object", + properties: { + id: { + type: "string", + }, + name: { + type: "string", + }, + }, + }); + expect(schemas.Partialed).toMatchObject({ + type: "object", + properties: { + id: { + type: "string", + }, + name: { + type: "string", + }, + age: { + type: "number", + }, + }, + }); + expect(schemas.Requireed).toMatchObject({ + type: "object", + required: ["id", "name", "age"], + }); + expect(schemas.ExcludedUnion).toMatchObject({ + type: "string", + enum: ["a", "c"], + }); + expect(schemas.ExtractedUnion).toMatchObject({ + type: "string", + enum: ["a", "b"], + }); + expect(schemas.AwaitedPromise).toMatchObject({ + type: "number", + }); + expect(schemas.Versioned).toMatchObject({ + type: "string", + enum: ["v1", "v2"], + }); + expect(schemas.UpperChannel).toMatchObject({ + type: "string", + enum: ["RED", "GREEN", "BLUE"], + }); + } finally { + project.cleanup(); + } + }, + ); +}); diff --git a/tests/integration/regressions/diagnostics-matrix.test.ts b/tests/integration/regressions/diagnostics-matrix.test.ts new file mode 100644 index 00000000..8e363779 --- /dev/null +++ b/tests/integration/regressions/diagnostics-matrix.test.ts @@ -0,0 +1,108 @@ +import fs from "node:fs"; +import path from "node:path"; + +import { OpenApiGenerator } from "next-openapi-gen"; +import { describe, expect, it } from "vitest"; + +import { + createTempProject, + withProjectCwd, + writeAppRoute, + writeOpenApiTemplate, +} from "../../helpers/test-project.js"; + +describe("diagnostics matrix", () => { + it("emits stable diagnostics with locations and suggested fixes", () => { + const project = createTempProject("nxog-diagnostics-matrix-"); + + try { + writeOpenApiTemplate(project.root, { + schemaType: ["zod", "typescript"], + }); + writeAppRoute( + project.root, + ["missing", "[id]"], + `export async function GET() { + return Response.json({ ok: true }); +} +`, + ); + writeAppRoute( + project.root, + ["query"], + `export async function GET(request: Request) { + const url = new URL(request.url); + url.searchParams.get("q"); + return Response.json({ ok: true }); +} +`, + ); + writeAppRoute( + project.root, + ["schema-not-found"], + `/** + * @response MissingResponse + */ +export async function GET() {} +`, + ); + writeAppRoute( + project.root, + ["unknown-zod"], + `import { z } from "zod/v4"; + +export const UnknownSchema = z.mystery(); + +/** + * @response UnknownSchema + */ +export async function GET() {} +`, + ); + + const diagnostics = withProjectCwd(project.root, () => { + const generator = new OpenApiGenerator({ templatePath: "next.openapi.json" }); + generator.generate(); + return generator.getDiagnostics(); + }); + + expect(diagnostics).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + code: "missing-path-params-type", + filePath: expect.stringContaining(path.join("missing", "[id]", "route.ts")), + routePath: "/missing/{id}", + metadata: expect.objectContaining({ + suggestedFix: expect.any(String), + }), + }), + expect.objectContaining({ + code: "missing-query-params-type", + filePath: expect.stringContaining(path.join("query", "route.ts")), + routePath: "/query", + metadata: expect.objectContaining({ + suggestedFix: expect.any(String), + }), + }), + expect.objectContaining({ + code: "schema-not-found", + filePath: expect.any(String), + metadata: expect.objectContaining({ + typeName: "MissingResponse", + suggestedFix: expect.any(String), + }), + }), + expect.objectContaining({ + code: "unknown-zod-helper", + filePath: expect.stringContaining(path.join("unknown-zod", "route.ts")), + metadata: expect.objectContaining({ + name: "mystery", + }), + }), + ]), + ); + } finally { + fs.rmSync(project.root, { recursive: true, force: true }); + } + }); +}); diff --git a/tests/integration/regressions/handler-param-inference.test.ts b/tests/integration/regressions/handler-param-inference.test.ts new file mode 100644 index 00000000..dc856851 --- /dev/null +++ b/tests/integration/regressions/handler-param-inference.test.ts @@ -0,0 +1,225 @@ +import fs from "node:fs"; +import path from "node:path"; + +import { OpenApiGenerator } from "next-openapi-gen"; +import { describe, expect, it } from "vitest"; + +import { + createTempProject, + generateFixtureSpec, + getProjectFixturePath, + withProjectCwd, + writeJsonFile, + writeOpenApiTemplate, +} from "../../helpers/test-project.js"; + +const appRouterCoreFixture = getProjectFixturePath("next", "app-router", "core-flow"); + +describe("handler param inference", () => { + it("infers UUID path parameters from context.params Zod validation", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: appRouterCoreFixture, + openapiVersion: "3.1", + }); + + try { + const organizationIdParam = spec.paths?.[ + "/organizations/{organizationId}" + ]?.get?.parameters?.find((parameter) => parameter.name === "organizationId"); + + expect(organizationIdParam).toMatchObject({ + in: "path", + required: true, + schema: { + type: "string", + format: "uuid", + }, + }); + } finally { + project.cleanup(); + } + }); + + it("infers query parameters and request bodies from handler Zod validation", () => { + const { diagnostics, project, spec } = generateFixtureSpec({ + fixturePath: appRouterCoreFixture, + openapiVersion: "3.2", + }); + + try { + expect(spec.paths?.["/search"]?.additionalOperations?.query).toMatchObject({ + parameters: [ + { + in: "query", + name: "query", + required: true, + schema: { + type: "string", + minLength: 1, + }, + }, + { + in: "query", + name: "page", + required: false, + schema: { + type: "integer", + }, + }, + ], + }); + expect(spec.paths?.["/search"]?.post?.requestBody).toMatchObject({ + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/SearchRequestBodySchema", + }, + }, + }, + }); + expect(diagnostics).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + code: "inferred-query-params", + routePath: "/search", + metadata: { + schemaName: "SearchQuerySchema", + }, + }), + expect.objectContaining({ + code: "inferred-body", + routePath: "/search", + metadata: { + schemaName: "SearchRequestBodySchema", + }, + }), + ]), + ); + } finally { + project.cleanup(); + } + }); + + it("infers destructured App Router params from handler validation", () => { + const project = createTempProject("nxog-destructured-params-"); + + try { + writeOpenApiTemplate(project.root, { + openapi: "3.1.0", + schemaType: "zod", + }); + const routeDir = path.join(project.root, "src", "app", "api", "teams", "[organizationId]"); + fs.mkdirSync(routeDir, { recursive: true }); + fs.writeFileSync( + path.join(routeDir, "route.ts"), + `import { z } from "zod/v4"; + +export const OrganizationParamsSchema = z.object({ + organizationId: z.uuid(), +}); + +export async function GET({ params }: { params: Promise<{ organizationId: string }> }) { + OrganizationParamsSchema.parse(await params); + return Response.json({ ok: true }); +} +`, + ); + + const { diagnostics, spec } = withProjectCwd(project.root, () => { + const generator = new OpenApiGenerator({ templatePath: "next.openapi.json" }); + const spec = generator.generate(); + return { + diagnostics: generator.getDiagnostics(), + spec, + }; + }); + + const organizationIdParam = spec.paths?.["/teams/{organizationId}"]?.get?.parameters?.find( + (parameter) => parameter.name === "organizationId", + ); + expect(organizationIdParam).toMatchObject({ + in: "path", + schema: { + type: "string", + format: "uuid", + }, + }); + expect(diagnostics).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + code: "inferred-path-params", + routePath: "/teams/{organizationId}", + metadata: expect.objectContaining({ + schemaName: "OrganizationParamsSchema", + }), + }), + ]), + ); + } finally { + project.cleanup(); + } + }); + + it("infers Pages Router params from request query validation", () => { + const project = createTempProject("nxog-pages-handler-inference-"); + + try { + writeJsonFile(path.join(project.root, "next.openapi.json"), { + openapi: "3.1.0", + info: { + title: "Pages inference", + version: "1.0.0", + }, + apiDir: "./pages/api", + schemaDir: ".", + schemaType: "zod", + outputDir: "./public", + outputFile: "openapi.json", + docsUrl: "api-docs", + ui: "scalar", + includeOpenApiRoutes: false, + debug: false, + framework: { + kind: "nextjs", + router: "pages", + }, + }); + const routeDir = path.join(project.root, "pages", "api", "users"); + fs.mkdirSync(routeDir, { recursive: true }); + fs.writeFileSync( + path.join(routeDir, "[id].ts"), + `import { z } from "zod/v4"; + +export const UserIdParamsSchema = z.object({ + id: z.uuid(), +}); + +/** + * @method GET + */ +export default function handler(req: { query: unknown }) { + UserIdParamsSchema.parse(req.query); +} +`, + ); + + const { spec } = withProjectCwd(project.root, () => { + const generator = new OpenApiGenerator({ templatePath: "next.openapi.json" }); + return { + spec: generator.generate(), + }; + }); + + expect(spec.paths?.["/users/{id}"]?.get?.parameters?.[0]).toMatchObject({ + in: "path", + name: "id", + schema: { + type: "string", + format: "uuid", + }, + }); + } finally { + project.cleanup(); + } + }); +}); diff --git a/tests/integration/regressions/multipart-openapi-versions.test.ts b/tests/integration/regressions/multipart-openapi-versions.test.ts new file mode 100644 index 00000000..d59a4cb5 --- /dev/null +++ b/tests/integration/regressions/multipart-openapi-versions.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from "vitest"; + +import { generateFixtureSpec, getProjectFixturePath } from "../../helpers/test-project.js"; + +const appRouterCoreFixture = getProjectFixturePath("next", "app-router", "core-flow"); + +describe("multipart OpenAPI version output", () => { + it.each(["3.0", "3.1", "3.2"] as const)( + "emits object-backed multipart bodies for OpenAPI %s", + (openapiVersion) => { + const { project, spec } = generateFixtureSpec({ + fixturePath: appRouterCoreFixture, + openapiVersion, + }); + + try { + const logoUpload = spec.paths?.["/uploads/logo"]?.post?.requestBody; + expect(logoUpload?.content?.["multipart/form-data"]?.schema).toMatchObject({ + type: "object", + required: ["file"], + properties: { + file: + openapiVersion === "3.0" + ? { type: "string", format: "binary" } + : { type: "string", contentMediaType: "application/octet-stream" }, + }, + }); + + const avatarUpload = spec.paths?.["/uploads/avatar"]?.post?.requestBody; + expect(avatarUpload?.content?.["multipart/form-data"]?.schema?.$ref).toBe( + "#/components/schemas/AvatarUploadFormData", + ); + } finally { + project.cleanup(); + } + }, + ); +}); diff --git a/tests/integration/regressions/query-additional-operations.test.ts b/tests/integration/regressions/query-additional-operations.test.ts new file mode 100644 index 00000000..25bca608 --- /dev/null +++ b/tests/integration/regressions/query-additional-operations.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, it } from "vitest"; + +import { generateFixtureSpec, getProjectFixturePath } from "../../helpers/test-project.js"; + +const appRouterCoreFixture = getProjectFixturePath("next", "app-router", "core-flow"); + +describe("OpenAPI 3.2 additionalOperations", () => { + it("emits @method QUERY routes as additionalOperations for OpenAPI 3.2", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: appRouterCoreFixture, + openapiVersion: "3.2", + }); + + try { + expect(spec.paths?.["/search"]?.additionalOperations).toMatchObject({ + query: { + operationId: "query-search", + summary: "Query search index", + }, + }); + expect(spec.paths?.["/search"]?.get).toBeUndefined(); + } finally { + project.cleanup(); + } + }); + + it("strips additionalOperations from older OpenAPI targets", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: appRouterCoreFixture, + openapiVersion: "3.1", + }); + + try { + expect(spec.paths?.["/search"]?.additionalOperations).toBeUndefined(); + expect(spec.paths?.["/search"]?.get).toBeUndefined(); + } finally { + project.cleanup(); + } + }); +}); diff --git a/tests/integration/regressions/response-inference-extensions.test.ts b/tests/integration/regressions/response-inference-extensions.test.ts new file mode 100644 index 00000000..4fca58a7 --- /dev/null +++ b/tests/integration/regressions/response-inference-extensions.test.ts @@ -0,0 +1,102 @@ +import fs from "node:fs"; +import path from "node:path"; + +import { OpenApiGenerator } from "next-openapi-gen"; +import { describe, expect, it } from "vitest"; + +import { + createTempProject, + withProjectCwd, + writeAppRoute, + writeOpenApiTemplate, +} from "../../helpers/test-project.js"; + +describe("response inference extensions", () => { + it("infers redirects, notFound calls, and streaming response hints", () => { + const project = createTempProject("nxog-response-inference-extensions-"); + + try { + writeOpenApiTemplate(project.root, { + openapi: "3.2.0", + schemaType: "zod", + }); + writeAppRoute( + project.root, + ["redirects"], + `import { NextResponse } from "next/server"; + +export async function GET() { + return NextResponse.redirect("https://example.com"); +} +`, + ); + writeAppRoute( + project.root, + ["maybe-missing"], + `import { notFound } from "next/navigation"; + +export async function GET() { + notFound(); +} +`, + ); + writeAppRoute( + project.root, + ["stream"], + `export async function GET() { + return Response.json(new ReadableStream()); +} +`, + ); + + const { diagnostics, spec } = withProjectCwd(project.root, () => { + const generator = new OpenApiGenerator({ templatePath: "next.openapi.json" }); + const spec = generator.generate(); + return { + diagnostics: generator.getDiagnostics(), + spec, + }; + }); + + expect(spec.paths?.["/redirects"]?.get?.responses?.["307"]).toMatchObject({ + description: "Redirect response", + headers: { + Location: { + schema: { + type: "string", + format: "uri", + }, + }, + }, + }); + expect(spec.paths?.["/maybe-missing"]?.get?.responses?.["404"]).toMatchObject({ + description: "Not Found", + }); + expect(spec.paths?.["/stream"]?.get?.responses?.["200"]).toMatchObject({ + content: { + "text/event-stream": { + schema: { + type: "string", + }, + }, + }, + }); + expect(diagnostics).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + code: "unsupported-route-feature", + routePath: "/maybe-missing", + filePath: expect.stringContaining(path.join("maybe-missing", "route.ts")), + }), + expect.objectContaining({ + code: "stream-response-hint", + routePath: "/stream", + filePath: expect.stringContaining(path.join("stream", "route.ts")), + }), + ]), + ); + } finally { + fs.rmSync(project.root, { recursive: true, force: true }); + } + }); +}); diff --git a/tests/integration/regressions/webhooks-routing.test.ts b/tests/integration/regressions/webhooks-routing.test.ts new file mode 100644 index 00000000..19f5a310 --- /dev/null +++ b/tests/integration/regressions/webhooks-routing.test.ts @@ -0,0 +1,68 @@ +import { describe, expect, it } from "vitest"; + +import { generateFixtureSpec, getProjectFixturePath } from "../../helpers/test-project.js"; + +const appRouterCoreFixture = getProjectFixturePath("next", "app-router", "core-flow"); + +describe("webhook routing", () => { + it("routes @webhook operations into the top-level webhooks map for OpenAPI 3.1+", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: appRouterCoreFixture, + openapiVersion: "3.1", + }); + + try { + expect(spec.paths).not.toHaveProperty("/webhooks/payment"); + expect(spec.webhooks?.paymentReceived?.post).toMatchObject({ + operationId: "post-webhooks-payment", + requestBody: { + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/PaymentWebhookPayload", + }, + }, + }, + }, + responses: { + 204: expect.any(Object), + }, + }); + } finally { + project.cleanup(); + } + }); + + it("preserves generated webhooks for OpenAPI 3.2 output", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: appRouterCoreFixture, + openapiVersion: "3.2", + }); + + try { + expect(spec.paths).not.toHaveProperty("/webhooks/payment"); + expect(spec.webhooks?.paymentReceived?.post).toMatchObject({ + operationId: "post-webhooks-payment", + responses: { + 204: expect.any(Object), + }, + }); + } finally { + project.cleanup(); + } + }); + + it("drops generated webhooks for OpenAPI 3.0 output", () => { + const { project, spec } = generateFixtureSpec({ + fixturePath: appRouterCoreFixture, + openapiVersion: "3.0", + }); + + try { + expect(spec.webhooks).toBeUndefined(); + expect(spec.paths).not.toHaveProperty("/webhooks/payment"); + } finally { + project.cleanup(); + } + }); +}); diff --git a/tests/integration/regressions/zod-mini-functional-api.test.ts b/tests/integration/regressions/zod-mini-functional-api.test.ts new file mode 100644 index 00000000..f8434ba2 --- /dev/null +++ b/tests/integration/regressions/zod-mini-functional-api.test.ts @@ -0,0 +1,167 @@ +import fs from "fs"; +import os from "os"; +import path from "path"; + +import { describe, expect, it } from "vitest"; + +import { ZodSchemaConverter } from "@workspace/openapi-core/schema/zod/zod-converter.js"; + +function setup(schema: string) { + const testDir = fs.mkdtempSync(path.join(os.tmpdir(), "nxog-zod-mini-")); + fs.writeFileSync(path.join(testDir, "schema.ts"), schema.trim()); + return testDir; +} + +describe("Zod Mini functional API regressions (issue #167)", () => { + it("handles functional optional/nullable wrappers and overlapping unions", () => { + const testDir = setup(` + import { z } from "zod/mini"; + + export const exampleSchema = z.object({ + id: z.union([z.cuid2(), z.uuid()]), + name: z.optional(z.string()), + deletedAt: z.nullable(z.iso.datetime()), + }); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const schema = converter.convertZodSchemaToOpenApi("exampleSchema"); + + expect(schema?.required).toEqual(["id", "deletedAt"]); + expect(schema?.properties?.id).toEqual({ + anyOf: [ + { type: "string", format: "cuid2" }, + { type: "string", format: "uuid" }, + ], + }); + expect(schema?.properties?.name).toEqual({ type: "string" }); + expect(schema?.properties?.deletedAt).toEqual({ + type: "string", + format: "date-time", + nullable: true, + }); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); + + it("handles functional z.extend(base, shape)", () => { + const testDir = setup(` + import { z } from "zod/mini"; + + const Base = z.object({ name: z.string() }); + export const Extended = z.extend(Base, { age: z.number() }); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const schema = converter.convertZodSchemaToOpenApi("Extended"); + + expect(schema).toMatchObject({ + type: "object", + required: ["name", "age"], + properties: { + name: { type: "string" }, + age: { type: "number" }, + }, + }); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); + + it("handles .check() with functional refinements", () => { + const testDir = setup(` + import { z } from "zod/mini"; + + export const PasswordSchema = z.string().check(z.minLength(10), z.maxLength(100)); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const schema = converter.convertZodSchemaToOpenApi("PasswordSchema"); + + expect(schema).toMatchObject({ + type: "string", + minLength: 10, + maxLength: 100, + }); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); + + it("handles functional readonly/default/describe wrappers", () => { + const testDir = setup(` + import { z } from "zod/mini"; + + export const ItemSchema = z.object({ + id: z.readonly(z.string()), + status: z.default(z.string(), "draft"), + note: z.describe(z.string(), "Optional note"), + }); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const schema = converter.convertZodSchemaToOpenApi("ItemSchema"); + + expect(schema?.properties?.id).toMatchObject({ type: "string", readOnly: true }); + expect(schema?.properties?.status).toMatchObject({ + type: "string", + default: "draft", + }); + expect(schema?.properties?.note).toMatchObject({ + type: "string", + description: "Optional note", + }); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); + + it("supports namespace import alias for zod/mini", () => { + const testDir = setup(` + import * as z from "zod/mini"; + + export const AliasSchema = z.extend(z.object({ id: z.string() }), { active: z.boolean() }); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const schema = converter.convertZodSchemaToOpenApi("AliasSchema"); + + expect(schema).toMatchObject({ + type: "object", + required: ["id", "active"], + properties: { + id: { type: "string" }, + active: { type: "boolean" }, + }, + }); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); + + it("supports import { z as zod } from zod/v4/mini", () => { + const testDir = setup(` + import { z as zod } from "zod/v4/mini"; + + export const MiniSchema = zod.object({ + label: zod.optional(zod.string()), + }); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const schema = converter.convertZodSchemaToOpenApi("MiniSchema"); + + expect(schema?.required ?? []).not.toContain("label"); + expect(schema?.properties?.label).toEqual({ type: "string" }); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); +}); diff --git a/tests/integration/regressions/zod-undefined-union.test.ts b/tests/integration/regressions/zod-undefined-union.test.ts new file mode 100644 index 00000000..50cfc8fa --- /dev/null +++ b/tests/integration/regressions/zod-undefined-union.test.ts @@ -0,0 +1,93 @@ +import fs from "fs"; +import os from "os"; +import path from "path"; + +import { describe, expect, it } from "vitest"; + +import { createDocumentFromTemplate } from "@workspace/openapi-core/openapi/document.js"; +import { getOpenApiVersionProcessor } from "@workspace/openapi-core/openapi/version-processor.js"; +import { ZodSchemaConverter } from "@workspace/openapi-core/schema/zod/zod-converter.js"; + +function setup(schema: string) { + const testDir = fs.mkdtempSync(path.join(os.tmpdir(), "nxog-zod-union-")); + fs.writeFileSync(path.join(testDir, "schema.ts"), schema.trim()); + return testDir; +} + +describe("Zod undefined union regressions", () => { + it("z.union([z.string(), z.undefined()]) is optional, not nullable", () => { + const testDir = setup(` + import { z } from "zod"; + + export const WrapperSchema = z.object({ + label: z.union([z.string(), z.undefined()]), + id: z.string(), + }); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const schema = converter.convertZodSchemaToOpenApi("WrapperSchema"); + + expect(schema?.required).toEqual(["id"]); + expect(schema?.properties?.label).toEqual({ type: "string" }); + expect(schema?.properties?.label?.nullable).toBeUndefined(); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); + + it("z.union([z.string(), z.null(), z.undefined()]) is nullish", () => { + const testDir = setup(` + import { z } from "zod"; + + export const WrapperSchema = z.object({ + note: z.union([z.string(), z.null(), z.undefined()]), + }); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const schema = converter.convertZodSchemaToOpenApi("WrapperSchema"); + + expect(schema?.required ?? []).not.toContain("note"); + expect(schema?.properties?.note).toMatchObject({ + type: "string", + nullable: true, + }); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); +}); + +describe("Nullable representation pipeline", () => { + it("folds inline anyOf+null to nullable:true after version processing", () => { + const testDir = setup(` + import { z } from "zod"; + + export const UserSchema = z.object({ + name: z.string().nullable(), + }); + `); + + try { + const converter = new ZodSchemaConverter(testDir); + const raw = converter.convertZodSchemaToOpenApi("UserSchema"); + const processed = getOpenApiVersionProcessor("3.1").finalize( + createDocumentFromTemplate({ + openapi: "3.0.0", + info: { title: "t", version: "1" }, + paths: {}, + components: { schemas: { UserSchema: raw! } }, + }), + ); + + const nameProp = processed.components?.schemas?.UserSchema?.properties?.name; + expect(nameProp).toMatchObject({ type: ["string", "null"] }); + expect(nameProp?.anyOf).toBeUndefined(); + } finally { + fs.rmSync(testDir, { recursive: true, force: true }); + } + }); +}); diff --git a/tests/integration/validation/openapi-validation.test.ts b/tests/integration/validation/openapi-validation.test.ts index 9194fdd6..78086fb9 100644 --- a/tests/integration/validation/openapi-validation.test.ts +++ b/tests/integration/validation/openapi-validation.test.ts @@ -28,6 +28,24 @@ const appRouterTypescriptFullCoverageFixture = getProjectFixturePath( "app-router", "ts-full-coverage", ); +const tanstackCoreFixture = getProjectFixturePath("tanstack", "core-flow"); +const reactRouterCoreFixture = getProjectFixturePath("react-router", "core-flow"); +const appRouterCoreFlowAtScaleFixture = getProjectFixturePath( + "next", + "app-router", + "core-flow-at-scale", +); +const appRouterZodFullCoverageAtScaleFixture = getProjectFixturePath( + "next", + "app-router", + "zod-full-coverage-at-scale", +); +const tanstackCoreFlowAtScaleFixture = getProjectFixturePath("tanstack", "core-flow-at-scale"); + +const frameworkFixtures = [ + ["TanStack", tanstackCoreFixture], + ["React Router", reactRouterCoreFixture], +] as const; describe("OpenAPI document validation", () => { it.each(["3.0", "3.1", "3.2"] as const)( @@ -118,6 +136,7 @@ describe("OpenAPI document validation", () => { it.each(["3.0", "3.1", "3.2"] as const)( "validates generated zod-full-coverage fixture for OpenAPI %s", + { timeout: 15_000 }, async (openapiVersion) => { expect.assertions(3); const { project, spec } = generateFixtureSpec({ @@ -137,6 +156,7 @@ describe("OpenAPI document validation", () => { it.each(["3.0", "3.1", "3.2"] as const)( "validates generated ts-full-coverage fixture for OpenAPI %s", + { timeout: 15_000 }, async (openapiVersion) => { expect.assertions(3); const { project, spec } = generateFixtureSpec({ @@ -154,6 +174,57 @@ describe("OpenAPI document validation", () => { }, ); + it.each( + frameworkFixtures.flatMap(([frameworkName, fixturePath]) => + (["3.0", "3.1", "3.2"] as const).map((openapiVersion) => ({ + fixturePath, + frameworkName, + openapiVersion, + })), + ), + )( + "validates generated $frameworkName fixture for OpenAPI $openapiVersion", + async ({ fixturePath, openapiVersion }) => { + expect.assertions(3); + const { project, spec } = generateFixtureSpec({ + fixturePath, + openapiVersion, + }); + + try { + await expectValidSpec(spec); + expect(spec.paths).toBeDefined(); + expect(Object.keys(spec.paths ?? {}).length).toBeGreaterThan(0); + } finally { + project.cleanup(); + } + }, + ); + + it.each([ + ["Next app router core at scale", appRouterCoreFlowAtScaleFixture], + ["Next app router zod full at scale", appRouterZodFullCoverageAtScaleFixture], + ["TanStack core at scale", tanstackCoreFlowAtScaleFixture], + ] as const)( + "validates generated at-scale fixture for OpenAPI 3.2 (%s)", + { timeout: 15_000 }, + async (_label, fixturePath) => { + expect.assertions(3); + const { project, spec } = generateFixtureSpec({ + fixturePath, + openapiVersion: "3.2", + }); + + try { + await expectValidSpec(spec); + expect(spec.paths).toBeDefined(); + expect(Object.keys(spec.paths ?? {}).length).toBeGreaterThanOrEqual(45); + } finally { + project.cleanup(); + } + }, + ); + it("validates advanced OpenAPI 3.2 template passthrough features", async () => { const project = createTempProject("nxog-openapi-32-validation-"); diff --git a/tests/unit/cli/commands/generate.test.ts b/tests/unit/cli/commands/generate.test.ts index e67812f5..299f189a 100644 --- a/tests/unit/cli/commands/generate.test.ts +++ b/tests/unit/cli/commands/generate.test.ts @@ -194,6 +194,8 @@ export async function GET() {}`, }; const generateProject = vi.fn(async () => ({ artifacts: [], + diagnostics: [], + diagnosticsFailOn: "never", outputFile: "/tmp/openapi.json", })); const watchProject = vi.fn(async () => vi.fn()); @@ -210,15 +212,47 @@ export async function GET() {}`, watch: true, }); - expect(generateProject).toHaveBeenCalledWith( - expect.objectContaining({ - configPath: "openapi-gen.config.ts", - }), - ); + expect(generateProject).not.toHaveBeenCalled(); expect(watchProject).toHaveBeenCalledWith( expect.objectContaining({ configPath: "openapi-gen.config.ts", }), ); }); + + it("prints grouped diagnostics and fails on warning when requested", async () => { + const spinner = { + start: vi.fn().mockReturnThis(), + succeed: vi.fn(), + }; + const generateProject = vi.fn(async () => ({ + artifacts: [], + diagnostics: [ + { + code: "missing-query-params-type", + severity: "warning", + message: "Query parameters were inferred from searchParams usage.", + filePath: "/tmp/app/api/search/route.ts", + routePath: "/search", + }, + ], + diagnosticsFailOn: "never", + outputFile: "/tmp/openapi.json", + })); + const watchProject = vi.fn(); + const writeSpy = vi.spyOn(process.stderr, "write").mockImplementation(() => true); + + const { generate } = await loadGenerateModule(spinner, () => { + vi.doMock("@workspace/openapi-core", () => ({ + generateProject, + watchProject, + })); + }); + + await expect(generate({ failOn: "warning" })).rejects.toThrow( + "OpenAPI generation failed because diagnostics matched --fail-on warning.", + ); + expect(writeSpy).toHaveBeenCalledWith(expect.stringContaining("missing-query-params-type")); + expect(writeSpy).toHaveBeenCalledWith(expect.stringContaining("warning: 1")); + }); }); diff --git a/tests/unit/config/normalize.test.ts b/tests/unit/config/normalize.test.ts index dde17b32..78fd9a90 100644 --- a/tests/unit/config/normalize.test.ts +++ b/tests/unit/config/normalize.test.ts @@ -148,4 +148,19 @@ describe("normalizeOpenApiConfig", () => { expect(config.openapiVersion).toBe("3.0"); }); + + it("defaults cache to true and honors explicit overrides", () => { + expect( + normalizeOpenApiConfig({ + info: { title: "Fixture", version: "1.0.0" }, + } as never).cache, + ).toBe(true); + + expect( + normalizeOpenApiConfig({ + info: { title: "Fixture", version: "1.0.0" }, + cache: false, + } as never).cache, + ).toBe(false); + }); }); diff --git a/tests/unit/openapi/version-processor.test.ts b/tests/unit/openapi/version-processor.test.ts index 9084ab9c..eda9c7bd 100644 --- a/tests/unit/openapi/version-processor.test.ts +++ b/tests/unit/openapi/version-processor.test.ts @@ -132,6 +132,48 @@ describe("OpenAPI version processor", () => { }); }); + it("downgrades tuple schemas to valid OpenAPI 3.0 array item schemas", () => { + const finalized = getOpenApiVersionProcessor("3.0").finalize( + createDocumentFromTemplate({ + openapi: "3.2.0", + info: { title: "Fixture", version: "1.0.0" }, + components: { + schemas: { + Tupled: { + type: "array", + prefixItems: [{ type: "string" }, { type: "number" }], + items: false, + minItems: 2, + maxItems: 2, + }, + RestTupled: { + type: "array", + prefixItems: [{ type: "string" }], + items: { type: "number" }, + minItems: 1, + }, + }, + }, + }), + ); + + expect(finalized.components?.schemas?.Tupled).toEqual({ + type: "array", + items: { + oneOf: [{ type: "string" }, { type: "number" }], + }, + minItems: 2, + maxItems: 2, + }); + expect(finalized.components?.schemas?.RestTupled).toEqual({ + type: "array", + items: { + oneOf: [{ type: "string" }, { type: "number" }], + }, + minItems: 1, + }); + }); + it("preserves 3.2-only features and strips them for older versions", () => { const document = createDocumentFromTemplate({ openapi: "3.2.0", diff --git a/tests/unit/regressions/zod-pr-119-shape.test.ts b/tests/unit/regressions/zod-pr-119-shape.test.ts index b064bf6a..dbe05015 100644 --- a/tests/unit/regressions/zod-pr-119-shape.test.ts +++ b/tests/unit/regressions/zod-pr-119-shape.test.ts @@ -79,8 +79,8 @@ describe("Regressions › PR #119-style Zod edge cases", () => { ); expect(schema).toBeDefined(); if (!schema) return; - expect(schema).toMatchObject({ oneOf: expect.any(Array) }); - expect((schema as { oneOf: unknown[] }).oneOf.length).toBe(2); + expect(schema).toMatchObject({ anyOf: expect.any(Array) }); + expect((schema as { anyOf: unknown[] }).anyOf.length).toBe(2); }); it("export * re-exports still resolve through the barrel", () => { diff --git a/tests/unit/routes/app-router-strategy.test.ts b/tests/unit/routes/app-router-strategy.test.ts index a4988e56..aaa7e00a 100644 --- a/tests/unit/routes/app-router-strategy.test.ts +++ b/tests/unit/routes/app-router-strategy.test.ts @@ -43,6 +43,8 @@ describe("AppRouterStrategy", () => { expect(strategy.getRoutePath("./src/app/api/users/[id]/route.ts")).toBe("/users/{id}"); expect(strategy.getRoutePath("./src/app/api/(authenticated)/users/route.ts")).toBe("/users"); expect(strategy.getRoutePath("./src/app/api/files/[...path]/route.ts")).toBe("/files/{path}"); + expect(strategy.getRoutePath("./src/app/api/files/[[...path]]/route.ts")).toBe("/files/{path}"); + expect(strategy.getRoutePath("./src/app/api/@modal/users/route.ts")).toBe("/users"); }); it("supports custom apiDir values and windows-style paths", () => { @@ -175,7 +177,7 @@ describe("AppRouterStrategy", () => { */ export async function GET() {} - /** + /** * Update a user * @openapi */ @@ -291,48 +293,6 @@ describe("AppRouterStrategy", () => { ); }); - it("detects status fields on response option objects, including string-literal keys", () => { - strategy = new AppRouterStrategy(baseConfig); - const optsAst = parseTypeScriptFile(`const opts = { "status": 418 };`); - const decl = optsAst.program.body[0]; - if (!decl || decl.type !== "VariableDeclaration") { - throw new Error("Expected variable declaration"); - } - const init = decl.declarations[0]?.init; - if (!init || init.type !== "ObjectExpression") { - throw new Error("Expected object expression"); - } - const statusProp = init.properties[0]; - if (!statusProp || statusProp.type !== "ObjectProperty") { - throw new Error("Expected object property"); - } - // @ts-expect-error exercising private helper for string-literal property keys - expect(strategy.isPropertyNamed(statusProp, "status")).toBe(true); - // @ts-expect-error exercising private helper for literal status extraction - expect(strategy.getLiteralResponseStatusCode(init)).toBe("418"); - }); - - it("infers JSON body shapes for checker-backed response analysis", () => { - strategy = new AppRouterStrategy(baseConfig); - - // @ts-expect-error exercising inferSchemaFromJsonArgument branches - expect(strategy.inferSchemaFromJsonArgument(undefined)).toEqual({ type: "object" }); - // @ts-expect-error - expect(strategy.inferSchemaFromJsonArgument(t.nullLiteral())).toEqual({ type: "null" }); - // @ts-expect-error - expect( - strategy.inferSchemaFromJsonArgument(t.spreadElement(t.identifier("rest"))), - ).toBeUndefined(); - // @ts-expect-error - expect(strategy.inferSchemaFromJsonArgument(t.identifier("data"))).toEqual({ type: "object" }); - // @ts-expect-error - expect( - strategy.inferSchemaFromJsonArgument( - t.arrayExpression([t.spreadElement(t.identifier("items")), t.numericLiteral(1)]), - ), - ).toEqual({ type: "array", items: { type: "number" } }); - }); - it("infers query parameters read from URL searchParams", () => { strategy = new AppRouterStrategy(baseConfig); diff --git a/tests/unit/routes/route-diagnostics.test.ts b/tests/unit/routes/route-diagnostics.test.ts index 83b6db0c..2f805eb1 100644 --- a/tests/unit/routes/route-diagnostics.test.ts +++ b/tests/unit/routes/route-diagnostics.test.ts @@ -31,12 +31,14 @@ describe("RouteProcessor diagnostics", () => { // @ts-expect-error exercising private integration point in focused unit test routeProcessor.registerRoute("GET", "./src/app/api/users/[id]/route.ts", {}); - expect(collector.getAll()).toEqual([ - expect.objectContaining({ - code: "missing-path-params-type", - severity: "warning", - routePath: "/users/{id}", - }), - ]); + expect(collector.getAll()).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + code: "missing-path-params-type", + severity: "warning", + routePath: "/users/{id}", + }), + ]), + ); }); }); diff --git a/tests/unit/routes/router-strategy.test.ts b/tests/unit/routes/router-strategy.test.ts index 072b77d7..b03234b6 100644 --- a/tests/unit/routes/router-strategy.test.ts +++ b/tests/unit/routes/router-strategy.test.ts @@ -4,6 +4,6 @@ import { HTTP_METHODS } from "@workspace/openapi-core/routes/router-strategy.js" describe("router strategy shared constants", () => { it("exports the supported HTTP methods in declaration order", () => { - expect(HTTP_METHODS).toEqual(["GET", "POST", "PUT", "PATCH", "DELETE"]); + expect(HTTP_METHODS).toEqual(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]); }); }); diff --git a/tests/unit/routes/typescript-response-inference.test.ts b/tests/unit/routes/typescript-response-inference.test.ts index a1084df1..51d09056 100644 --- a/tests/unit/routes/typescript-response-inference.test.ts +++ b/tests/unit/routes/typescript-response-inference.test.ts @@ -284,6 +284,7 @@ export const SymbolFlags = { Alias: 1, Function: 2, Type: 4, Value: 8, Variable: export const TypeFlags = {}; export const ObjectFlags = {}; export class API { + close() {} updateSnapshot() { const project = { checker: {}, diff --git a/tests/unit/schema/core/schema-processors.test.ts b/tests/unit/schema/core/schema-processors.test.ts index 91bf14fb..b4325708 100644 --- a/tests/unit/schema/core/schema-processors.test.ts +++ b/tests/unit/schema/core/schema-processors.test.ts @@ -44,7 +44,7 @@ describe("Schema processors", () => { expect(processor.resolveSchema("StringOrNumberSchema")).toEqual( expect.objectContaining({ - oneOf: expect.any(Array), + anyOf: expect.any(Array), }), ); }); diff --git a/tests/unit/schema/typescript/features/objects.test.ts b/tests/unit/schema/typescript/features/objects.test.ts index 5197619c..52d2b6a7 100644 --- a/tests/unit/schema/typescript/features/objects.test.ts +++ b/tests/unit/schema/typescript/features/objects.test.ts @@ -82,4 +82,22 @@ describe("TypeScript features › object literals", () => { additionalProperties: { type: "number" }, }); }); + + it("Map and Set types emit object/unique-array schemas", () => { + expect(resolve("Map")).toMatchObject({ + type: "object", + additionalProperties: { type: "number" }, + }); + expect(resolve("Set")).toMatchObject({ + type: "array", + items: { type: "string" }, + uniqueItems: true, + }); + }); + + it("branded primitive intersections keep the base primitive shape", () => { + expect(resolve('string & { __brand: "UserId" }')).toEqual({ + type: "string", + }); + }); }); diff --git a/tests/unit/schema/typescript/helpers.test.ts b/tests/unit/schema/typescript/helpers.test.ts index cb5c28b2..cb9100dd 100644 --- a/tests/unit/schema/typescript/helpers.test.ts +++ b/tests/unit/schema/typescript/helpers.test.ts @@ -3,6 +3,7 @@ import { describe, expect, it } from "vitest"; import { createFormDataSchema, + createMultipartEncoding, createTypeReferenceFromString, detectContentType, extractKeysFromLiteralType, @@ -162,6 +163,10 @@ describe("TypeScript schema helpers", () => { expect(isDateNode(t.stringLiteral("not-a-date"))).toBe(false); expect(getExampleForParam("id", "string")).toBe("123"); + expect(getExampleForParam("organizationId", { type: "string", format: "uuid" })).toBe( + "123e4567-e89b-12d3-a456-426614174000", + ); + expect(getExampleForParam("count", "integer")).toBe(1); expect(getExampleForParam("count", "number")).toBe(1); expect(getExampleForParam("enabled", "boolean")).toBe(true); expect(getExampleForParam("date")).toBe("2023-01-01"); @@ -198,5 +203,25 @@ describe("TypeScript schema helpers", () => { }, }, }); + + expect( + createMultipartEncoding({ + type: "object", + properties: { + images: { + type: "array", + items: { + type: "string", + format: "binary", + "x-contentMediaTypes": ["image/png", "image/jpeg"], + }, + }, + }, + }), + ).toEqual({ + images: { + contentType: "image/png, image/jpeg", + }, + }); }); }); diff --git a/tests/unit/schema/typescript/schema-content.test.ts b/tests/unit/schema/typescript/schema-content.test.ts index 3bbf3121..c400cc55 100644 --- a/tests/unit/schema/typescript/schema-content.test.ts +++ b/tests/unit/schema/typescript/schema-content.test.ts @@ -36,14 +36,23 @@ describe("TypeScript schema content helpers", () => { it("creates path params, request params, and request bodies", () => { expect(createDefaultPathParamsSchema(["id", "slug"])).toEqual([ - expect.objectContaining({ name: "id", example: 123 }), + expect.objectContaining({ name: "id", schema: { type: "string" }, example: "123" }), expect.objectContaining({ name: "slug", example: "slug" }), ]); + expect(createDefaultPathParamsSchema(["organizationId"])[0]).toMatchObject({ + name: "organizationId", + schema: { type: "string" }, + }); expect(createRequestParamsSchema({})).toEqual([]); expect( createRequestParamsSchema( { properties: { + organizationId: { + type: "string", + format: "uuid", + required: true, + }, teamId: { type: "string", description: "Team ID", @@ -54,6 +63,16 @@ describe("TypeScript schema content helpers", () => { true, ), ).toEqual([ + { + in: "path", + name: "organizationId", + schema: { + type: "string", + format: "uuid", + }, + required: true, + example: "123e4567-e89b-12d3-a456-426614174000", + }, { in: "path", name: "teamId", @@ -100,6 +119,7 @@ describe("TypeScript schema content helpers", () => { $ref: "#/components/schemas/ProviderSchema", }, required: true, + example: "example", }, { in: "query", @@ -108,6 +128,7 @@ describe("TypeScript schema content helpers", () => { allOf: [{ $ref: "#/components/schemas/SafeRedirectPathSchema" }], }, required: false, + example: "example", }, { in: "query", @@ -123,6 +144,7 @@ describe("TypeScript schema content helpers", () => { required: false, style: "deepObject", explode: true, + example: "example", }, { in: "query", @@ -134,6 +156,7 @@ describe("TypeScript schema content helpers", () => { style: "form", explode: false, allowReserved: true, + example: "example", }, ]); expect(createRequestBodySchema({ type: "string" })).toEqual({ diff --git a/tests/unit/schema/typescript/schema-processor.test.ts b/tests/unit/schema/typescript/schema-processor.test.ts index 9c1e78da..d5aad07d 100644 --- a/tests/unit/schema/typescript/schema-processor.test.ts +++ b/tests/unit/schema/typescript/schema-processor.test.ts @@ -21,6 +21,9 @@ describe("SchemaProcessor", () => { expect(processor.getExampleForParam("userId")).toBe("123"); expect(processor.getExampleForParam("page", "number")).toBe(1); + expect(processor.getExampleForParam("organizationId", { type: "string", format: "uuid" })).toBe( + "123e4567-e89b-12d3-a456-426614174000", + ); expect(processor.getExampleForParam("isEnabled", "boolean")).toBe(true); expect(processor.detectContentType("AvatarUpload")).toBe("application/json"); expect(processor.detectContentType("MultipartFormDataPayload")).toBe("multipart/form-data"); @@ -54,8 +57,8 @@ describe("SchemaProcessor", () => { name: "id", in: "path", required: true, - schema: { type: "number" }, - example: 123, + schema: { type: "string" }, + example: "123", description: "Path parameter: id", }, { @@ -502,4 +505,36 @@ describe("SchemaProcessor", () => { }), }); }); + + it("redirects z.infer aliases to the Zod converter when enabled", () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), "nxog-zinfer-alias-")); + roots.push(root); + + fs.writeFileSync( + path.join(root, "schemas.ts"), + [ + 'import { z } from "zod";', + "", + "export const UserSchema = z.object({", + " id: z.string().uuid(),", + "});", + "", + "export type UserAlias = z.infer;", + ].join("\n"), + ); + + const processor = new SchemaProcessor(root, ["typescript", "zod"]); + const schema = processor.findSchemaDefinition("UserAlias", "response"); + + expect(schema).toEqual({ + type: "object", + properties: { + id: { + type: "string", + format: "uuid", + }, + }, + required: ["id"], + }); + }); }); diff --git a/tests/unit/schema/zod/compat.test.ts b/tests/unit/schema/zod/compat.test.ts index f0ad62d3..d652e2c5 100644 --- a/tests/unit/schema/zod/compat.test.ts +++ b/tests/unit/schema/zod/compat.test.ts @@ -4,10 +4,12 @@ import { ZOD_IMPORT_PATHS, isZodImportPath } from "@workspace/openapi-core/schem describe("zod compat helpers", () => { it("recognizes supported zod import paths", () => { - expect(ZOD_IMPORT_PATHS).toEqual(["zod", "zod/v3", "zod/v4"]); + expect(ZOD_IMPORT_PATHS).toEqual(["zod", "zod/v3", "zod/v4", "zod/mini", "zod/v4/mini"]); expect(isZodImportPath("zod")).toBe(true); expect(isZodImportPath("zod/v3")).toBe(true); expect(isZodImportPath("zod/v4")).toBe(true); + expect(isZodImportPath("zod/mini")).toBe(true); + expect(isZodImportPath("zod/v4/mini")).toBe(true); expect(isZodImportPath("zod/v5")).toBe(false); expect(isZodImportPath("./zod")).toBe(false); }); diff --git a/tests/unit/schema/zod/features/collections.test.ts b/tests/unit/schema/zod/features/collections.test.ts index 0ef865d6..1a34e6d3 100644 --- a/tests/unit/schema/zod/features/collections.test.ts +++ b/tests/unit/schema/zod/features/collections.test.ts @@ -70,6 +70,18 @@ describe("Zod features › collections", () => { }); }); + it("z.partialRecord(keyEnum, value) emits an object with typed additional properties", () => { + const schema = convert('z.partialRecord(z.enum(["a", "b"]), z.string())', roots); + expect(schema).toMatchObject({ + type: "object", + additionalProperties: { type: "string" }, + propertyNames: { + type: "string", + enum: ["a", "b"], + }, + }); + }); + it("z.set(T) / z.map(K, V) degrade gracefully to array / object schemas", () => { const setSchema = convert("z.set(z.string())", roots); expect(setSchema).toMatchObject({ type: "array", items: { type: "string" } }); diff --git a/tests/unit/schema/zod/features/enums.test.ts b/tests/unit/schema/zod/features/enums.test.ts index 749cc9db..8fdf91d4 100644 --- a/tests/unit/schema/zod/features/enums.test.ts +++ b/tests/unit/schema/zod/features/enums.test.ts @@ -34,6 +34,13 @@ describe("Zod features › enums", () => { expect(asEnum.enum?.slice().toSorted()).toEqual(asEnum.enum ? ["blue", "red"] : undefined); }); + it("z.enum object form preserves numeric values", () => { + expect(convert("z.enum({ One: 1, Two: 2 })", roots)).toEqual({ + type: "number", + enum: [1, 2], + }); + }); + it("enum chained with describe() keeps the values", () => { const schema = convert('z.enum(["a", "b"]).describe("Letters")', roots); expect(schema).toMatchObject({ diff --git a/tests/unit/schema/zod/features/modifiers.test.ts b/tests/unit/schema/zod/features/modifiers.test.ts index d95c3da1..18fa8542 100644 --- a/tests/unit/schema/zod/features/modifiers.test.ts +++ b/tests/unit/schema/zod/features/modifiers.test.ts @@ -11,6 +11,44 @@ describe("Zod features › modifiers", () => { expect(convert("z.string().optional()", roots)).toMatchObject({ type: "string" }); }); + it("z.optional(inner) processes the inner schema", () => { + expect(convert("z.optional(z.string())", roots)).toMatchObject({ type: "string" }); + }); + + it("z.nullable(inner) applies nullable to the inner schema", () => { + expect(convert("z.nullable(z.string())", roots)).toMatchObject({ + type: "string", + nullable: true, + }); + }); + + it("z.nullish(inner) applies nullable to the inner schema", () => { + expect(convert("z.nullish(z.string())", roots)).toMatchObject({ + type: "string", + nullable: true, + }); + }); + + it("functional wrappers affect object required tracking", () => { + const schema = convert( + `z.object({ + id: z.string(), + name: z.optional(z.string()), + deletedAt: z.nullable(z.iso.datetime()), + })`, + roots, + ); + expect(schema).toMatchObject({ + type: "object", + required: ["id", "deletedAt"], + properties: { + id: { type: "string" }, + name: { type: "string" }, + deletedAt: { type: "string", format: "date-time", nullable: true }, + }, + }); + }); + it(".nullable() sets nullable: true", () => { expect(convert("z.string().nullable()", roots)).toMatchObject({ type: "string", @@ -88,6 +126,9 @@ describe("Zod features › modifiers", () => { expect(convert("z.string().superRefine((v, ctx) => {})", roots)).toMatchObject({ type: "string", }); + expect(convert("z.string().check((v) => true)", roots)).toMatchObject({ + type: "string", + }); }); it(".pipe(schema) merges the piped schema onto the base", () => { @@ -95,6 +136,12 @@ describe("Zod features › modifiers", () => { expect(schema).toMatchObject({ type: "string", format: "email" }); }); + it(".overwrite() and .nonoptional() preserve the value schema", () => { + expect(convert("z.string().overwrite((v) => v.trim()).nonoptional()", roots)).toMatchObject({ + type: "string", + }); + }); + it(".describe() with a concrete example sets description", () => { expect(convert('z.string().describe("ISO 639-1 language code")', roots)).toMatchObject({ type: "string", @@ -196,5 +243,72 @@ describe("Zod features › modifiers", () => { }); expect(result).not.toHaveProperty("anyOf"); }); + + it("title and deprecated map from .meta()", () => { + expect(convert('z.string().meta({ title: "Label", deprecated: true })', roots)).toMatchObject( + { + type: "string", + title: "Label", + deprecated: true, + }, + ); + }); + }); + + it("z.extend(base, shape) merges object schemas", () => { + const schema = convert("z.extend(z.object({ name: z.string() }), { age: z.number() })", roots); + expect(schema).toMatchObject({ + type: "object", + required: ["name", "age"], + properties: { + name: { type: "string" }, + age: { type: "number" }, + }, + }); + }); + + it("functional wrappers mirror chain behavior", () => { + expect(convert("z.readonly(z.string())", roots)).toMatchObject({ + type: "string", + readOnly: true, + }); + expect(convert('z.default(z.string(), "hi")', roots)).toMatchObject({ + type: "string", + default: "hi", + }); + expect(convert('z.describe(z.number(), "count")', roots)).toMatchObject({ + type: "number", + description: "count", + }); + expect(convert('z.catch(z.string(), "fallback")', roots)).toMatchObject({ + type: "string", + default: "fallback", + }); + }); + + it(".check() with functional minLength/maxLength refinements", () => { + expect(convert("z.string().check(z.minLength(10), z.maxLength(100))", roots)).toMatchObject({ + type: "string", + minLength: 10, + maxLength: 100, + }); + }); + + it("z.union([T, z.undefined()]) treats undefined as optional semantics", () => { + const schema = convert( + `z.object({ + name: z.union([z.string(), z.undefined()]), + id: z.string(), + })`, + roots, + ); + expect(schema).toMatchObject({ + type: "object", + required: ["id"], + properties: { + name: { type: "string" }, + id: { type: "string" }, + }, + }); }); }); diff --git a/tests/unit/schema/zod/features/number-refinements.test.ts b/tests/unit/schema/zod/features/number-refinements.test.ts index 3f0236fd..10340e79 100644 --- a/tests/unit/schema/zod/features/number-refinements.test.ts +++ b/tests/unit/schema/zod/features/number-refinements.test.ts @@ -10,6 +10,28 @@ describe("Zod features › number refinements", () => { expect(convert("z.number().int()", roots)).toEqual({ type: "integer" }); }); + it("supports Zod 4 top-level numeric helpers", () => { + expect(convert("z.int()", roots)).toEqual({ type: "integer" }); + expect(convert("z.int32()", roots)).toEqual({ type: "integer", format: "int32" }); + expect(convert("z.int64()", roots)).toEqual({ type: "integer", format: "int64" }); + expect(convert("z.uint32()", roots)).toEqual({ + type: "integer", + minimum: 0, + maximum: 4294967295, + }); + expect(convert("z.uint64()", roots)).toEqual({ + type: "integer", + format: "int64", + minimum: 0, + }); + expect(convert("z.float32()", roots)).toEqual({ type: "number", format: "float" }); + expect(convert("z.float64()", roots)).toEqual({ type: "number", format: "double" }); + }); + + it("applies numeric refinements to top-level z.int()", () => { + expect(convert("z.int().min(0)", roots)).toEqual({ type: "integer", minimum: 0 }); + }); + it("min/max emit minimum/maximum", () => { expect(convert("z.number().min(1).max(10)", roots)).toMatchObject({ type: "number", @@ -18,6 +40,17 @@ describe("Zod features › number refinements", () => { }); }); + it("multipleOf()/step() emit multipleOf", () => { + expect(convert("z.number().multipleOf(0.5)", roots)).toEqual({ + type: "number", + multipleOf: 0.5, + }); + expect(convert("z.number().step(2)", roots)).toEqual({ + type: "number", + multipleOf: 2, + }); + }); + it("positive() encodes exclusive minimum 0", () => { const schema = convert("z.number().positive()", roots); expect(schema).toMatchObject({ type: "number", exclusiveMinimum: 0 }); @@ -61,4 +94,12 @@ describe("Zod features › number refinements", () => { maximum: 120, }); }); + + it("keeps the effective bound when exclusive and inclusive limits overlap", () => { + expect(convert("z.number().int().positive().safe()", roots)).toEqual({ + type: "integer", + exclusiveMinimum: 0, + maximum: 9007199254740991, + }); + }); }); diff --git a/tests/unit/schema/zod/features/object-modes.test.ts b/tests/unit/schema/zod/features/object-modes.test.ts index f8a3e6e1..eaf2b6ac 100644 --- a/tests/unit/schema/zod/features/object-modes.test.ts +++ b/tests/unit/schema/zod/features/object-modes.test.ts @@ -59,6 +59,18 @@ describe("Zod features › object modes", () => { }); }); + it("z.looseObject() emits additionalProperties: true", () => { + const schema = convert(`z.looseObject({ id: z.string() })`, roots); + expect(schema).toMatchObject({ + type: "object", + properties: { + id: { type: "string" }, + }, + required: ["id"], + additionalProperties: true, + }); + }); + it("z.strictObject() without arguments emits plain object", () => { const schema = convert(`z.strictObject({})`, roots); expect(schema).toMatchObject({ @@ -129,6 +141,13 @@ describe("Zod features › object modes", () => { expect((schema as { required: string[] }).required.toSorted()).toEqual(["id", "name"]); }); + it("keyof() emits an enum of object keys", () => { + expect(convert(`${base}.keyof()`, roots)).toEqual({ + type: "string", + enum: ["id", "name"], + }); + }); + it("deepPartial() strips required arrays recursively", () => { const schema = convert( `z.object({ inner: z.object({ a: z.string() }), b: z.number() }).deepPartial()`, diff --git a/tests/unit/schema/zod/features/primitives.test.ts b/tests/unit/schema/zod/features/primitives.test.ts index 13769b9c..22950b48 100644 --- a/tests/unit/schema/zod/features/primitives.test.ts +++ b/tests/unit/schema/zod/features/primitives.test.ts @@ -19,12 +19,51 @@ describe("Zod features › primitives", () => { ["z.never()", "z.never()", { not: {} }], ["z.any()", "z.any()", {}], ["z.unknown()", "z.unknown()", {}], + ["z.json()", "z.json()", {}], ["z.nan()", "z.nan()", { type: "number" }], + ["z.symbol()", "z.symbol()", { type: "string" }], ["z.file()", "z.file()", { type: "string", format: "binary" }], + [ + "z.file().mime().minSize().maxSize()", + 'z.file().mime("image/png").minSize(1).maxSize(1024)', + { + type: "string", + format: "binary", + contentMediaType: "image/png", + minLength: 1, + maxLength: 1024, + }, + ], + [ + "z.file().mime([...])", + 'z.file().mime(["image/png", "image/jpeg"])', + { + type: "string", + format: "binary", + "x-contentMediaTypes": ["image/png", "image/jpeg"], + }, + ], + [ + "z.array(z.file())", + 'z.array(z.file().mime(["image/png", "image/jpeg"]))', + { + type: "array", + items: { + type: "string", + format: "binary", + "x-contentMediaTypes": ["image/png", "image/jpeg"], + }, + }, + ], ['z.literal("hello")', 'z.literal("hello")', { type: "string", enum: ["hello"] }], ["z.literal(42)", "z.literal(42)", { type: "integer", enum: [42] }], ["z.literal(true)", "z.literal(true)", { type: "boolean", enum: [true] }], ["z.literal(null)", "z.literal(null)", { type: "null", enum: [null] }], + [ + "z.literal([...])", + 'z.literal(["draft", "published"])', + { type: "string", enum: ["draft", "published"] }, + ], ]; it.each(cases)("%s", (_label, source, expected) => { diff --git a/tests/unit/schema/zod/features/string-formats.test.ts b/tests/unit/schema/zod/features/string-formats.test.ts index 026522d2..008d32bf 100644 --- a/tests/unit/schema/zod/features/string-formats.test.ts +++ b/tests/unit/schema/zod/features/string-formats.test.ts @@ -10,11 +10,20 @@ describe("Zod features › string formats", () => { ["email (method)", "z.string().email()", { type: "string", format: "email" }], ["url (method)", "z.string().url()", { type: "string", format: "uri" }], ["uuid (method)", "z.string().uuid()", { type: "string", format: "uuid" }], + ["uuidv4 (method)", "z.string().uuidv4()", { type: "string", format: "uuid" }], + ["uuidv6 (method)", "z.string().uuidv6()", { type: "string", format: "uuid" }], + ["uuidv7 (method)", "z.string().uuidv7()", { type: "string", format: "uuid" }], ["cuid (method)", "z.string().cuid()", { type: "string", format: "cuid" }], ["cuid2", "z.string().cuid2()", { type: "string", format: "cuid2" }], ["ulid", "z.string().ulid()", { type: "string", format: "ulid" }], ["nanoid", "z.string().nanoid()", { type: "string", format: "nanoid" }], + ["xid", "z.string().xid()", { type: "string", format: "xid" }], + ["ksuid", "z.string().ksuid()", { type: "string", format: "ksuid" }], ["jwt", "z.string().jwt()", { type: "string", format: "jwt" }], + ["hostname", "z.string().hostname()", { type: "string", format: "hostname" }], + ["httpUrl", "z.string().httpUrl()", { type: "string", format: "uri" }], + ["hex", "z.string().hex()", { type: "string", format: "hex" }], + ["hash", "z.string().hash('sha256')", { type: "string", format: "hash" }], ["base64", "z.string().base64()", { type: "string", format: "base64" }], ["base64url", "z.string().base64url()", { type: "string", format: "base64url" }], ["emoji", "z.string().emoji()", { type: "string", format: "emoji" }], @@ -50,6 +59,12 @@ describe("Zod features › string formats", () => { }); }); + it("string normalization methods are no-ops for wire shape", () => { + expect(convert("z.string().trim().toLowerCase().toUpperCase()", roots)).toEqual({ + type: "string", + }); + }); + it("startsWith/endsWith/includes produce a pattern", () => { const starts = convert('z.string().startsWith("foo")', roots); expect(starts).toMatchObject({ type: "string" }); diff --git a/tests/unit/schema/zod/features/unions-and-intersections.test.ts b/tests/unit/schema/zod/features/unions-and-intersections.test.ts index 42a22c94..8540ba53 100644 --- a/tests/unit/schema/zod/features/unions-and-intersections.test.ts +++ b/tests/unit/schema/zod/features/unions-and-intersections.test.ts @@ -6,10 +6,10 @@ describe("Zod features › unions and intersections", () => { const roots: string[] = []; afterEach(() => cleanup(roots)); - it("z.union([a, b]) emits oneOf", () => { + it("z.union([a, b]) emits anyOf", () => { const schema = convert("z.union([z.string(), z.number()])", roots); expect(schema).toEqual({ - oneOf: [{ type: "string" }, { type: "number" }], + anyOf: [{ type: "string" }, { type: "number" }], }); }); @@ -21,10 +21,10 @@ describe("Zod features › unions and intersections", () => { }); }); - it("z.union over mixed types stays as oneOf", () => { + it("z.union over mixed types stays as anyOf", () => { const schema = convert('z.union([z.literal("a"), z.number(), z.boolean()])', roots); expect(schema).toMatchObject({ - oneOf: expect.arrayContaining([ + anyOf: expect.arrayContaining([ expect.objectContaining({ enum: ["a"] }), expect.objectContaining({ type: "number" }), expect.objectContaining({ type: "boolean" }), @@ -64,10 +64,10 @@ describe("Zod features › unions and intersections", () => { }); }); - it(".or() produces oneOf with the alternative", () => { + it(".or() produces anyOf with the alternative", () => { const schema = convert("z.string().or(z.number())", roots); expect(schema).toEqual({ - oneOf: [{ type: "string" }, { type: "number" }], + anyOf: [{ type: "string" }, { type: "number" }], }); }); @@ -96,13 +96,23 @@ describe("Zod features › unions and intersections", () => { expect(schema).toEqual({ type: "integer", enum: [1, 2, 3] }); }); - it("z.union over mixed integer and float literals stays as oneOf", () => { + it("z.union over mixed integer and float literals stays as anyOf", () => { const schema = convert("z.union([z.literal(1), z.literal(2.5)])", roots); expect(schema).toMatchObject({ - oneOf: expect.arrayContaining([ + anyOf: expect.arrayContaining([ expect.objectContaining({ type: "integer", enum: [1] }), expect.objectContaining({ type: "number", enum: [2.5] }), ]), }); }); + + it("z.union over overlapping string formats emits anyOf", () => { + const schema = convert("z.union([z.cuid2(), z.uuid()])", roots); + expect(schema).toEqual({ + anyOf: [ + { type: "string", format: "cuid2" }, + { type: "string", format: "uuid" }, + ], + }); + }); }); diff --git a/tests/unit/schema/zod/import-processor.test.ts b/tests/unit/schema/zod/import-processor.test.ts index 091d3130..42b61093 100644 --- a/tests/unit/schema/zod/import-processor.test.ts +++ b/tests/unit/schema/zod/import-processor.test.ts @@ -23,9 +23,19 @@ describe("processImports", () => { }, drizzleZodImports: ["drizzleDefault", "createInsertSchema", "makeSelect"], zodLocalName: "z", + zodImportSource: "zod", }); }); + it("captures zod/mini import source", () => { + const ast = parseTypeScriptFile(` + import * as z from "zod/mini"; + `); + const result = processImports(ast); + expect(result.zodLocalName).toBe("z"); + expect(result.zodImportSource).toBe("zod/mini"); + }); + it("captures aliased z import local names", () => { const ast = parseTypeScriptFile(` import { z as zod } from "zod"; diff --git a/tests/unit/schema/zod/node-helpers.test.ts b/tests/unit/schema/zod/node-helpers.test.ts index f84898ad..77e10f50 100644 --- a/tests/unit/schema/zod/node-helpers.test.ts +++ b/tests/unit/schema/zod/node-helpers.test.ts @@ -6,6 +6,8 @@ import { extractDescriptionFromArguments, hasOptionalMethod, isOptionalCall, + isOptionalUnionCall, + isUndefinedBranchNode, processZodDiscriminatedUnion, processZodIntersection, processZodLiteral, @@ -208,9 +210,18 @@ describe("Zod node helpers", () => { ), ).toBe("Documented"); expect(escapeRegExp("a+b")).toBe("a\\+b"); + expect(isOptionalCall(getFirstInitializer("z.optional(z.string())") as t.CallExpression)).toBe( + true, + ); expect(isOptionalCall(getFirstInitializer("z.string().optional()") as t.CallExpression)).toBe( true, ); + expect( + hasOptionalMethod(getFirstInitializer("z.nullish(z.string())") as t.CallExpression), + ).toBe(true); + expect( + hasOptionalMethod(getFirstInitializer("z.nullable(z.string())") as t.CallExpression), + ).toBe(false); expect( hasOptionalMethod( getFirstInitializer("z.string().nullable().optional()") as t.CallExpression, @@ -225,6 +236,12 @@ describe("Zod node helpers", () => { expect(isOptionalCall(getFirstInitializer("z.string().nullable()") as t.CallExpression)).toBe( false, ); + expect( + isOptionalUnionCall( + getFirstInitializer("z.union([z.string(), z.undefined()])") as t.CallExpression, + ), + ).toBe(true); + expect(isUndefinedBranchNode(getFirstInitializer("z.undefined()"))).toBe(true); }); it("processes primitive zod nodes through the extracted helper", () => { diff --git a/tests/unit/schema/zod/zod-converter-helpers.test.ts b/tests/unit/schema/zod/zod-converter-helpers.test.ts index 424db677..e2035591 100644 --- a/tests/unit/schema/zod/zod-converter-helpers.test.ts +++ b/tests/unit/schema/zod/zod-converter-helpers.test.ts @@ -642,7 +642,7 @@ describe("ZodSchemaConverter helper seams", () => { description: "Base schema", }); expect(converter.processZodChain(getFirstInitializer("z.string().or(z.number())"))).toEqual({ - oneOf: [{ type: "string" }, { type: "number" }], + anyOf: [{ type: "string" }, { type: "number" }], }); expect(converter.processZodChain(getFirstInitializer("z.string().and(z.number())"))).toEqual({ allOf: [{ type: "string" }, { type: "number" }], diff --git a/tests/unit/schema/zod/zod-converter.test.ts b/tests/unit/schema/zod/zod-converter.test.ts index d73513c1..1f65795c 100644 --- a/tests/unit/schema/zod/zod-converter.test.ts +++ b/tests/unit/schema/zod/zod-converter.test.ts @@ -5,6 +5,7 @@ import path from "node:path"; import * as t from "@babel/types"; import { afterEach, describe, expect, it } from "vitest"; +import { DiagnosticsCollector } from "@workspace/openapi-core/diagnostics/collector.js"; import { ZodSchemaConverter } from "@workspace/openapi-core/schema/zod/zod-converter.js"; import { parseTypeScriptFile } from "@workspace/openapi-core/shared/utils.js"; @@ -45,8 +46,9 @@ describe("ZodSchemaConverter", () => { const routeFiles: string[] = []; converter.findRouteFilesInDir(root, routeFiles); - expect(routeFiles.toSorted()).toEqual( - [path.join(root, "api", "route.ts"), path.join(nestedDir, "user-api.ts")].toSorted(), + const sortPaths = (left: string, right: string) => left.localeCompare(right); + expect(routeFiles.toSorted(sortPaths)).toEqual( + [path.join(root, "api", "route.ts"), path.join(nestedDir, "user-api.ts")].toSorted(sortPaths), ); const schemaFile = path.join(root, "schemas.ts"); @@ -144,6 +146,111 @@ describe("ZodSchemaConverter", () => { }); }); + it("emits diagnostics for unknown Zod helpers and chain methods", () => { + const diagnostics = new DiagnosticsCollector(); + const converter = new ZodSchemaConverter(process.cwd(), undefined, undefined, diagnostics); + + expect(converter.processZodNode(parseInitializer("z.mystery()"))).toEqual({ + type: "string", + }); + expect(converter.processZodNode(parseInitializer("z.string().mysteryMethod()"))).toEqual({ + type: "string", + }); + + expect(diagnostics.getAll()).toEqual([ + expect.objectContaining({ + code: "unknown-zod-helper", + severity: "warning", + metadata: { name: "mystery" }, + }), + expect.objectContaining({ + code: "unknown-zod-method", + severity: "warning", + metadata: { name: "mysteryMethod" }, + }), + ]); + }); + + it("emits a pattern for static z.templateLiteral schemas", () => { + const converter = new ZodSchemaConverter(process.cwd()); + + expect( + converter.processZodNode( + parseInitializer('z.templateLiteral(["v", z.literal(1), "-", z.number()])'), + ), + ).toEqual({ + type: "string", + pattern: "^v(1)--?\\d+(?:\\.\\d+)?$", + }); + }); + + it("preserves statically resolvable computed object keys", () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), "nxog-zod-computed-")); + roots.push(root); + const schemaFile = path.join(root, "schemas.ts"); + fs.writeFileSync( + schemaFile, + `import { z } from "zod/v4"; + +const displayNameKey = "displayName" as const; + +export const UserSchema = z.object({ + [displayNameKey]: z.string(), +}); +`, + ); + + const converter = new ZodSchemaConverter(root); + const schema = converter.convertZodSchemaToOpenApi("UserSchema"); + + expect(schema).toMatchObject({ + type: "object", + properties: { + displayName: { + type: "string", + }, + }, + required: ["displayName"], + }); + }); + + it("expands factory calls with destructured object parameters", () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), "nxog-zod-factory-destructured-")); + roots.push(root); + const schemaFile = path.join(root, "schemas.ts"); + fs.writeFileSync( + schemaFile, + `import { z } from "zod/v4"; + +function createEnvelope({ data }: { data: z.ZodTypeAny }) { + return z.object({ + ok: z.boolean(), + data, + }); +} + +export const EnvelopeSchema = createEnvelope({ + data: z.string(), +}); +`, + ); + + const converter = new ZodSchemaConverter(root); + const schema = converter.convertZodSchemaToOpenApi("EnvelopeSchema"); + + expect(schema).toMatchObject({ + type: "object", + properties: { + ok: { + type: "boolean", + }, + data: { + type: "string", + }, + }, + }); + }); + it("supports Zod 4 top-level helpers and preserves the base schema through pipelines", () => { const converter = new ZodSchemaConverter(process.cwd()); @@ -260,7 +367,6 @@ describe("ZodSchemaConverter", () => { converter.processZodNode(parseInitializer("z.number().int().positive().safe()")), ).toEqual({ type: "integer", - minimum: -9007199254740991, exclusiveMinimum: 0, maximum: 9007199254740991, }); diff --git a/tests/unit/shared/native-typescript-adapter.test.ts b/tests/unit/shared/native-typescript-adapter.test.ts index 22f24547..a076cd0e 100644 --- a/tests/unit/shared/native-typescript-adapter.test.ts +++ b/tests/unit/shared/native-typescript-adapter.test.ts @@ -212,6 +212,7 @@ function createFakeRuntime(): FakeRuntime { class FakeAPI { constructor(public options?: { cwd?: string }) {} + close(): void {} updateSnapshot(_params?: { openProject?: string }): FakeSnapshot { return snapshot; } @@ -772,6 +773,126 @@ describe("NativeTypeScriptAdapter", () => { expect(noContent?.source).toBe("typescript"); }); + it("falls back to inline schemas when Response.json generic resolves to __object", () => { + const temp = setupTempProject(); + const routeFile = temp.routeFile; + + const jsonReturn = retStmt( + callExpr(propAccess(id("Response"), id("json")), [ + objLit([ + propAssign(id("ok"), keyword("TrueKeyword")), + propAssign(id("total"), numLit("2")), + ]), + objLit([propAssign(id("status"), numLit("201"))]), + ]), + ); + const body = node("Block"); + withForEachChild(body, [jsonReturn]); + + const getFn = fnDecl("GET", body); + const sourceFile = node("FunctionDeclaration"); + sourceFile.statements = [getFn]; + sourceFile.getSourceFile = () => ({ fileName: routeFile }); + temp.fake.setSourceFile(routeFile, sourceFile); + + const bodyType = makeType({ + flags: 0, + label: "{ ok: boolean; total: number }", + properties: [ + { + name: "ok", + flags: 0, + type: makeType({ flags: TypeFlags.BooleanLike, label: "boolean" }), + }, + { + name: "total", + flags: 0, + type: makeType({ flags: TypeFlags.NumberLike, label: "number" }), + }, + ], + }); + const responseType = makeType({ + flags: 0, + label: "Response<__object>", + typeArguments: [makeType({ flags: 0, label: "__object", symbolName: "__object" })], + }); + + temp.fake.setChecker({ + getTypeAtLocation(candidate: unknown): FakeType { + const nodeArg = candidate as FakeNode; + if ( + nodeArg?.kind === SyntaxKind.CallExpression && + nodeArg.expression?.name?.text === "json" + ) { + return responseType; + } + if (nodeArg?.kind === SyntaxKind.ObjectLiteralExpression) { + return bodyType; + } + return makeType({ flags: 0, label: "object" }); + }, + getTypeArguments(type: FakeType): FakeType[] { + return type.typeArguments ?? []; + }, + getPropertiesOfType(type: FakeType): { + name: string; + flags: number; + type: FakeType; + valueDeclaration?: FakeNode; + declarations?: FakeNode[]; + }[] { + return (type.properties ?? []).map((property) => ({ + name: property.name, + flags: property.flags, + type: property.type, + valueDeclaration: stubDeclaration(routeFile), + declarations: [stubDeclaration(routeFile)], + })); + }, + getTypeOfSymbol(symbol: { type?: FakeType }): FakeType { + return ( + (symbol.type as FakeType) ?? makeType({ flags: TypeFlags.StringLike, label: "string" }) + ); + }, + getTypeOfSymbolAtLocation(_symbol: unknown, declaration: FakeNode): FakeType { + const propertyName = (declaration as FakeNode & { name?: FakeNode }).name?.text; + if (propertyName === "ok") { + return makeType({ flags: TypeFlags.BooleanLike, label: "boolean" }); + } + if (propertyName === "total") { + return makeType({ flags: TypeFlags.NumberLike, label: "number" }); + } + return makeType({ flags: 0, label: "object" }); + }, + typeToString(type: FakeType): string { + return type.label ?? "object"; + }, + }); + + const adapter = createNativeTypeScriptAdapter({ + packagePath: temp.root, + runtime: temp.fake.runtime, + version: "7.0.1-rc", + }); + + const results = adapter.inferResponsesForExports(routeFile, ["GET"]); + const response = results.get("GET")?.responses[0]; + + expect(response).toEqual({ + statusCode: "201", + contentType: "application/json", + source: "typescript", + schema: { + type: "object", + properties: { + ok: { type: "boolean" }, + total: { type: "number" }, + }, + required: ["ok", "total"], + }, + }); + }); + it("falls back to signature inference for functions without return statements", () => { const temp = setupTempProject(); const routeFile = temp.routeFile; @@ -1135,6 +1256,27 @@ describe("NativeTypeScriptAdapter", () => { expect(adapter.resolveModule("unmapped-module", temp.routeFile)).toBeNull(); }); + + it("falls back to Node resolution for bare package specifiers", () => { + const temp = setupTempProject(); + const packageRoot = path.join(temp.root, "node_modules", "fixture-package"); + fs.mkdirSync(packageRoot, { recursive: true }); + fs.writeFileSync( + path.join(packageRoot, "package.json"), + JSON.stringify({ name: "fixture-package", exports: "./index.js", type: "module" }), + ); + fs.writeFileSync(path.join(packageRoot, "index.js"), "export const value = 1;\n"); + temp.fake.setProject({ paths: {} }); + const adapter = createNativeTypeScriptAdapter({ + packagePath: temp.root, + runtime: temp.fake.runtime, + version: "7.0.2", + }); + + expect(fs.realpathSync(adapter.resolveModule("fixture-package", temp.routeFile) ?? "")).toBe( + fs.realpathSync(path.join(packageRoot, "index.js")), + ); + }); }); describe("project lifecycle", () => { @@ -1154,10 +1296,7 @@ describe("NativeTypeScriptAdapter", () => { const first = adapter.resolveValueReference("value", temp.routeFile); expect(first.diagnostic?.code).toBe("example-reference-unresolved"); - adapter.clear(); - - const second = adapter.resolveValueReference("value", temp.routeFile); - expect(second.diagnostic?.code).toBe("example-reference-unresolved"); + expect(() => adapter.clear()).not.toThrow(); }); it("invalidates cached projects when the source file changes", () => { diff --git a/tests/unit/shared/resolve-annotation-type-name.test.ts b/tests/unit/shared/resolve-annotation-type-name.test.ts new file mode 100644 index 00000000..f48aaa47 --- /dev/null +++ b/tests/unit/shared/resolve-annotation-type-name.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from "vitest"; + +import { resolveAnnotationTypeName } from "../../../packages/openapi-core/src/shared/utils.js"; + +describe("resolveAnnotationTypeName", () => { + it("treats empty JSDoc annotation values as absent so inferred types can apply", () => { + expect(resolveAnnotationTypeName("", "organizationParamsSchema")).toBe( + "organizationParamsSchema", + ); + expect(resolveAnnotationTypeName(" ", "QuerySchema")).toBe("QuerySchema"); + }); + + it("prefers explicit annotation values over inferred fallbacks", () => { + expect(resolveAnnotationTypeName("ExplicitParams", "InferredParams")).toBe("ExplicitParams"); + }); +}); diff --git a/tests/unit/shared/typescript-project.test.ts b/tests/unit/shared/typescript-project.test.ts index 4061415c..2fe369a6 100644 --- a/tests/unit/shared/typescript-project.test.ts +++ b/tests/unit/shared/typescript-project.test.ts @@ -100,6 +100,7 @@ export const SymbolFlags = { Alias: 1, Function: 2, Type: 4, Value: 8, Variable: export const TypeFlags = {}; export const ObjectFlags = {}; export class API { + close() {} updateSnapshot() { const project = { checker: {}, diff --git a/tests/unit/shared/typescript-runtime.test.ts b/tests/unit/shared/typescript-runtime.test.ts index 2da96f5b..6094029e 100644 --- a/tests/unit/shared/typescript-runtime.test.ts +++ b/tests/unit/shared/typescript-runtime.test.ts @@ -43,7 +43,7 @@ describe("TypeScript runtime adapter", () => { const runtime = resolveTypeScriptRuntime(sourceFile); - expect(runtime.version).toMatch(/^5\.9\./); + expect(runtime.version).toBe("6.0.2"); expect(runtime.packagePath).not.toContain(root); expect(runtime.support).toBe("supported"); }); @@ -88,6 +88,23 @@ describe("TypeScript runtime adapter", () => { ); }); + it("falls back to the bundled TypeScript 6 API when a TypeScript 7 package has no native exports", () => { + const root = createTempRoot("nxog-ts-runtime-native-missing-"); + writeMockTypeScriptPackageWithoutApi(root, "7.0.2"); + const sourceFile = path.join(root, "src", "route.ts"); + + const runtime = resolveTypeScriptRuntime(sourceFile); + + expect(runtime.version).toBe("6.0.2"); + expect(runtime.requestedVersion).toBe("7.0.2"); + expect(fs.realpathSync(runtime.requestedPackagePath ?? "")).toBe( + fs.realpathSync(path.join(root, "node_modules", "typescript")), + ); + expect(runtime.fallbackReason).toContain("does not expose the native compiler API"); + expect(runtime.ts).toBeDefined(); + expect(runtime.native).toBeUndefined(); + }); + function createTempRoot(prefix: string) { const root = fs.mkdtempSync(path.join(os.tmpdir(), prefix)); roots.push(root); @@ -135,3 +152,19 @@ function writeMockTypeScriptNativePackage(root: string, version: string) { "export const SyntaxKind = {};\n", ); } + +function writeMockTypeScriptPackageWithoutApi(root: string, version: string) { + const packageRoot = path.join(root, "node_modules", "typescript"); + fs.mkdirSync(packageRoot, { recursive: true }); + fs.writeFileSync( + path.join(packageRoot, "package.json"), + JSON.stringify({ + name: "typescript", + version, + type: "module", + exports: { + "./package.json": "./package.json", + }, + }), + ); +} diff --git a/tests/unit/workspace/turbo-scripts.test.ts b/tests/unit/workspace/turbo-scripts.test.ts index 541951a3..a3ae8039 100644 --- a/tests/unit/workspace/turbo-scripts.test.ts +++ b/tests/unit/workspace/turbo-scripts.test.ts @@ -51,7 +51,7 @@ describe("workspace Turbo script ownership", () => { scripts: Record; }; - expect(packageJson.scripts.build).toBe("turbo run build"); + expect(packageJson.scripts.build).toBe("turbo run build --concurrency=100%"); expect(packageJson.scripts.check).toContain("pnpm exec turbo run check"); expect(packageJson.scripts.test).toContain("pnpm exec turbo run test:unit"); expect(packageJson.scripts.test).toContain("pnpm exec turbo run test:integration"); diff --git a/tsconfig.tooling.json b/tsconfig.tooling.json index 7f947e4e..17f78a65 100644 --- a/tsconfig.tooling.json +++ b/tsconfig.tooling.json @@ -5,7 +5,8 @@ "allowImportingTsExtensions": true, "module": "ESNext", "moduleResolution": "Bundler", - "noEmit": true + "noEmit": true, + "types": ["node"] }, "include": [ "commitlint.config.mts", diff --git a/turbo.json b/turbo.json index db9820bc..8937a043 100644 --- a/turbo.json +++ b/turbo.json @@ -6,8 +6,11 @@ "COVERAGE_SCOPE", "E2E_APP", "FORCE_COLOR", + "GENERATOR_BENCH_ITERATIONS", + "GENERATOR_BENCH_OUTPUT", "NEXT_OPENAPI_GEN_TIMING", - "NODE_ENV" + "NODE_ENV", + "PATH" ], "tasks": { "//#knip": { @@ -60,7 +63,18 @@ }, "generate": { "dependsOn": ["^build"], - "outputs": [] + "env": ["OPENAPI_GEN_CACHE"], + "inputs": [ + "$TURBO_DEFAULT$", + "next.openapi.json", + "openapi-gen.config.json", + "openapi-gen.config.ts", + "openapi-gen.config.mts", + "next-openapi.config.ts", + "next-openapi.config.mts", + "src/**" + ], + "outputs": ["public/openapi.json", ".openapi-gen/**"] }, "lint": { "dependsOn": ["transit"],