From bdde22e6acc1c3759f68b129c288e6a99e50cbb5 Mon Sep 17 00:00:00 2001 From: actions Date: Tue, 18 Jul 2023 17:34:20 +0000 Subject: [PATCH] Adding deno distribution files and moving files from /dist to / --- .github/workflows/ci.yaml | 161 ---------------- axios/createAxiosSharedClient.d.ts | 6 + axios/createAxiosSharedClient.js | 116 +++++++++++ axios/createAxiosSharedClient.js.map | 1 + axios/index.d.ts | 1 + axios/index.js | 6 + axios/index.js.map | 1 + configureCreateHttpClient.d.ts | 25 +++ configureCreateHttpClient.js | 25 +++ configureCreateHttpClient.js.map | 1 + createCustomSharedClient.d.ts | 3 + createCustomSharedClient.js | 12 ++ createCustomSharedClient.js.map | 1 + defineRoutes.d.ts | 35 ++++ defineRoutes.js | 62 ++++++ defineRoutes.js.map | 1 + esm/axios/createAxiosSharedClient.d.ts | 6 + esm/axios/createAxiosSharedClient.mjs | 111 +++++++++++ esm/axios/createAxiosSharedClient.mjs.map | 1 + esm/axios/index.d.ts | 1 + esm/axios/index.mjs | 2 + esm/axios/index.mjs.map | 1 + esm/configureCreateHttpClient.d.ts | 25 +++ esm/configureCreateHttpClient.mjs | 21 ++ esm/configureCreateHttpClient.mjs.map | 1 + esm/createCustomSharedClient.d.ts | 3 + esm/createCustomSharedClient.mjs | 8 + esm/createCustomSharedClient.mjs.map | 1 + esm/defineRoutes.d.ts | 35 ++++ esm/defineRoutes.mjs | 56 ++++++ esm/defineRoutes.mjs.map | 1 + esm/express/createExpressSharedRouter.d.ts | 8 + esm/express/createExpressSharedRouter.mjs | 68 +++++++ esm/express/createExpressSharedRouter.mjs.map | 1 + esm/express/index.d.ts | 1 + esm/express/index.mjs | 2 + esm/express/index.mjs.map | 1 + esm/fetch/createFetchSharedClient.d.ts | 13 ++ esm/fetch/createFetchSharedClient.mjs | 127 ++++++++++++ esm/fetch/createFetchSharedClient.mjs.map | 1 + esm/fetch/index.d.ts | 1 + esm/fetch/index.mjs | 2 + esm/fetch/index.mjs.map | 1 + esm/fetch/queryParamsToString.d.ts | 8 + esm/fetch/queryParamsToString.mjs | 33 ++++ esm/fetch/queryParamsToString.mjs.map | 1 + esm/index.d.ts | 7 + esm/index.mjs | 5 + esm/index.mjs.map | 1 + esm/openapi/createOpenApiGenerator.d.ts | 49 +++++ esm/openapi/createOpenApiGenerator.mjs | 147 ++++++++++++++ esm/openapi/createOpenApiGenerator.mjs.map | 1 + esm/openapi/index.d.ts | 1 + esm/openapi/index.mjs | 2 + esm/openapi/index.mjs.map | 1 + esm/pathParameters.d.ts | 19 ++ esm/pathParameters.mjs | 11 ++ esm/pathParameters.mjs.map | 1 + .../createSupertestSharedClient.d.ts | 5 + esm/supertest/createSupertestSharedClient.mjs | 77 ++++++++ .../createSupertestSharedClient.mjs.map | 1 + esm/supertest/index.d.ts | 1 + esm/supertest/index.mjs | 2 + esm/supertest/index.mjs.map | 1 + esm/tsconfig.esm.tsbuildinfo | 1 + esm/validations.d.ts | 24 +++ esm/validations.mjs | 100 ++++++++++ esm/validations.mjs.map | 1 + express/createExpressSharedRouter.d.ts | 8 + express/createExpressSharedRouter.js | 72 +++++++ express/createExpressSharedRouter.js.map | 1 + express/index.d.ts | 1 + express/index.js | 6 + express/index.js.map | 1 + fetch/createFetchSharedClient.d.ts | 13 ++ fetch/createFetchSharedClient.js | 132 +++++++++++++ fetch/createFetchSharedClient.js.map | 1 + fetch/index.d.ts | 1 + fetch/index.js | 6 + fetch/index.js.map | 1 + fetch/queryParamsToString.d.ts | 8 + fetch/queryParamsToString.js | 37 ++++ fetch/queryParamsToString.js.map | 1 + index.d.ts | 7 + index.js | 14 ++ index.js.map | 1 + openapi/createOpenApiGenerator.d.ts | 49 +++++ openapi/createOpenApiGenerator.js | 151 +++++++++++++++ openapi/createOpenApiGenerator.js.map | 1 + openapi/index.d.ts | 1 + openapi/index.js | 6 + openapi/index.js.map | 1 + package.json | 181 ++++++++++++++---- pathParameters.d.ts | 19 ++ pathParameters.js | 16 ++ pathParameters.js.map | 1 + supertest/createSupertestSharedClient.d.ts | 5 + supertest/createSupertestSharedClient.js | 82 ++++++++ supertest/createSupertestSharedClient.js.map | 1 + supertest/index.d.ts | 1 + supertest/index.js | 6 + supertest/index.js.map | 1 + tsconfig.tsbuildinfo | 1 + validations.d.ts | 24 +++ validations.js | 105 ++++++++++ validations.js.map | 1 + 106 files changed, 2219 insertions(+), 201 deletions(-) delete mode 100644 .github/workflows/ci.yaml create mode 100644 axios/createAxiosSharedClient.d.ts create mode 100644 axios/createAxiosSharedClient.js create mode 100644 axios/createAxiosSharedClient.js.map create mode 100644 axios/index.d.ts create mode 100644 axios/index.js create mode 100644 axios/index.js.map create mode 100644 configureCreateHttpClient.d.ts create mode 100644 configureCreateHttpClient.js create mode 100644 configureCreateHttpClient.js.map create mode 100644 createCustomSharedClient.d.ts create mode 100644 createCustomSharedClient.js create mode 100644 createCustomSharedClient.js.map create mode 100644 defineRoutes.d.ts create mode 100644 defineRoutes.js create mode 100644 defineRoutes.js.map create mode 100644 esm/axios/createAxiosSharedClient.d.ts create mode 100644 esm/axios/createAxiosSharedClient.mjs create mode 100644 esm/axios/createAxiosSharedClient.mjs.map create mode 100644 esm/axios/index.d.ts create mode 100644 esm/axios/index.mjs create mode 100644 esm/axios/index.mjs.map create mode 100644 esm/configureCreateHttpClient.d.ts create mode 100644 esm/configureCreateHttpClient.mjs create mode 100644 esm/configureCreateHttpClient.mjs.map create mode 100644 esm/createCustomSharedClient.d.ts create mode 100644 esm/createCustomSharedClient.mjs create mode 100644 esm/createCustomSharedClient.mjs.map create mode 100644 esm/defineRoutes.d.ts create mode 100644 esm/defineRoutes.mjs create mode 100644 esm/defineRoutes.mjs.map create mode 100644 esm/express/createExpressSharedRouter.d.ts create mode 100644 esm/express/createExpressSharedRouter.mjs create mode 100644 esm/express/createExpressSharedRouter.mjs.map create mode 100644 esm/express/index.d.ts create mode 100644 esm/express/index.mjs create mode 100644 esm/express/index.mjs.map create mode 100644 esm/fetch/createFetchSharedClient.d.ts create mode 100644 esm/fetch/createFetchSharedClient.mjs create mode 100644 esm/fetch/createFetchSharedClient.mjs.map create mode 100644 esm/fetch/index.d.ts create mode 100644 esm/fetch/index.mjs create mode 100644 esm/fetch/index.mjs.map create mode 100644 esm/fetch/queryParamsToString.d.ts create mode 100644 esm/fetch/queryParamsToString.mjs create mode 100644 esm/fetch/queryParamsToString.mjs.map create mode 100644 esm/index.d.ts create mode 100644 esm/index.mjs create mode 100644 esm/index.mjs.map create mode 100644 esm/openapi/createOpenApiGenerator.d.ts create mode 100644 esm/openapi/createOpenApiGenerator.mjs create mode 100644 esm/openapi/createOpenApiGenerator.mjs.map create mode 100644 esm/openapi/index.d.ts create mode 100644 esm/openapi/index.mjs create mode 100644 esm/openapi/index.mjs.map create mode 100644 esm/pathParameters.d.ts create mode 100644 esm/pathParameters.mjs create mode 100644 esm/pathParameters.mjs.map create mode 100644 esm/supertest/createSupertestSharedClient.d.ts create mode 100644 esm/supertest/createSupertestSharedClient.mjs create mode 100644 esm/supertest/createSupertestSharedClient.mjs.map create mode 100644 esm/supertest/index.d.ts create mode 100644 esm/supertest/index.mjs create mode 100644 esm/supertest/index.mjs.map create mode 100644 esm/tsconfig.esm.tsbuildinfo create mode 100644 esm/validations.d.ts create mode 100644 esm/validations.mjs create mode 100644 esm/validations.mjs.map create mode 100644 express/createExpressSharedRouter.d.ts create mode 100644 express/createExpressSharedRouter.js create mode 100644 express/createExpressSharedRouter.js.map create mode 100644 express/index.d.ts create mode 100644 express/index.js create mode 100644 express/index.js.map create mode 100644 fetch/createFetchSharedClient.d.ts create mode 100644 fetch/createFetchSharedClient.js create mode 100644 fetch/createFetchSharedClient.js.map create mode 100644 fetch/index.d.ts create mode 100644 fetch/index.js create mode 100644 fetch/index.js.map create mode 100644 fetch/queryParamsToString.d.ts create mode 100644 fetch/queryParamsToString.js create mode 100644 fetch/queryParamsToString.js.map create mode 100644 index.d.ts create mode 100644 index.js create mode 100644 index.js.map create mode 100644 openapi/createOpenApiGenerator.d.ts create mode 100644 openapi/createOpenApiGenerator.js create mode 100644 openapi/createOpenApiGenerator.js.map create mode 100644 openapi/index.d.ts create mode 100644 openapi/index.js create mode 100644 openapi/index.js.map create mode 100644 pathParameters.d.ts create mode 100644 pathParameters.js create mode 100644 pathParameters.js.map create mode 100644 supertest/createSupertestSharedClient.d.ts create mode 100644 supertest/createSupertestSharedClient.js create mode 100644 supertest/createSupertestSharedClient.js.map create mode 100644 supertest/index.d.ts create mode 100644 supertest/index.js create mode 100644 supertest/index.js.map create mode 100644 tsconfig.tsbuildinfo create mode 100644 validations.d.ts create mode 100644 validations.js create mode 100644 validations.js.map diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index 162827c..0000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,161 +0,0 @@ -name: ci -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - - test_node: - runs-on: ${{ matrix.os }} - strategy: - matrix: - node: [ '18' ] - os: [ windows-latest, ubuntu-latest ] - name: Test with Node v${{ matrix.node }} on ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2 - with: - version: 8 - - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - cache: 'pnpm' - - run: pnpm install --frozen-lockfile - - run: pnpm build - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - run: pnpm test - - test_deno: - runs-on: ubuntu-latest - name: test with Deno - steps: - - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2 - with: - version: 8 - - uses: actions/setup-node@v3 - with: - node-version: '18' - cache: 'pnpm' - - name: Cache - uses: actions/cache@v3 - with: - path: ~/.cache/deno - key: deno-${{ runner.os }}-${{ hashFiles('deno-lock.json') }} - restore-keys: | - deno-${{ runner.os }}-${{ hashFiles('deno-lock.json') }} - deno-${{ runner.os }}- - deno- - - uses: denoland/setup-deno@v1 - with: - deno-version: v1.x - - run: deno --version - - run: pnpm install --frozen-lockfile - - run: pnpm build:deno - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - run: deno run --unstable --reload --allow-read --allow-env --allow-net deno_dist/mod.ts - - check_if_version_upgraded: - name: Check if version upgrade - # We run this only if it's a push on the default branch or if it's a PR from a - # branch (meaning not a PR from a fork). It would be more straightforward to test if secrets.NPM_TOKEN is - # defined but GitHub Action don't allow it yet. - if: | - github.event_name == 'push' || - github.event.pull_request.head.repo.owner.login == github.event.pull_request.base.repo.owner.login - runs-on: ubuntu-latest - needs: - - test_node -# - test_deno - outputs: - from_version: ${{ steps.step1.outputs.from_version }} - to_version: ${{ steps.step1.outputs.to_version }} - is_upgraded_version: ${{ steps.step1.outputs.is_upgraded_version }} - is_pre_release: ${{steps.step1.outputs.is_pre_release }} - steps: - - uses: garronej/ts-ci@v2.1.0 - id: step1 - with: - action_name: is_package_json_version_upgraded - branch: ${{ github.head_ref || github.ref }} - - publish: - runs-on: ubuntu-latest - needs: - - check_if_version_upgraded - # We create a release only if the version have been upgraded and we are on the main branch - # or if we are on a branch of the repo that has an PR open on main. - if: | - needs.check_if_version_upgraded.outputs.is_upgraded_version == 'true' && - ( - github.event_name == 'push' || - needs.check_if_version_upgraded.outputs.is_pre_release == 'true' - ) - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: ${{ github.ref }} - - uses: pnpm/action-setup@v2 - with: - version: 8 - - run: rm -r .github - - name: Remove tmp_branch if it exists - run: git push origin :tmp_branch || true - - run: git checkout -b tmp_branch - - uses: actions/setup-node@v3 - with: - registry-url: https://registry.npmjs.org/ - cache: 'pnpm' - - run: pnpm install --frozen-lockfile - - run: pnpm build - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - run: | - npx -y -p denoify@1.4.8 enable_short_npm_import_path - npx -y -p denoify@1.4.8 remove_deno_dist_from_gitignore - env: - DRY_RUN: "0" - - run: | - if [ "$(npm show . version)" = "$VERSION" ]; then - echo "This version is already published" - exit 0 - fi - if [ "$NODE_AUTH_TOKEN" = "" ]; then - echo "Can't publish on NPM, You must first create a secret called NPM_TOKEN that contains your NPM auth token. https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets" - false - fi - EXTRA_ARGS="" - if [ "$IS_PRE_RELEASE" = "true" ]; then - EXTRA_ARGS="--tag next" - fi - npm publish $EXTRA_ARGS - env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} - VERSION: ${{ needs.check_if_version_upgraded.outputs.to_version }} - IS_PRE_RELEASE: ${{ needs.check_if_version_upgraded.outputs.is_pre_release }} - - run: | - git config --global user.name "actions" - git config --global user.email actions@github.com - git add -A - git commit -am "Adding deno distribution files and moving files from /dist to /" - git push origin tmp_branch - - uses: softprops/action-gh-release@v1 - with: - name: Release v${{ needs.check_if_version_upgraded.outputs.to_version }} - tag_name: v${{ needs.check_if_version_upgraded.outputs.to_version }} - target_commitish: tmp_branch - generate_release_notes: false - draft: false - prerelease: ${{ needs.check_if_version_upgraded.outputs.is_pre_release == 'true' }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Remove tmp_branch - run: git push origin :tmp_branch \ No newline at end of file diff --git a/axios/createAxiosSharedClient.d.ts b/axios/createAxiosSharedClient.d.ts new file mode 100644 index 0000000..30237a7 --- /dev/null +++ b/axios/createAxiosSharedClient.d.ts @@ -0,0 +1,6 @@ +import type { AxiosInstance } from "axios"; +import type { UnknownSharedRoute } from ".."; +import { HandlerCreator } from ".."; +import { ValidationOptions } from "../validations"; +export declare const createAxiosHandlerCreator: >(axios: AxiosInstance, options?: ValidationOptions) => HandlerCreator; +export declare const createAxiosSharedClient: >(sharedRouters: SharedRoutes, axios: AxiosInstance, validationOptions?: ValidationOptions) => import("..").HttpClient; diff --git a/axios/createAxiosSharedClient.js b/axios/createAxiosSharedClient.js new file mode 100644 index 0000000..11907cf --- /dev/null +++ b/axios/createAxiosSharedClient.js @@ -0,0 +1,116 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createAxiosSharedClient = exports.createAxiosHandlerCreator = void 0; +var __1 = require(".."); +var validations_1 = require("../validations"); +var toAxiosResponseType = { + arrayBuffer: "arraybuffer", + blob: "blob", + json: "json", + text: "text", +}; +var createAxiosHandlerCreator = function (axios, options) { + return function (routeName, routes, replaceParamsInUrl) { + return function (_a) { + if (_a === void 0) { _a = {}; } + return __awaiter(void 0, void 0, void 0, function () { + var route, _b, body, headers, queryParams, _c, data, status, rest, responseBody; + var urlParams = _a.urlParams, params = __rest(_a, ["urlParams"]); + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + route = routes[routeName]; + _b = (options === null || options === void 0 ? void 0 : options.skipInputValidation) + ? params + : (0, validations_1.validateInputParams)(route, params, "axios", { withIssuesInMessage: true }), body = _b.body, headers = _b.headers, queryParams = _b.queryParams; + return [4 /*yield*/, axios.request({ + method: route.method, + url: replaceParamsInUrl(route.url, urlParams), + data: body, + params: queryParams, + responseType: toAxiosResponseType[route.responseType], + headers: __assign(__assign({}, axios.defaults.headers), (headers !== null && headers !== void 0 ? headers : {})), + })]; + case 1: + _c = _d.sent(), data = _c.data, status = _c.status, rest = __rest(_c, ["data", "status"]); + responseBody = (options === null || options === void 0 ? void 0 : options.skipResponseValidation) + ? data + : (0, validations_1.validateSchemaWithExplicitError)({ + adapterName: "axios", + checkedSchema: "responses", + responseStatus: status, + params: data, + route: route, + withIssuesInMessage: true, + }); + return [2 /*return*/, __assign(__assign({}, rest), { status: status, body: responseBody })]; + } + }); + }); + }; + }; +}; +exports.createAxiosHandlerCreator = createAxiosHandlerCreator; +var createAxiosSharedClient = function (sharedRouters, axios, validationOptions) { + return (0, __1.configureCreateHttpClient)((0, exports.createAxiosHandlerCreator)(axios, validationOptions))(sharedRouters); +}; +exports.createAxiosSharedClient = createAxiosSharedClient; +//# sourceMappingURL=createAxiosSharedClient.js.map \ No newline at end of file diff --git a/axios/createAxiosSharedClient.js.map b/axios/createAxiosSharedClient.js.map new file mode 100644 index 0000000..99bcb77 --- /dev/null +++ b/axios/createAxiosSharedClient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"createAxiosSharedClient.js","sourceRoot":"","sources":["../src/axios/createAxiosSharedClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,wBAA+D;AAE/D,8CAIwB;AAExB,IAAM,mBAAmB,GAA4C;IACnE,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC;AAEK,IAAM,yBAAyB,GACpC,UACE,KAAoB,EACpB,OAA2B;IAE7B,OAAA,UAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB;QACtC,OAAA,UAAO,EAA6B;YAA7B,mBAAA,EAAA,OAA6B;;;gBAA3B,IAAA,SAAS,eAAA,EAAK,MAAM,cAAtB,aAAwB,CAAF;;;;4BACrB,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;4BAE1B,KAAiC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB;gCACjE,CAAC,CAAC,MAAM;gCACR,CAAC,CAAC,IAAA,iCAAmB,EAAC,KAAK,EAAE,MAAa,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAF7E,IAAI,UAAA,EAAE,OAAO,aAAA,EAAE,WAAW,iBAAA,CAEoD;4BAEpD,qBAAM,KAAK,CAAC,OAAO,CAAC;oCACpD,MAAM,EAAE,KAAK,CAAC,MAAM;oCACpB,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,SAAgB,CAAC;oCACpD,IAAI,EAAE,IAAI;oCACV,MAAM,EAAE,WAAW;oCACnB,YAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;oCACrD,OAAO,wBACF,KAAK,CAAC,QAAQ,CAAC,OAAO,GACtB,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAK,EAAU,CAAC,CAC5B;iCACF,CAAC,EAAA;;4BAVI,KAA4B,SAUhC,EAVM,IAAI,UAAA,EAAE,MAAM,YAAA,EAAK,IAAI,cAAvB,kBAAyB,CAAF;4BAYvB,YAAY,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,sBAAsB;gCAClD,CAAC,CAAC,IAAI;gCACN,CAAC,CAAC,IAAA,6CAA+B,EAAC;oCAC9B,WAAW,EAAE,OAAO;oCACpB,aAAa,EAAE,WAAW;oCAC1B,cAAc,EAAE,MAAa;oCAC7B,MAAM,EAAE,IAAI;oCACZ,KAAK,OAAA;oCACL,mBAAmB,EAAE,IAAI;iCAC1B,CAAC,CAAC;4BAEP,4CAAY,IAAI,KAAE,MAAM,QAAA,EAAE,IAAI,EAAE,YAAY,KAAG;;;;SAChD;IA/BD,CA+BC;AAhCD,CAgCC,CAAC;AArCS,QAAA,yBAAyB,6BAqClC;AAEG,IAAM,uBAAuB,GAAG,UAGrC,aAA2B,EAC3B,KAAoB,EACpB,iBAAqC;IAErC,OAAA,IAAA,6BAAyB,EAAC,IAAA,iCAAyB,EAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAC5E,aAAa,CACd;AAFD,CAEC,CAAC;AATS,QAAA,uBAAuB,2BAShC"} \ No newline at end of file diff --git a/axios/index.d.ts b/axios/index.d.ts new file mode 100644 index 0000000..5a59bf2 --- /dev/null +++ b/axios/index.d.ts @@ -0,0 +1 @@ +export { createAxiosSharedClient } from "./createAxiosSharedClient"; diff --git a/axios/index.js b/axios/index.js new file mode 100644 index 0000000..ce08009 --- /dev/null +++ b/axios/index.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createAxiosSharedClient = void 0; +var createAxiosSharedClient_1 = require("./createAxiosSharedClient"); +Object.defineProperty(exports, "createAxiosSharedClient", { enumerable: true, get: function () { return createAxiosSharedClient_1.createAxiosSharedClient; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/axios/index.js.map b/axios/index.js.map new file mode 100644 index 0000000..bf17877 --- /dev/null +++ b/axios/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/axios/index.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA"} \ No newline at end of file diff --git a/configureCreateHttpClient.d.ts b/configureCreateHttpClient.d.ts new file mode 100644 index 0000000..f7250f7 --- /dev/null +++ b/configureCreateHttpClient.d.ts @@ -0,0 +1,25 @@ +import { z } from "zod"; +import type { ResponsesToHttpResponse, SharedRoute, UnknownResponses, UnknownSharedRoute } from "./defineRoutes"; +import { PathParameters, ReplaceParamsInUrl, Url } from "./pathParameters"; +type EmptyObj = Record; +type AnyObj = Record; +export type HttpResponse = { + status: Status; + body: ResponseBody; +}; +export type HandlerParams = (PathParameters extends EmptyObj ? AnyObj : { + urlParams: PathParameters; +}) & (z.infer extends void ? AnyObj : { + body: z.infer; +}) & (z.infer extends void ? AnyObj : { + queryParams: z.infer; +}) & (z.infer extends void ? AnyObj : { + headers: z.infer; +}); +export type Handler = (params: HandlerParams | EmptyObj) => Promise>; +export type HttpClient> = { + [RouteName in keyof SharedRoutes]: (...params: [SharedRoutes[RouteName], PathParameters] extends [SharedRoute, EmptyObj] ? [] : [HandlerParams]) => Promise>; +}; +export type HandlerCreator> = (routeName: R, routes: SharedRoutes, replaceParamsInUrl: ReplaceParamsInUrl) => Handler; +export declare const configureCreateHttpClient: >(handlerCreator: HandlerCreator) => >(routes: SharedRoutes) => HttpClient; +export {}; diff --git a/configureCreateHttpClient.js b/configureCreateHttpClient.js new file mode 100644 index 0000000..a46bcbc --- /dev/null +++ b/configureCreateHttpClient.js @@ -0,0 +1,25 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.configureCreateHttpClient = void 0; +var pathParameters_1 = require("./pathParameters"); +var configureCreateHttpClient = function (handlerCreator) { + return function (routes) { + return (0, pathParameters_1.keys)(routes).reduce(function (acc, routeName) { + var _a; + return (__assign(__assign({}, acc), (_a = {}, _a[routeName] = handlerCreator(routeName, routes, pathParameters_1.replaceParamsInUrl), _a))); + }, {}); + }; +}; +exports.configureCreateHttpClient = configureCreateHttpClient; +//# sourceMappingURL=configureCreateHttpClient.js.map \ No newline at end of file diff --git a/configureCreateHttpClient.js.map b/configureCreateHttpClient.js.map new file mode 100644 index 0000000..5bf7ac1 --- /dev/null +++ b/configureCreateHttpClient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"configureCreateHttpClient.js","sourceRoot":"","sources":["src/configureCreateHttpClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAOA,mDAM0B;AAsCnB,IAAM,yBAAyB,GACpC,UAA+C,cAAiC;IAChF,OAAA,UACE,MAAoB;QAEpB,OAAA,IAAA,qBAAI,EAAC,MAAM,CAAC,CAAC,MAAM,CACjB,UAAC,GAAG,EAAE,SAAS;;YAAK,OAAA,uBACf,GAAG,gBACL,SAAS,IAAG,cAAc,CACzB,SAAmB,EACnB,MAAsB,EACtB,mCAAkB,CACnB,OACD;QAPkB,CAOlB,EACF,EAA8B,CAC/B;IAVD,CAUC;AAbH,CAaG,CAAC;AAfO,QAAA,yBAAyB,6BAehC"} \ No newline at end of file diff --git a/createCustomSharedClient.d.ts b/createCustomSharedClient.d.ts new file mode 100644 index 0000000..a985682 --- /dev/null +++ b/createCustomSharedClient.d.ts @@ -0,0 +1,3 @@ +import { Handler, HttpClient } from "./configureCreateHttpClient"; +import { UnknownSharedRoute } from "./defineRoutes"; +export declare const createCustomSharedClient: >(sharedRoutes: SharedRoutes, customHandlers: { [K in keyof SharedRoutes]: Handler; }) => HttpClient; diff --git a/createCustomSharedClient.js b/createCustomSharedClient.js new file mode 100644 index 0000000..8d202a0 --- /dev/null +++ b/createCustomSharedClient.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createCustomSharedClient = void 0; +var configureCreateHttpClient_1 = require("./configureCreateHttpClient"); +var createCustomSharedClient = function (sharedRoutes, customHandlers) { + var createHttpClient = (0, configureCreateHttpClient_1.configureCreateHttpClient)(function (routeName) { + return customHandlers[routeName]; + }); + return createHttpClient(sharedRoutes); +}; +exports.createCustomSharedClient = createCustomSharedClient; +//# sourceMappingURL=createCustomSharedClient.js.map \ No newline at end of file diff --git a/createCustomSharedClient.js.map b/createCustomSharedClient.js.map new file mode 100644 index 0000000..69905d4 --- /dev/null +++ b/createCustomSharedClient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"createCustomSharedClient.js","sourceRoot":"","sources":["src/createCustomSharedClient.ts"],"names":[],"mappings":";;;AAAA,yEAAwE;AAIjE,IAAM,wBAAwB,GAAG,UAGtC,YAA0B,EAC1B,cAEC;IAED,IAAM,gBAAgB,GAAG,IAAA,qDAAyB,EAAC,UAAC,SAAS;QAC3D,OAAO,cAAc,CAAC,SAAS,CAAQ,CAAC;IAC1C,CAAC,CAAQ,CAAC;IAEV,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC,CAAC;AAbW,QAAA,wBAAwB,4BAanC"} \ No newline at end of file diff --git a/defineRoutes.d.ts b/defineRoutes.d.ts new file mode 100644 index 0000000..6a70010 --- /dev/null +++ b/defineRoutes.d.ts @@ -0,0 +1,35 @@ +import { z, ZodVoid } from "zod"; +import type { Url } from "./pathParameters"; +export type UnknownResponses = { + [K: number]: z.ZodSchema; +}; +export type ValueOf = T[keyof T]; +export type ResponsesToHttpResponse = ValueOf<{ + [K in keyof Responses]: { + status: K; + body: z.infer; + }; +}>; +export type ResponseType = 'json' | 'arrayBuffer' | 'blob' | 'text'; +type OptionalFields = { + requestBodySchema?: z.Schema; + queryParamsSchema?: z.Schema; + responses?: Responses; + headersSchema?: z.Schema; + responseType?: ResponseType; +}; +export type HttpMethod = "get" | "post" | "put" | "patch" | "delete"; +type MethodAndUrl = { + method: HttpMethod; + url: U; +}; +type SharedRouteWithOptional = MethodAndUrl & OptionalFields; +export type SharedRoute = MethodAndUrl & Required>; +export type UnknownSharedRoute = SharedRoute; +export type UnknownSharedRouteWithUrl = SharedRoute; +export declare const defineRoute: (route: SharedRouteWithOptional) => SharedRoute; +export declare const defineRoutes: >(routes: { [K in keyof T]: T[K]; }) => { [K in keyof T]: T[K]; }; +export declare const listRoutes: >(routes: { [K in keyof T]: T[K]; }) => string[]; +export {}; diff --git a/defineRoutes.js b/defineRoutes.js new file mode 100644 index 0000000..f59962a --- /dev/null +++ b/defineRoutes.js @@ -0,0 +1,62 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.listRoutes = exports.defineRoutes = exports.defineRoute = void 0; +var zod_1 = require("zod"); +var defineRoute = function (route) { + var _a; + return (__assign(__assign({ requestBodySchema: zod_1.z.object({}).strict(), queryParamsSchema: zod_1.z.object({}).strict(), responses: { 201: zod_1.z.void().or(zod_1.z.string().max(0)) }, headersSchema: zod_1.z.object({}) }, route), { responseType: (_a = route.responseType) !== null && _a !== void 0 ? _a : "json" })); +}; +exports.defineRoute = defineRoute; +var verifyRoutesUniqAndListRoutes = function (routes) { + var e_1, _a; + var _b; + var occurrencesByMethodAndUrl = {}; + try { + for (var _c = __values(Object.values(routes)), _d = _c.next(); !_d.done; _d = _c.next()) { + var route = _d.value; + var name_1 = "".concat(route.method.toUpperCase(), " ").concat(route.url); + var occurrence = ((_b = occurrencesByMethodAndUrl[name_1]) !== null && _b !== void 0 ? _b : 0) + 1; + if (occurrence > 1) + throw new Error("You cannot have several routes with same http method and url, got: ".concat(name_1, " twice (at least)")); + occurrencesByMethodAndUrl[name_1] = occurrence; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + return Object.keys(occurrencesByMethodAndUrl); +}; +var defineRoutes = function (routes) { + verifyRoutesUniqAndListRoutes(routes); + return routes; +}; +exports.defineRoutes = defineRoutes; +var listRoutes = function (routes) { return verifyRoutesUniqAndListRoutes(routes); }; +exports.listRoutes = listRoutes; +//# sourceMappingURL=defineRoutes.js.map \ No newline at end of file diff --git a/defineRoutes.js.map b/defineRoutes.js.map new file mode 100644 index 0000000..2a76968 --- /dev/null +++ b/defineRoutes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"defineRoutes.js","sourceRoot":"","sources":["src/defineRoutes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2BAAiC;AA4E1B,IAAM,WAAW,GAAG,UAOzB,KAAyE;;IACd,OAAA,qBAC3D,iBAAiB,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAS,EAC/C,iBAAiB,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAS,EAC/C,SAAS,EAAE,EAAE,GAAG,EAAE,OAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAS,EACzD,aAAa,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAQ,IAC/B,KAAK,KACR,YAAY,EAAE,MAAA,KAAK,CAAC,YAAY,mCAAI,MAAM,IAC1C,CAAA;CAAA,CAAC;AAfU,QAAA,WAAW,eAerB;AAEH,IAAM,6BAA6B,GAAG,UACpC,MAEC;;;IAED,IAAM,yBAAyB,GAA2B,EAAE,CAAC;;QAE7D,KAAoB,IAAA,KAAA,SAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAyB,CAAA,gBAAA,4BAAE;YAA9D,IAAM,KAAK,WAAA;YACd,IAAM,MAAI,GAAG,UAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,cAAI,KAAK,CAAC,GAAG,CAAE,CAAC;YAC1D,IAAM,UAAU,GAAG,CAAC,MAAA,yBAAyB,CAAC,MAAI,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,UAAU,GAAG,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,6EAAsE,MAAI,sBAAmB,CAC9F,CAAC;YACJ,yBAAyB,CAAC,MAAI,CAAC,GAAG,UAAU,CAAC;SAC9C;;;;;;;;;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAChD,CAAC,CAAC;AAEK,IAAM,YAAY,GAAG,UAC1B,MAEC;IAED,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAPW,QAAA,YAAY,gBAOvB;AACK,IAAM,UAAU,GAAG,UACxB,MAEC,IACY,OAAA,6BAA6B,CAAC,MAAM,CAAC,EAArC,CAAqC,CAAC;AAJxC,QAAA,UAAU,cAI8B"} \ No newline at end of file diff --git a/esm/axios/createAxiosSharedClient.d.ts b/esm/axios/createAxiosSharedClient.d.ts new file mode 100644 index 0000000..5dcc408 --- /dev/null +++ b/esm/axios/createAxiosSharedClient.d.ts @@ -0,0 +1,6 @@ +import type { AxiosInstance } from "axios"; +import type { UnknownSharedRoute } from "../index.mjs"; +import { HandlerCreator } from "../index.mjs"; +import { ValidationOptions } from "../validations.mjs"; +export declare const createAxiosHandlerCreator: >(axios: AxiosInstance, options?: ValidationOptions) => HandlerCreator; +export declare const createAxiosSharedClient: >(sharedRouters: SharedRoutes, axios: AxiosInstance, validationOptions?: ValidationOptions) => import("../index.mjs").HttpClient; diff --git a/esm/axios/createAxiosSharedClient.mjs b/esm/axios/createAxiosSharedClient.mjs new file mode 100644 index 0000000..e249a29 --- /dev/null +++ b/esm/axios/createAxiosSharedClient.mjs @@ -0,0 +1,111 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +import { configureCreateHttpClient } from "../index.mjs"; +import { validateInputParams, validateSchemaWithExplicitError, } from "../validations.mjs"; +var toAxiosResponseType = { + arrayBuffer: "arraybuffer", + blob: "blob", + json: "json", + text: "text", +}; +export var createAxiosHandlerCreator = function (axios, options) { + return function (routeName, routes, replaceParamsInUrl) { + return function (_a) { + if (_a === void 0) { _a = {}; } + return __awaiter(void 0, void 0, void 0, function () { + var route, _b, body, headers, queryParams, _c, data, status, rest, responseBody; + var urlParams = _a.urlParams, params = __rest(_a, ["urlParams"]); + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + route = routes[routeName]; + _b = (options === null || options === void 0 ? void 0 : options.skipInputValidation) + ? params + : validateInputParams(route, params, "axios", { withIssuesInMessage: true }), body = _b.body, headers = _b.headers, queryParams = _b.queryParams; + return [4 /*yield*/, axios.request({ + method: route.method, + url: replaceParamsInUrl(route.url, urlParams), + data: body, + params: queryParams, + responseType: toAxiosResponseType[route.responseType], + headers: __assign(__assign({}, axios.defaults.headers), (headers !== null && headers !== void 0 ? headers : {})), + })]; + case 1: + _c = _d.sent(), data = _c.data, status = _c.status, rest = __rest(_c, ["data", "status"]); + responseBody = (options === null || options === void 0 ? void 0 : options.skipResponseValidation) + ? data + : validateSchemaWithExplicitError({ + adapterName: "axios", + checkedSchema: "responses", + responseStatus: status, + params: data, + route: route, + withIssuesInMessage: true, + }); + return [2 /*return*/, __assign(__assign({}, rest), { status: status, body: responseBody })]; + } + }); + }); + }; + }; +}; +export var createAxiosSharedClient = function (sharedRouters, axios, validationOptions) { + return configureCreateHttpClient(createAxiosHandlerCreator(axios, validationOptions))(sharedRouters); +}; +//# sourceMappingURL=createAxiosSharedClient.mjs.map \ No newline at end of file diff --git a/esm/axios/createAxiosSharedClient.mjs.map b/esm/axios/createAxiosSharedClient.mjs.map new file mode 100644 index 0000000..20a7f75 --- /dev/null +++ b/esm/axios/createAxiosSharedClient.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"createAxiosSharedClient.mjs","sourceRoot":"","sources":["../../src/axios/createAxiosSharedClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,EAAE,yBAAyB,EAAkB,MAAM,IAAI,CAAC;AAE/D,OAAO,EAEL,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AAExB,IAAM,mBAAmB,GAA4C;IACnE,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,CAAC,IAAM,yBAAyB,GACpC,UACE,KAAoB,EACpB,OAA2B;IAE7B,OAAA,UAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB;QACtC,OAAA,UAAO,EAA6B;YAA7B,mBAAA,EAAA,OAA6B;;;gBAA3B,IAAA,SAAS,eAAA,EAAK,MAAM,cAAtB,aAAwB,CAAF;;;;4BACrB,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;4BAE1B,KAAiC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB;gCACjE,CAAC,CAAC,MAAM;gCACR,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAa,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAF7E,IAAI,UAAA,EAAE,OAAO,aAAA,EAAE,WAAW,iBAAA,CAEoD;4BAEpD,qBAAM,KAAK,CAAC,OAAO,CAAC;oCACpD,MAAM,EAAE,KAAK,CAAC,MAAM;oCACpB,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,SAAgB,CAAC;oCACpD,IAAI,EAAE,IAAI;oCACV,MAAM,EAAE,WAAW;oCACnB,YAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;oCACrD,OAAO,wBACF,KAAK,CAAC,QAAQ,CAAC,OAAO,GACtB,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAK,EAAU,CAAC,CAC5B;iCACF,CAAC,EAAA;;4BAVI,KAA4B,SAUhC,EAVM,IAAI,UAAA,EAAE,MAAM,YAAA,EAAK,IAAI,cAAvB,kBAAyB,CAAF;4BAYvB,YAAY,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,sBAAsB;gCAClD,CAAC,CAAC,IAAI;gCACN,CAAC,CAAC,+BAA+B,CAAC;oCAC9B,WAAW,EAAE,OAAO;oCACpB,aAAa,EAAE,WAAW;oCAC1B,cAAc,EAAE,MAAa;oCAC7B,MAAM,EAAE,IAAI;oCACZ,KAAK,OAAA;oCACL,mBAAmB,EAAE,IAAI;iCAC1B,CAAC,CAAC;4BAEP,4CAAY,IAAI,KAAE,MAAM,QAAA,EAAE,IAAI,EAAE,YAAY,KAAG;;;;SAChD;IA/BD,CA+BC;AAhCD,CAgCC,CAAC;AAEJ,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAGrC,aAA2B,EAC3B,KAAoB,EACpB,iBAAqC;IAErC,OAAA,yBAAyB,CAAC,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAC5E,aAAa,CACd;AAFD,CAEC,CAAC"} \ No newline at end of file diff --git a/esm/axios/index.d.ts b/esm/axios/index.d.ts new file mode 100644 index 0000000..293b236 --- /dev/null +++ b/esm/axios/index.d.ts @@ -0,0 +1 @@ +export { createAxiosSharedClient } from "./createAxiosSharedClient.mjs"; diff --git a/esm/axios/index.mjs b/esm/axios/index.mjs new file mode 100644 index 0000000..399f9b7 --- /dev/null +++ b/esm/axios/index.mjs @@ -0,0 +1,2 @@ +export { createAxiosSharedClient } from "./createAxiosSharedClient.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/esm/axios/index.mjs.map b/esm/axios/index.mjs.map new file mode 100644 index 0000000..4d6c8d0 --- /dev/null +++ b/esm/axios/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/axios/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"} \ No newline at end of file diff --git a/esm/configureCreateHttpClient.d.ts b/esm/configureCreateHttpClient.d.ts new file mode 100644 index 0000000..9b37656 --- /dev/null +++ b/esm/configureCreateHttpClient.d.ts @@ -0,0 +1,25 @@ +import { z } from "zod"; +import type { ResponsesToHttpResponse, SharedRoute, UnknownResponses, UnknownSharedRoute } from "./defineRoutes.mjs"; +import { PathParameters, ReplaceParamsInUrl, Url } from "./pathParameters.mjs"; +type EmptyObj = Record; +type AnyObj = Record; +export type HttpResponse = { + status: Status; + body: ResponseBody; +}; +export type HandlerParams = (PathParameters extends EmptyObj ? AnyObj : { + urlParams: PathParameters; +}) & (z.infer extends void ? AnyObj : { + body: z.infer; +}) & (z.infer extends void ? AnyObj : { + queryParams: z.infer; +}) & (z.infer extends void ? AnyObj : { + headers: z.infer; +}); +export type Handler = (params: HandlerParams | EmptyObj) => Promise>; +export type HttpClient> = { + [RouteName in keyof SharedRoutes]: (...params: [SharedRoutes[RouteName], PathParameters] extends [SharedRoute, EmptyObj] ? [] : [HandlerParams]) => Promise>; +}; +export type HandlerCreator> = (routeName: R, routes: SharedRoutes, replaceParamsInUrl: ReplaceParamsInUrl) => Handler; +export declare const configureCreateHttpClient: >(handlerCreator: HandlerCreator) => >(routes: SharedRoutes) => HttpClient; +export {}; diff --git a/esm/configureCreateHttpClient.mjs b/esm/configureCreateHttpClient.mjs new file mode 100644 index 0000000..4cdb348 --- /dev/null +++ b/esm/configureCreateHttpClient.mjs @@ -0,0 +1,21 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +import { replaceParamsInUrl, keys, } from "./pathParameters.mjs"; +export var configureCreateHttpClient = function (handlerCreator) { + return function (routes) { + return keys(routes).reduce(function (acc, routeName) { + var _a; + return (__assign(__assign({}, acc), (_a = {}, _a[routeName] = handlerCreator(routeName, routes, replaceParamsInUrl), _a))); + }, {}); + }; +}; +//# sourceMappingURL=configureCreateHttpClient.mjs.map \ No newline at end of file diff --git a/esm/configureCreateHttpClient.mjs.map b/esm/configureCreateHttpClient.mjs.map new file mode 100644 index 0000000..b21009a --- /dev/null +++ b/esm/configureCreateHttpClient.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"configureCreateHttpClient.mjs","sourceRoot":"","sources":["../src/configureCreateHttpClient.ts"],"names":[],"mappings":";;;;;;;;;;;AAOA,OAAO,EAEL,kBAAkB,EAElB,IAAI,GAEL,MAAM,kBAAkB,CAAC;AAsC1B,MAAM,CAAC,IAAM,yBAAyB,GACpC,UAA+C,cAAiC;IAChF,OAAA,UACE,MAAoB;QAEpB,OAAA,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CACjB,UAAC,GAAG,EAAE,SAAS;;YAAK,OAAA,uBACf,GAAG,gBACL,SAAS,IAAG,cAAc,CACzB,SAAmB,EACnB,MAAsB,EACtB,kBAAkB,CACnB,OACD;QAPkB,CAOlB,EACF,EAA8B,CAC/B;IAVD,CAUC;AAbH,CAaG,CAAC"} \ No newline at end of file diff --git a/esm/createCustomSharedClient.d.ts b/esm/createCustomSharedClient.d.ts new file mode 100644 index 0000000..4aa2f43 --- /dev/null +++ b/esm/createCustomSharedClient.d.ts @@ -0,0 +1,3 @@ +import { Handler, HttpClient } from "./configureCreateHttpClient.mjs"; +import { UnknownSharedRoute } from "./defineRoutes.mjs"; +export declare const createCustomSharedClient: >(sharedRoutes: SharedRoutes, customHandlers: { [K in keyof SharedRoutes]: Handler; }) => HttpClient; diff --git a/esm/createCustomSharedClient.mjs b/esm/createCustomSharedClient.mjs new file mode 100644 index 0000000..036ec45 --- /dev/null +++ b/esm/createCustomSharedClient.mjs @@ -0,0 +1,8 @@ +import { configureCreateHttpClient } from "./configureCreateHttpClient.mjs"; +export var createCustomSharedClient = function (sharedRoutes, customHandlers) { + var createHttpClient = configureCreateHttpClient(function (routeName) { + return customHandlers[routeName]; + }); + return createHttpClient(sharedRoutes); +}; +//# sourceMappingURL=createCustomSharedClient.mjs.map \ No newline at end of file diff --git a/esm/createCustomSharedClient.mjs.map b/esm/createCustomSharedClient.mjs.map new file mode 100644 index 0000000..6ed4931 --- /dev/null +++ b/esm/createCustomSharedClient.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"createCustomSharedClient.mjs","sourceRoot":"","sources":["../src/createCustomSharedClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAIxE,MAAM,CAAC,IAAM,wBAAwB,GAAG,UAGtC,YAA0B,EAC1B,cAEC;IAED,IAAM,gBAAgB,GAAG,yBAAyB,CAAC,UAAC,SAAS;QAC3D,OAAO,cAAc,CAAC,SAAS,CAAQ,CAAC;IAC1C,CAAC,CAAQ,CAAC;IAEV,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC,CAAC"} \ No newline at end of file diff --git a/esm/defineRoutes.d.ts b/esm/defineRoutes.d.ts new file mode 100644 index 0000000..0e4020b --- /dev/null +++ b/esm/defineRoutes.d.ts @@ -0,0 +1,35 @@ +import { z, ZodVoid } from "zod"; +import type { Url } from "./pathParameters.mjs"; +export type UnknownResponses = { + [K: number]: z.ZodSchema; +}; +export type ValueOf = T[keyof T]; +export type ResponsesToHttpResponse = ValueOf<{ + [K in keyof Responses]: { + status: K; + body: z.infer; + }; +}>; +export type ResponseType = 'json' | 'arrayBuffer' | 'blob' | 'text'; +type OptionalFields = { + requestBodySchema?: z.Schema; + queryParamsSchema?: z.Schema; + responses?: Responses; + headersSchema?: z.Schema; + responseType?: ResponseType; +}; +export type HttpMethod = "get" | "post" | "put" | "patch" | "delete"; +type MethodAndUrl = { + method: HttpMethod; + url: U; +}; +type SharedRouteWithOptional = MethodAndUrl & OptionalFields; +export type SharedRoute = MethodAndUrl & Required>; +export type UnknownSharedRoute = SharedRoute; +export type UnknownSharedRouteWithUrl = SharedRoute; +export declare const defineRoute: (route: SharedRouteWithOptional) => SharedRoute; +export declare const defineRoutes: >(routes: { [K in keyof T]: T[K]; }) => { [K in keyof T]: T[K]; }; +export declare const listRoutes: >(routes: { [K in keyof T]: T[K]; }) => string[]; +export {}; diff --git a/esm/defineRoutes.mjs b/esm/defineRoutes.mjs new file mode 100644 index 0000000..aaf2e9b --- /dev/null +++ b/esm/defineRoutes.mjs @@ -0,0 +1,56 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +import { z } from "zod"; +export var defineRoute = function (route) { + var _a; + return (__assign(__assign({ requestBodySchema: z.object({}).strict(), queryParamsSchema: z.object({}).strict(), responses: { 201: z.void().or(z.string().max(0)) }, headersSchema: z.object({}) }, route), { responseType: (_a = route.responseType) !== null && _a !== void 0 ? _a : "json" })); +}; +var verifyRoutesUniqAndListRoutes = function (routes) { + var e_1, _a; + var _b; + var occurrencesByMethodAndUrl = {}; + try { + for (var _c = __values(Object.values(routes)), _d = _c.next(); !_d.done; _d = _c.next()) { + var route = _d.value; + var name_1 = "".concat(route.method.toUpperCase(), " ").concat(route.url); + var occurrence = ((_b = occurrencesByMethodAndUrl[name_1]) !== null && _b !== void 0 ? _b : 0) + 1; + if (occurrence > 1) + throw new Error("You cannot have several routes with same http method and url, got: ".concat(name_1, " twice (at least)")); + occurrencesByMethodAndUrl[name_1] = occurrence; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + return Object.keys(occurrencesByMethodAndUrl); +}; +export var defineRoutes = function (routes) { + verifyRoutesUniqAndListRoutes(routes); + return routes; +}; +export var listRoutes = function (routes) { return verifyRoutesUniqAndListRoutes(routes); }; +//# sourceMappingURL=defineRoutes.mjs.map \ No newline at end of file diff --git a/esm/defineRoutes.mjs.map b/esm/defineRoutes.mjs.map new file mode 100644 index 0000000..4f2960f --- /dev/null +++ b/esm/defineRoutes.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"defineRoutes.mjs","sourceRoot":"","sources":["../src/defineRoutes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAW,MAAM,KAAK,CAAC;AA4EjC,MAAM,CAAC,IAAM,WAAW,GAAG,UAOzB,KAAyE;;IACd,OAAA,qBAC3D,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAS,EAC/C,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAS,EAC/C,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAS,EACzD,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAQ,IAC/B,KAAK,KACR,YAAY,EAAE,MAAA,KAAK,CAAC,YAAY,mCAAI,MAAM,IAC1C,CAAA;CAAA,CAAC;AAEH,IAAM,6BAA6B,GAAG,UACpC,MAEC;;;IAED,IAAM,yBAAyB,GAA2B,EAAE,CAAC;;QAE7D,KAAoB,IAAA,KAAA,SAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAyB,CAAA,gBAAA,4BAAE;YAA9D,IAAM,KAAK,WAAA;YACd,IAAM,MAAI,GAAG,UAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,cAAI,KAAK,CAAC,GAAG,CAAE,CAAC;YAC1D,IAAM,UAAU,GAAG,CAAC,MAAA,yBAAyB,CAAC,MAAI,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,UAAU,GAAG,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,6EAAsE,MAAI,sBAAmB,CAC9F,CAAC;YACJ,yBAAyB,CAAC,MAAI,CAAC,GAAG,UAAU,CAAC;SAC9C;;;;;;;;;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,YAAY,GAAG,UAC1B,MAEC;IAED,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACF,MAAM,CAAC,IAAM,UAAU,GAAG,UACxB,MAEC,IACY,OAAA,6BAA6B,CAAC,MAAM,CAAC,EAArC,CAAqC,CAAC"} \ No newline at end of file diff --git a/esm/express/createExpressSharedRouter.d.ts b/esm/express/createExpressSharedRouter.d.ts new file mode 100644 index 0000000..916bce7 --- /dev/null +++ b/esm/express/createExpressSharedRouter.d.ts @@ -0,0 +1,8 @@ +import type { IRoute, RequestHandler, Router } from "express"; +import type { PathParameters, UnknownSharedRoute } from "../index.mjs"; +import { z } from "zod"; +import { ValidationOptions } from "../validations.mjs"; +import { ValueOf } from "../defineRoutes.mjs"; +type ExpressSharedRouterOptions = Pick; +export declare const createExpressSharedRouter: , ExpressSharedRouter extends { [Route in keyof SharedRoutes]: (...handlers: RequestHandler, z.TypeOf>, z.TypeOf, z.TypeOf, any>[]) => IRoute; }>(sharedRoutes: SharedRoutes, expressRouter: Router, options?: ExpressSharedRouterOptions) => ExpressSharedRouter; +export {}; diff --git a/esm/express/createExpressSharedRouter.mjs b/esm/express/createExpressSharedRouter.mjs new file mode 100644 index 0000000..c5bd7b7 --- /dev/null +++ b/esm/express/createExpressSharedRouter.mjs @@ -0,0 +1,68 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +import { keys } from "../index.mjs"; +import { validateInputParams } from "../validations.mjs"; +var makeValidationMiddleware = function (route, options) { + return function (req, res, next) { + try { + if (!options.skipInputValidation) { + var validatedParams = validateInputParams(route, { body: req.body, headers: req.headers, queryParams: req.query }, "express"); + req.body = validatedParams.body; + req.query = validatedParams.queryParams; + req.headers = validatedParams.headers; + } + next(); + } + catch (error) { + var zodError = error.cause; + res.status(400); + res.json({ + status: 400, + message: error.message, + issues: Array.from(new Set(zodIssuesToStrings(zodError.issues))), + }); + } + }; +}; +var zodIssuesToStrings = function (zodIssues) { + return zodIssues.flatMap(function (zodIssue) { + if (zodIssue.code === "invalid_union") { + return zodIssue.unionErrors.flatMap(function (_a) { + var issues = _a.issues; + return zodIssuesToStrings(issues); + }); + } + var message = zodIssue.message, path = zodIssue.path; + return "".concat(path.join("."), " : ").concat(message); + }); +}; +var assignHandlersToExpressRouter = function (expressRouter, route, options) { + if (options === void 0) { options = {}; } + var validationMiddleware = makeValidationMiddleware(route, options); + var url = route.url; + return function () { + var handlers = []; + for (var _i = 0; _i < arguments.length; _i++) { + handlers[_i] = arguments[_i]; + } + return expressRouter.route(url)[route.method](validationMiddleware, handlers); + }; +}; +export var createExpressSharedRouter = function (sharedRoutes, expressRouter, options) { + var expressSharedRouter = keys(sharedRoutes).reduce(function (acc, routeName) { + var _a; + var route = sharedRoutes[routeName]; + return __assign(__assign({}, acc), (_a = {}, _a[routeName] = assignHandlersToExpressRouter(expressRouter, route, options), _a)); + }, {}); + return expressSharedRouter; +}; +//# sourceMappingURL=createExpressSharedRouter.mjs.map \ No newline at end of file diff --git a/esm/express/createExpressSharedRouter.mjs.map b/esm/express/createExpressSharedRouter.mjs.map new file mode 100644 index 0000000..a97b4a3 --- /dev/null +++ b/esm/express/createExpressSharedRouter.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"createExpressSharedRouter.mjs","sourceRoot":"","sources":["../../src/express/createExpressSharedRouter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/esm/express/index.d.ts b/esm/express/index.d.ts new file mode 100644 index 0000000..d924974 --- /dev/null +++ b/esm/express/index.d.ts @@ -0,0 +1 @@ +export { createExpressSharedRouter } from "./createExpressSharedRouter.mjs"; diff --git a/esm/express/index.mjs b/esm/express/index.mjs new file mode 100644 index 0000000..883a08b --- /dev/null +++ b/esm/express/index.mjs @@ -0,0 +1,2 @@ +export { createExpressSharedRouter } from "./createExpressSharedRouter.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/esm/express/index.mjs.map b/esm/express/index.mjs.map new file mode 100644 index 0000000..b646f37 --- /dev/null +++ b/esm/express/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/express/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC"} \ No newline at end of file diff --git a/esm/fetch/createFetchSharedClient.d.ts b/esm/fetch/createFetchSharedClient.d.ts new file mode 100644 index 0000000..89f76e8 --- /dev/null +++ b/esm/fetch/createFetchSharedClient.d.ts @@ -0,0 +1,13 @@ +import type { UnknownSharedRoute, Url } from "../index.mjs"; +import { HandlerCreator } from "../index.mjs"; +import type nodeFetch from "node-fetch"; +import type { Response as FetchResponse } from "node-fetch"; +import { ValidationOptions } from "../validations.mjs"; +declare function browserFetch(input: RequestInfo | URL, init?: RequestInit): Promise; +type Fetch = typeof browserFetch | typeof nodeFetch; +type FetchConfig = RequestInit & { + baseURL?: Url; +} & ValidationOptions; +export declare const createFetchHandlerCreator: >(fetch: Fetch, options?: FetchConfig) => HandlerCreator; +export declare const createFetchSharedClient: >(sharedRouters: SharedRoutes, fetch: Fetch, config?: FetchConfig) => import("../index.mjs").HttpClient; +export {}; diff --git a/esm/fetch/createFetchSharedClient.mjs b/esm/fetch/createFetchSharedClient.mjs new file mode 100644 index 0000000..04a52b8 --- /dev/null +++ b/esm/fetch/createFetchSharedClient.mjs @@ -0,0 +1,127 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +import { configureCreateHttpClient } from "../index.mjs"; +import { queryParamsToString } from "./queryParamsToString.mjs"; +import { validateInputParams, validateSchemaWithExplicitError, } from "../validations.mjs"; +export var createFetchHandlerCreator = function (fetch, options) { + if (options === void 0) { options = {}; } + return function (routeName, routes, replaceParamsInUrl) { + return function (_a) { + if (_a === void 0) { _a = {}; } + return __awaiter(void 0, void 0, void 0, function () { + var route, _b, body, headers, queryParams, bodyAsString, stringQueryParams, baseURL, defaultInit, res, processedBody, responseBody; + var urlParams = _a.urlParams, params = __rest(_a, ["urlParams"]); + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + route = routes[routeName]; + _b = options.skipInputValidation + ? params + : validateInputParams(route, params, "fetch", { withIssuesInMessage: true }), body = _b.body, headers = _b.headers, queryParams = _b.queryParams; + bodyAsString = JSON.stringify(body); + stringQueryParams = queryParams && Object.keys(queryParams).length > 0 + ? "?" + queryParamsToString(queryParams) + : ""; + baseURL = options.baseURL, defaultInit = __rest(options, ["baseURL"]); + return [4 /*yield*/, fetch((baseURL ? baseURL : "") + + replaceParamsInUrl(route.url, urlParams) + + stringQueryParams, __assign(__assign(__assign(__assign({}, defaultInit), { method: route.method }), (bodyAsString !== "{}" ? { body: bodyAsString } : {})), { headers: __assign(__assign({ "Content-Type": "application/json" }, defaultInit === null || defaultInit === void 0 ? void 0 : defaultInit.headers), (headers !== null && headers !== void 0 ? headers : {})) }))]; + case 1: + res = _c.sent(); + return [4 /*yield*/, responseTypeToResponseBody(res, route.responseType)]; + case 2: + processedBody = _c.sent(); + responseBody = options.skipResponseValidation + ? processedBody + : validateSchemaWithExplicitError({ + adapterName: "fetch", + checkedSchema: "responses", + responseStatus: res.status, + params: processedBody, + route: route, + withIssuesInMessage: true, + }); + return [2 /*return*/, { body: responseBody, status: res.status }]; + } + }); + }); + }; + }; +}; +var responseTypeToResponseBody = function (res, responseType) { + switch (responseType) { + case "json": + return res.json(); + case "text": + return res.text(); + case "blob": + return res.blob(); + case "arrayBuffer": + return res.arrayBuffer(); + default: { + var exhaustiveCheck = responseType; + return exhaustiveCheck; + } + } +}; +export var createFetchSharedClient = function (sharedRouters, fetch, config) { + if (config === void 0) { config = {}; } + return configureCreateHttpClient(createFetchHandlerCreator(fetch, config))(sharedRouters); +}; +//# sourceMappingURL=createFetchSharedClient.mjs.map \ No newline at end of file diff --git a/esm/fetch/createFetchSharedClient.mjs.map b/esm/fetch/createFetchSharedClient.mjs.map new file mode 100644 index 0000000..62737e5 --- /dev/null +++ b/esm/fetch/createFetchSharedClient.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"createFetchSharedClient.mjs","sourceRoot":"","sources":["../../src/fetch/createFetchSharedClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/esm/fetch/index.d.ts b/esm/fetch/index.d.ts new file mode 100644 index 0000000..64accb7 --- /dev/null +++ b/esm/fetch/index.d.ts @@ -0,0 +1 @@ +export { createFetchSharedClient } from "./createFetchSharedClient.mjs"; diff --git a/esm/fetch/index.mjs b/esm/fetch/index.mjs new file mode 100644 index 0000000..2036063 --- /dev/null +++ b/esm/fetch/index.mjs @@ -0,0 +1,2 @@ +export { createFetchSharedClient } from "./createFetchSharedClient.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/esm/fetch/index.mjs.map b/esm/fetch/index.mjs.map new file mode 100644 index 0000000..10a91b8 --- /dev/null +++ b/esm/fetch/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/fetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"} \ No newline at end of file diff --git a/esm/fetch/queryParamsToString.d.ts b/esm/fetch/queryParamsToString.d.ts new file mode 100644 index 0000000..af4d3de --- /dev/null +++ b/esm/fetch/queryParamsToString.d.ts @@ -0,0 +1,8 @@ +type RawQueryParams = { + [key: string]: string | boolean | number; +}; +export type QueryParams = { + [K in keyof T]: T[K]; +}; +export declare const queryParamsToString: >(queryParams: Q) => string; +export {}; diff --git a/esm/fetch/queryParamsToString.mjs b/esm/fetch/queryParamsToString.mjs new file mode 100644 index 0000000..0c822e7 --- /dev/null +++ b/esm/fetch/queryParamsToString.mjs @@ -0,0 +1,33 @@ +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +export var queryParamsToString = function (queryParams) { + return Object.keys(queryParams) + .reduce(function (acc, param) { return __spreadArray(__spreadArray([], __read(acc), false), __read((typeof queryParams[param] !== "undefined" + ? ["".concat(param.toString(), "=").concat(encodeURI(queryParams[param].toString()))] + : [])), false); }, []) + .join("&"); +}; +//# sourceMappingURL=queryParamsToString.mjs.map \ No newline at end of file diff --git a/esm/fetch/queryParamsToString.mjs.map b/esm/fetch/queryParamsToString.mjs.map new file mode 100644 index 0000000..f4a2f86 --- /dev/null +++ b/esm/fetch/queryParamsToString.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"queryParamsToString.mjs","sourceRoot":"","sources":["../../src/fetch/queryParamsToString.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAM,CAAC,IAAM,mBAAmB,GAAG,UACjC,WAAc;IAEd,OAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAoB;SACzC,MAAM,CACL,UAAC,GAAa,EAAE,KAAK,IAAK,8CACrB,GAAG,kBACH,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,WAAW;QAC3C,CAAC,CAAC,CAAC,UAAG,KAAK,CAAC,QAAQ,EAAE,cAAI,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAE,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC,WAJiB,CAKzB,EACD,EAAE,CACH;SACA,IAAI,CAAC,GAAG,CAAC;AAVZ,CAUY,CAAC"} \ No newline at end of file diff --git a/esm/index.d.ts b/esm/index.d.ts new file mode 100644 index 0000000..20feac7 --- /dev/null +++ b/esm/index.d.ts @@ -0,0 +1,7 @@ +export { createCustomSharedClient } from "./createCustomSharedClient.mjs"; +export { configureCreateHttpClient } from "./configureCreateHttpClient.mjs"; +export type { HandlerCreator, HttpClient, HttpResponse, } from "./configureCreateHttpClient.mjs"; +export { defineRoutes, defineRoute, listRoutes } from "./defineRoutes.mjs"; +export type { HttpMethod, SharedRoute, UnknownSharedRoute, UnknownSharedRouteWithUrl, } from "./defineRoutes.mjs"; +export type { PathParameters, Url } from "./pathParameters.mjs"; +export { keys } from "./pathParameters.mjs"; diff --git a/esm/index.mjs b/esm/index.mjs new file mode 100644 index 0000000..7b218a4 --- /dev/null +++ b/esm/index.mjs @@ -0,0 +1,5 @@ +export { createCustomSharedClient } from "./createCustomSharedClient.mjs"; +export { configureCreateHttpClient } from "./configureCreateHttpClient.mjs"; +export { defineRoutes, defineRoute, listRoutes } from "./defineRoutes.mjs"; +export { keys } from "./pathParameters.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/esm/index.mjs.map b/esm/index.mjs.map new file mode 100644 index 0000000..8afdb18 --- /dev/null +++ b/esm/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAMxE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAQvE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC"} \ No newline at end of file diff --git a/esm/openapi/createOpenApiGenerator.d.ts b/esm/openapi/createOpenApiGenerator.d.ts new file mode 100644 index 0000000..8c68c6e --- /dev/null +++ b/esm/openapi/createOpenApiGenerator.d.ts @@ -0,0 +1,49 @@ +import { OpenAPIV3_1 as OpenAPI } from "openapi-types"; +import { z } from "zod"; +import { PathParameters, UnknownSharedRoute } from "../index.mjs"; +type OmitFromExisting = Omit; +type Examples = { + [media: string]: OpenAPI.ExampleObject & { + value?: T; + }; +}; +type WithExampleOrExamples = { + example?: T; + examples?: never; +} | { + example?: never; + examples?: Examples; +}; +type OpenApiBody = Pick & { + example?: T; + examples?: Examples; +}; +type ExtraDocParameter = Partial> & WithExampleOrExamples; +type CreateOpenApiGenerator = ; +}, SecuritySchemeName extends string>(sharedRoutesByTag: SharedRoutesByTag, openApiRootDoc: Omit & { + components?: OmitFromExisting & { + securitySchemes?: Record; + }; +}) => (extraDataByRoute: Partial<{ + [Tag in keyof SharedRoutesByTag]: { + [R in keyof SharedRoutesByTag[Tag]]: OmitFromExisting & { + extraDocs: { + securitySchemeToApply?: SecuritySchemeName[]; + urlParams?: PathParameters extends Record ? never : Record, ExtraDocParameter>; + body?: z.infer extends void ? never : OpenApiBody>; + queryParams?: z.infer extends void ? never : { + [K in keyof z.infer]: ExtraDocParameter[K]>; + }; + headerParams?: z.infer extends void ? never : { + [K in keyof z.infer]: ExtraDocParameter[K]>; + }; + responses: { + [S in keyof SharedRoutesByTag[Tag][R]["responses"]]: OpenAPI.ResponseObject & WithExampleOrExamples>; + }; + }; + }; + }; +}>) => OpenAPI.Document; +export declare const createOpenApiGenerator: CreateOpenApiGenerator; +export {}; diff --git a/esm/openapi/createOpenApiGenerator.mjs b/esm/openapi/createOpenApiGenerator.mjs new file mode 100644 index 0000000..1838cf7 --- /dev/null +++ b/esm/openapi/createOpenApiGenerator.mjs @@ -0,0 +1,147 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +import { zodToJsonSchema } from "zod-to-json-schema"; +import { keys } from "../index.mjs"; +var extractFromOpenApiBody = function (openApiRequestBody) { + if (openApiRequestBody === void 0) { openApiRequestBody = {}; } + var examples = openApiRequestBody.examples, example = openApiRequestBody.example, rest = __rest(openApiRequestBody, ["examples", "example"]); + return { + withRequestBodyExemple: __assign(__assign({}, (example && { example: example })), (examples && { examples: examples })), + requestBodyDocs: rest, + }; +}; +export var createOpenApiGenerator = function (sharedRoutesByTag, openApiRootDoc) { return function (extraDataByRoute) { return (__assign(__assign({}, openApiRootDoc), { paths: keys(sharedRoutesByTag).reduce(function (rootAcc, tag) { + var sharedRoutes = sharedRoutesByTag[tag]; + return __assign(__assign({}, rootAcc), keys(sharedRoutes).reduce(function (acc, routeName) { + var _a, _b; + var _c, _d; + var route = sharedRoutes[routeName]; + var _e = (_d = (_c = extraDataByRoute[tag]) === null || _c === void 0 ? void 0 : _c[routeName]) !== null && _d !== void 0 ? _d : {}, extraDocs = _e.extraDocs, extraDataForRoute = __rest(_e, ["extraDocs"]); + var _f = extractFromUrl(route.url, extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.urlParams), formattedUrl = _f.formattedUrl, pathParams = _f.pathParams; + var parameters = __spreadArray(__spreadArray(__spreadArray([], __read((pathParams.length > 0 ? pathParams : [])), false), __read((!isShapeObjectEmpty(route.queryParamsSchema) + ? zodObjectToParameters(route.queryParamsSchema, "query", extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.queryParams) + : [])), false), __read((!isShapeObjectEmpty(route.headersSchema) + ? zodObjectToParameters(route.headersSchema, "header", extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.headerParams) + : [])), false); + var _g = extractFromOpenApiBody(extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.body), withRequestBodyExemple = _g.withRequestBodyExemple, requestBodyDocs = _g.requestBodyDocs; + return __assign(__assign({}, acc), (_a = {}, _a[formattedUrl] = __assign(__assign({}, acc[formattedUrl]), (_b = {}, _b[route.method] = __assign(__assign(__assign(__assign(__assign(__assign({}, extraDataForRoute), { tags: [tag] }), ((extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.securitySchemeToApply) && + securitySchemeNamesToSecurity(extraDocs.securitySchemeToApply))), (parameters.length > 0 && { + parameters: parameters, + })), (!isShapeObjectEmpty(route.requestBodySchema) && { + requestBody: { + required: true, + content: { + "application/json": __assign(__assign({}, withRequestBodyExemple), { schema: __assign(__assign({}, requestBodyDocs), zodToOpenApi(route.requestBodySchema)) }), + }, + }, + })), { responses: keys(route.responses).reduce(function (acc, status) { + var _a; + var _b, _c; + var responseSchema = zodToOpenApi(route.responses[status]); + var responseSchemaType = responseSchema.type; + var _d = (_c = (_b = extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.responses) === null || _b === void 0 ? void 0 : _b[status]) !== null && _c !== void 0 ? _c : {}, example = _d.example, examples = _d.examples, responseDoc = __rest(_d, ["example", "examples"]); + return __assign(__assign({}, acc), (_a = {}, _a[status.toString()] = __assign(__assign({}, responseDoc), (responseSchemaType !== undefined && { + content: { + "application/json": __assign(__assign(__assign({}, (example && { example: example })), (examples && { examples: examples })), { schema: responseSchema }), + }, + })), _a)); + }, {}) }), _b)), _a)); + }, {})); + }, {}) })); }; }; +var extractFromUrl = function (url, extraUrlParameters) { + var pathParams = []; + var formattedUrl = url.replace(/:(.*?)(\/|$)/g, function (_match, group1, group2) { + var _a; + var extraDocForParam = extraUrlParameters === null || extraUrlParameters === void 0 ? void 0 : extraUrlParameters[group1]; + pathParams.push(__assign(__assign({}, extraDocForParam), { name: group1, required: true, schema: { type: "string" }, in: "path" })); + return (_a = "{".concat(group1, "}") + group2) !== null && _a !== void 0 ? _a : ""; + }); + return { + formattedUrl: formattedUrl, + pathParams: pathParams, + }; +}; +var zodToOpenApi = function (schema) { + var _a = zodToJsonSchema(schema, { + $refStrategy: "none", + }), $schema = _a.$schema, additionalProperties = _a.additionalProperties, rest = __rest(_a, ["$schema", "additionalProperties"]); + return rest; +}; +var isShapeObjectEmpty = function (schema) { + var typeName = getTypeName(schema); + if (typeName === "ZodObject") { + var shape = getShape(schema); + return Object.keys(shape).length === 0; + } + return typeName === undefined; +}; +var zodObjectToParameters = function (schema, paramKind, extraDocumentation) { + if (extraDocumentation === void 0) { extraDocumentation = {}; } + var shape = getShape(schema); + return Object.keys(shape).reduce(function (acc, paramName) { + var paramSchema = shape[paramName]; + var extraDoc = extraDocumentation[paramName]; + var initialTypeName = getTypeName(paramSchema); + var required = initialTypeName !== "ZodOptional"; + var schema = zodToOpenApi(required ? paramSchema : paramSchema._def.innerType); + return __spreadArray(__spreadArray([], __read(acc), false), [ + __assign(__assign({}, extraDoc), { in: paramKind, name: paramName, required: required, schema: schema }), + ], false); + }, []); +}; +var getTypeName = function (schema) { + return schema._def.typeName; +}; +var securitySchemeNamesToSecurity = function (securitySchemeToApply) { return ({ + security: securitySchemeToApply.reduce(function (securityAcc, securitySchemeName) { + var _a; + return __spreadArray(__spreadArray([], __read(securityAcc), false), [(_a = {}, _a[securitySchemeName] = [], _a)], false); + }, []), +}); }; +var getShape = function (schema) { return schema._def.shape(); }; +//# sourceMappingURL=createOpenApiGenerator.mjs.map \ No newline at end of file diff --git a/esm/openapi/createOpenApiGenerator.mjs.map b/esm/openapi/createOpenApiGenerator.mjs.map new file mode 100644 index 0000000..37cad00 --- /dev/null +++ b/esm/openapi/createOpenApiGenerator.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"createOpenApiGenerator.mjs","sourceRoot":"","sources":["../../src/openapi/createOpenApiGenerator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/esm/openapi/index.d.ts b/esm/openapi/index.d.ts new file mode 100644 index 0000000..2f7b227 --- /dev/null +++ b/esm/openapi/index.d.ts @@ -0,0 +1 @@ +export { createOpenApiGenerator } from "./createOpenApiGenerator.mjs"; diff --git a/esm/openapi/index.mjs b/esm/openapi/index.mjs new file mode 100644 index 0000000..3ff5f58 --- /dev/null +++ b/esm/openapi/index.mjs @@ -0,0 +1,2 @@ +export { createOpenApiGenerator } from "./createOpenApiGenerator.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/esm/openapi/index.mjs.map b/esm/openapi/index.mjs.map new file mode 100644 index 0000000..97240a3 --- /dev/null +++ b/esm/openapi/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/openapi/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"} \ No newline at end of file diff --git a/esm/pathParameters.d.ts b/esm/pathParameters.d.ts new file mode 100644 index 0000000..c40384b --- /dev/null +++ b/esm/pathParameters.d.ts @@ -0,0 +1,19 @@ +type Http = "http://" | "https://"; +type AbsoluteUrl = `${Http}${string}`; +type RelativeUrl = `/${string}`; +export type Url = AbsoluteUrl | RelativeUrl; +interface ParamsDictionary { + [key: string]: string; +} +type RemoveDomain = S extends RelativeUrl ? S : S extends `${Http}${string}${"/"}${infer P}` ? `/${P}` : "/"; +type RemoveTail = S extends `${infer P}${Tail}` ? P : S; +type GetRouteParameter = RemoveTail, `-${string}`>, `.${string}`>; +export type PathParameters = string extends Route ? ParamsDictionary : RemoveDomain extends `${string}:${infer Rest}` ? (GetRouteParameter extends never ? ParamsDictionary : GetRouteParameter extends `${infer ParamName}?` ? { + [P in ParamName]?: string; +} : { + [P in GetRouteParameter]: string; +}) & (Rest extends `${GetRouteParameter}${infer Next}` ? PathParameters : unknown) : {}; +export type ReplaceParamsInUrl = (path: U, params: PathParameters) => Url; +export declare const replaceParamsInUrl: ReplaceParamsInUrl; +export declare const keys: >(obj: Obj) => (keyof Obj)[]; +export {}; diff --git a/esm/pathParameters.mjs b/esm/pathParameters.mjs new file mode 100644 index 0000000..7afc705 --- /dev/null +++ b/esm/pathParameters.mjs @@ -0,0 +1,11 @@ +export var replaceParamsInUrl = function (url, params) { + if (params === void 0) { params = {}; } + var paramNames = keys(params); + if (paramNames.length === 0) + return url; + return paramNames.reduce(function (acc, paramName) { return acc.replace(":".concat(paramName.toString()), params[paramName]); }, url); +}; +export var keys = function (obj) { + return Object.keys(obj); +}; +//# sourceMappingURL=pathParameters.mjs.map \ No newline at end of file diff --git a/esm/pathParameters.mjs.map b/esm/pathParameters.mjs.map new file mode 100644 index 0000000..5f97b68 --- /dev/null +++ b/esm/pathParameters.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"pathParameters.mjs","sourceRoot":"","sources":["../src/pathParameters.ts"],"names":[],"mappings":"AA+CA,MAAM,CAAC,IAAM,kBAAkB,GAAuB,UACpD,GAAG,EACH,MAAyC;IAAzC,uBAAA,EAAA,SAAS,EAAgC;IAEzC,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,UAAU,CAAC,MAAM,CACtB,UAAC,GAAG,EAAE,SAAS,IAAK,OAAA,GAAG,CAAC,OAAO,CAAC,WAAI,SAAS,CAAC,QAAQ,EAAE,CAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAA1D,CAA0D,EAC9E,GAAU,CACX,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,IAAI,GAAG,UAAsC,GAAQ;IAChE,OAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAkB;AAAjC,CAAiC,CAAC"} \ No newline at end of file diff --git a/esm/supertest/createSupertestSharedClient.d.ts b/esm/supertest/createSupertestSharedClient.d.ts new file mode 100644 index 0000000..be46c3b --- /dev/null +++ b/esm/supertest/createSupertestSharedClient.d.ts @@ -0,0 +1,5 @@ +import type { UnknownSharedRoute } from "../index.mjs"; +import { HandlerCreator } from "../index.mjs"; +import type { SuperTest, Test } from "supertest"; +export declare const createSupertestHandlerCreator: (supertestRequest: SuperTest) => HandlerCreator; +export declare const createSupertestSharedClient: >(sharedRoutes: SharedRoutes, supertestRequest: SuperTest) => import("../index.mjs").HttpClient; diff --git a/esm/supertest/createSupertestSharedClient.mjs b/esm/supertest/createSupertestSharedClient.mjs new file mode 100644 index 0000000..dbc4219 --- /dev/null +++ b/esm/supertest/createSupertestSharedClient.mjs @@ -0,0 +1,77 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +import { configureCreateHttpClient } from "../index.mjs"; +var supertestRequestToCorrectHttpMethod = function (supertestRequest, method) { return supertestRequest[method]; }; +export var createSupertestHandlerCreator = function (supertestRequest) { + return function (routeName, routes, replaceParamsInUrl) { + var route = routes[routeName]; + return function (_a) { + var _b = _a === void 0 ? {} : _a, headers = _b.headers, body = _b.body, queryParams = _b.queryParams, urlParams = _b.urlParams; + return __awaiter(void 0, void 0, void 0, function () { + var result; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: return [4 /*yield*/, supertestRequestToCorrectHttpMethod(supertestRequest, route.method)(replaceParamsInUrl(route.url, urlParams)) + .send(body) + .set(headers !== null && headers !== void 0 ? headers : {}) + .query(queryParams)]; + case 1: + result = _c.sent(); + return [2 /*return*/, __assign({ status: result.status, body: result.body }, (!Object.keys(route.responses).includes(result.status.toString()) && { + text: result.text, + }))]; + } + }); + }); + }; + }; +}; +export var createSupertestSharedClient = function (sharedRoutes, supertestRequest) { + return configureCreateHttpClient(createSupertestHandlerCreator(supertestRequest))(sharedRoutes); +}; +//# sourceMappingURL=createSupertestSharedClient.mjs.map \ No newline at end of file diff --git a/esm/supertest/createSupertestSharedClient.mjs.map b/esm/supertest/createSupertestSharedClient.mjs.map new file mode 100644 index 0000000..8bd0b14 --- /dev/null +++ b/esm/supertest/createSupertestSharedClient.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"createSupertestSharedClient.mjs","sourceRoot":"","sources":["../../src/supertest/createSupertestSharedClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,yBAAyB,EAAkB,MAAM,IAAI,CAAC;AAI/D,IAAM,mCAAmC,GAAG,UAC1C,gBAAiC,EACjC,MAAkB,IACO,OAAA,gBAAgB,CAAC,MAAM,CAAC,EAAxB,CAAwB,CAAC;AAEpD,MAAM,CAAC,IAAM,6BAA6B,GACxC,UAAC,gBAAiC;IAClC,OAAA,UAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB;QACpC,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,UAAO,EAA8C;gBAA9C,qBAA4C,EAAE,KAAA,EAA5C,OAAO,aAAA,EAAE,IAAI,UAAA,EAAE,WAAW,iBAAA,EAAE,SAAS,eAAA;;;;;gCACpC,qBAAM,mCAAmC,CACtD,gBAAgB,EAChB,KAAK,CAAC,MAAM,CACb,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;iCACxC,IAAI,CAAC,IAAI,CAAC;iCACV,GAAG,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;iCAClB,KAAK,CAAC,WAAW,CAAC,EAAA;;4BANf,MAAM,GAAG,SAMM;4BAErB,iCACE,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,IAAI,IACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI;oCACtE,IAAI,EAAE,MAAM,CAAC,IAAI;iCAClB,CAAC,GACF;;;;SACH,CAAC;IACJ,CAAC;AAnBD,CAmBC,CAAC;AAEJ,MAAM,CAAC,IAAM,2BAA2B,GAAG,UAGzC,YAA0B,EAC1B,gBAAiC;IAEjC,OAAA,yBAAyB,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,CACxE,YAAY,CACb;AAFD,CAEC,CAAC"} \ No newline at end of file diff --git a/esm/supertest/index.d.ts b/esm/supertest/index.d.ts new file mode 100644 index 0000000..353d901 --- /dev/null +++ b/esm/supertest/index.d.ts @@ -0,0 +1 @@ +export { createSupertestSharedClient } from "./createSupertestSharedClient.mjs"; diff --git a/esm/supertest/index.mjs b/esm/supertest/index.mjs new file mode 100644 index 0000000..3052989 --- /dev/null +++ b/esm/supertest/index.mjs @@ -0,0 +1,2 @@ +export { createSupertestSharedClient } from "./createSupertestSharedClient.mjs"; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/esm/supertest/index.mjs.map b/esm/supertest/index.mjs.map new file mode 100644 index 0000000..fe9c405 --- /dev/null +++ b/esm/supertest/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/supertest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC"} \ No newline at end of file diff --git a/esm/tsconfig.esm.tsbuildinfo b/esm/tsconfig.esm.tsbuildinfo new file mode 100644 index 0000000..e13ca74 --- /dev/null +++ b/esm/tsconfig.esm.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/typeAliases.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/util.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/ZodError.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/locales/en.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/errors.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/parseUtil.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/enumUtil.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/errorUtil.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/partialUtil.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/types.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/external.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/index.d.ts","../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/index.d.ts","../../src/pathParameters.ts","../../src/defineRoutes.ts","../../src/configureCreateHttpClient.ts","../../src/createCustomSharedClient.ts","../../src/index.ts","../../src/validations.ts","../../node_modules/.pnpm/axios@1.4.0/node_modules/axios/index.d.ts","../../src/axios/createAxiosSharedClient.ts","../../src/axios/index.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/dom-events.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/globals.global.d.ts","../../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+mime@1.3.2/node_modules/@types/mime/index.d.ts","../../node_modules/.pnpm/@types+send@0.17.1/node_modules/@types/send/index.d.ts","../../node_modules/.pnpm/@types+range-parser@1.2.4/node_modules/@types/range-parser/index.d.ts","../../node_modules/.pnpm/@types+qs@6.9.7/node_modules/@types/qs/index.d.ts","../../node_modules/.pnpm/@types+express-serve-static-core@4.17.35/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/.pnpm/@types+mime@3.0.1/node_modules/@types/mime/Mime.d.ts","../../node_modules/.pnpm/@types+mime@3.0.1/node_modules/@types/mime/index.d.ts","../../node_modules/.pnpm/@types+http-errors@2.0.1/node_modules/@types/http-errors/index.d.ts","../../node_modules/.pnpm/@types+serve-static@1.15.2/node_modules/@types/serve-static/index.d.ts","../../node_modules/.pnpm/@types+connect@3.4.35/node_modules/@types/connect/index.d.ts","../../node_modules/.pnpm/@types+body-parser@1.19.2/node_modules/@types/body-parser/index.d.ts","../../node_modules/.pnpm/@types+express@4.17.17/node_modules/@types/express/index.d.ts","../../src/express/createExpressSharedRouter.ts","../../src/express/index.ts","../../src/fetch/queryParamsToString.ts","../../node_modules/.pnpm/formdata-polyfill@4.0.10/node_modules/formdata-polyfill/esm.min.d.ts","../../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/file.d.ts","../../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/index.d.ts","../../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/from.d.ts","../../node_modules/.pnpm/node-fetch@3.3.1/node_modules/node-fetch/@types/index.d.ts","../../src/fetch/createFetchSharedClient.ts","../../src/fetch/index.ts","../../node_modules/.pnpm/openapi-types@12.1.0/node_modules/openapi-types/dist/index.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/Options.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/any.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/Refs.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/errorMessages.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/array.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/bigint.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/boolean.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/date.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/enum.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/intersection.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/literal.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/map.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/nativeEnum.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/never.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/null.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/nullable.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/number.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/object.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/string.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/record.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/set.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/tuple.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/undefined.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/union.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/unknown.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parseDef.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/zodToJsonSchema.d.ts","../../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/index.d.ts","../../src/openapi/createOpenApiGenerator.ts","../../src/openapi/index.ts","../../node_modules/.pnpm/@types+cookiejar@2.1.2/node_modules/@types/cookiejar/index.d.ts","../../node_modules/.pnpm/@types+superagent@4.1.18/node_modules/@types/superagent/index.d.ts","../../node_modules/.pnpm/@types+supertest@2.0.12/node_modules/@types/supertest/index.d.ts","../../src/supertest/createSupertestSharedClient.ts","../../src/supertest/index.ts"],"fileInfos":[{"version":"f59215c5f1d886b05395ee7aca73e0ac69ddfad2843aa88530e797879d511bad","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"3dda5344576193a4ae48b8d03f105c86f20b2f2aff0a1d1fd7935f5d68649654","affectsGlobalScope":true},{"version":"9d9885c728913c1d16e0d2831b40341d6ad9a0ceecaabc55209b306ad9c736a5","affectsGlobalScope":true},{"version":"17bea081b9c0541f39dd1ae9bc8c78bdd561879a682e60e2f25f688c0ecab248","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"f06948deb2a51aae25184561c9640fb66afeddb34531a9212d011792b1d19e0a","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"5487b97cfa28b26b4a9ef0770f872bdbebd4c46124858de00f242c3eed7519f4","7a01f546ace66019156e4232a1bee2fabc2f8eabeb052473d926ee1693956265","fb53b1c6a6c799b7e3cc2de3fb5c9a1c04a1c60d4380a37792d84c5f8b33933b","8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","c2cb3c8ff388781258ea9ddbcd8a947f751bddd6886e1d3b3ea09ddaa895df80","f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","98a9cc18f661d28e6bd31c436e1984f3980f35e0f0aa9cf795c54f8ccb667ffe","c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","19903057d0249e45c579bef2b771c37609e4853a8b88adbb0b6b63f9e1d1f372","f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802",{"version":"be139d52709c57e683b367f8e3118a064130c670cd6814e7e5b927adaf2fbb21","signature":"c7c176a5a8a12c6b3d5b28c95320448f17c7d5438485c53a086dea69ed2e6801"},{"version":"a33b0928d741f3cc2d9d375350cb6d57d074323ba282d424d3aa0c89fd764eb6","signature":"a01ce36a4fa79bb209996f311b56369233c709c1ff49c056f768751b69ddab09"},{"version":"fc5f108e945ccda3f5ccf6f05ce84f9aaf0d51f8988a2994abe1af71c88524fa","signature":"44a17461f4133206989c5b56a7ed0d77d485f866c43afa5b144a2a1587fe0150"},{"version":"454671610b0389f294e74f0ffbf4d72c926d9e11da889d359674ae4e3224ef6b","signature":"70aad179112a492efbeed445504038ea12e90db5f6ecf452bd13b606e9263cd9"},{"version":"76c0556d36524e5a16ef84d239fb3992c7cdef0a5535f5f63349917cca1c414c","signature":"c4acec2b887b9279da570a4f056c51a61988231afabbd200590fff738e71e422"},{"version":"090107203b8abddb313ebf8e0791259ba3994cd9848e05bafd1e1eb8eac23311","signature":"e00cdcf103ee17e7f881640c0de60250dbbe5201452a786177992420d03955e7"},"1d729ea435a93e1a70519d06a6f13fa418c4c39a52b69e6db86750ebfcdf5554",{"version":"cc5a216ec084184c7888e53c94bcf6e6c01f1b069e879ca8cb1c4ed91eb9bd88","signature":"002ace4931001d9ea1f3717a109a41bf16dcfbb33fe8d9e848d8f2b791034eaf"},"2aa4a640d2afabc591928da1d45c45eedb060a69c17a90fa5e7fa0828aa15e27","7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true},"11e2d554398d2bd460e7d06b2fa5827a297c8acfbe00b4f894a224ac0862857f",{"version":"17a1140b90821c2c8d7064c9fc7598797c385714e6aa88b85e30b1159af8dc9b","affectsGlobalScope":true},"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","dab86d9604fe40854ef3c0a6f9e8948873dc3509213418e5e457f410fd11200f","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","5eec82ac21f84d83586c59a16b9b8502d34505d1393393556682fe7e7fde9ef2","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"2c45b35f4850881ab132f80d3cb51e8a359a4d8fafdc5ff2401d260dc27862f4","7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","a15eb098ed86a4135cba05d77e792d6189fa8607a00c9b1b381c0e9550c04ba5",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","c4577fb855ca259bdbf3ea663ca73988ce5f84251a92b4aef80a1f4122b6f98e","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"ff07a9a03c65732ccc59b3c65bc584173da093bd563a6565411c01f5703bd3cb","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"ed2a670a77a1b80653c5bde2d813b0ab2e92872cc9b2b611ce11050b95139be6","84e3bbd6f80983d468260fdbfeeb431cc81f7ea98d284d836e4d168e36875e86","aad5ffa61406b8e19524738fcf0e6fda8b3485bba98626268fdf252d1b2b630a","16d51f964ec125ad2024cf03f0af444b3bc3ec3614d9345cc54d09bab45c9a4c","ba601641fac98c229ccd4a303f747de376d761babb33229bb7153bed9356c9cc",{"version":"352fc8497a30bc806d7defa0043d85802e5f35a7688731ee9a21456f5cb32a94","affectsGlobalScope":true},"5b9ecf7da4d71cf3832dbb8336150fa924631811f488ad4690c2dfec2b4fb1d7","951c85f75aac041dddbedfedf565886a7b494e29ec1532e2a9b4a6180560b50e","f463d61cf39c3a6a5f96cdf7adfdb72a0b1d663f7b5d5b6dd042adba835430c2","f7a9cb83c8fbc081a8b605880d191e0d0527cde2c1b2b2b623beca8f0203a2cd","6d829824ead8999f87b6df21200df3c6150391b894b4e80662caa462bd48d073","afc559c1b93df37c25aef6b3dfa2d64325b0e112e887ee18bf7e6f4ec383fc90","43cdd474c5aa3340da4816bb8f1ae7f3b1bcf9e70d997afc36a0f2c432378c84",{"version":"740da0b5f25141d6fd70b215899faea3108db0e61ace8c2636fe3ad129a5182a","signature":"1ebb58c3210e488446f87753fe1998eeab336feaea8aeb1fae67e173a42a03da"},"fa00eede2b2640bcfec133440377a75fc7d4647affa0aa68d1dad3626ec441db",{"version":"69571e322ffb287ea739ba2a674369b3790974f717e8a47d969f84543cde2da2","signature":"4714df73aa332341fd02da657beb85950e4c60eed5c7520b203e5b52b15ed992"},"d782e571cb7d6ec0f0645957ed843d00e3f8577e08cc2940f400c931bc47a8df","9167246623f181441e6116605221268d94e33a1ebd88075e2dc80133c928ae7e","dc1a838d8a514b6de9fbce3bd5e6feb9ccfe56311e9338bb908eb4d0d966ecaf","186f09ed4b1bc1d5a5af5b1d9f42e2d798f776418e82599b3de16423a349d184","d692ae73951775d2448df535ce8bc8abf162dc343911fedda2c37b8de3b20d8e",{"version":"8a804c372ae43a1e5c4a36b6acfbff9beb8e61a31db60f4bbddb12054a98244e","signature":"e3e111e077027bc3f8ed326df065b482b1a23d9fc67df36c3abb14876acea721"},"8b3b10df45a1ec07333e61a4b2ed7c01a2ca295688db942bc1220d328c86eb72","cc3e30832aff12a575919d59eb3d680ca7cc999e1041bb0fc489dbe0276b066b","dd804b99db086f2f0e24bb373d2a1e9d9177f32f5c8f2c7b37c99accdf835e0c","e70f03e85bc8a2385e538a2db0c9ee532f6a9b346872aa809f173a26df7caee1","264808a845721a9f3df608a5e7ed12537f976d1645f20cbb448b106068f82332","8d484f5d6fd888f53e7cc21957ec2370461c73d230efb3467b9fb1822901535b","df73b0c2aa1ffa4a9aebd72baee78edf77ce5023d4476c04eadadbcdeb2964dc","065cbd81319d18ffc3b81100fbc60da26daf7fa090b26edf7dd3cc8c1a6cfbc5","771c436459c7a2ac2604ffa55a3abd76ffe8cae6aeae700d749f0fa5e8869ff6","7d4a2dae1a1ee3b99563747fa815076956911a833954deed5a4aa2d9207df167","45f6cd001ba50294b3e9a43800b22e0798cdcdc20c214cafd55d4d7d1914c331","b81b383239d2f4f14515331d7017febcb23786d90c5acc9688a891010fe25d4c","c60f24b4fd55376e4e095914d8f5345f63b7028d50fc8a0b7ec930f82777cacf","5754e79fbbfbb921b60ca1ad35cfbb5940733d93110bb1a935584f90cedb1c68","f7fcb70b90e9664b1ff1fb8566d3af99ca1a057d0dcfb94fb69b430463acba27","fb3af1e7369a6a52e0382612036ddcea2d089cdb0cccadc968a975043621e5fa","51353ffcc4bec12870c1435205dcaedab91ef108123017fd50fe8c3aed2bec04","e26befbe9607e9915734929db869fd83943f66e08c8e59d7308c14f6b6e755a3","4f596be4c3cb6ab63476dfa81bfe5f2a75768b6fd966d4c716411b4daa98df11","6d0e44cb89017602b13264823b15ada2a38e2ccb2a831c3e57680a0eb57d4bed","5e3f90d8fbf438ecb335d40e7a830f8deba1f045a2c3a27a8f5a4cdf8f499422","3a98713a36fe040df4d7e10a9e57a983f814f5cac42d3fe7919a342a6b9c103f","5dbaf247d7887721b20d8cf0a127460782ebbdc4285868f831a2f48104f034b5","b44d4ecd18d153d893eb38bfd827c0d624ed6f8fed4d9622489d76b3e4847067","23a12ab68ec3b350709bc4c15ddd34d8afa5e94dfccb1346f663f2c4bdb4334a","c9dfb06ca7c62fc5a95d33362f66c2bf5bf78d61ab433e62ec44190ea4012910","8d8b8fea19a532864502cbe5b298aadc194b970d511998342e38e4b9dea98c48","97479d4a4ddc4f4db849e5d6daadda8d986f5a7c580a0d79b3763a536a62268f","7efebf1092b8e7dfd08b0e54ec7d86dfabfd505f820d89351d957bfbc0bb3db2","032ccc910e4f1baf0355a2e43bc535caec36b1e916e64491ec2cabea5593593b",{"version":"4cbf318f7c1f298841bf4c5458869bb69e4b8dc8b18250af718bca02d232f3b8","signature":"c20dcccad05651d65e749c164c2cd88a3fb35d46a4595a6633bfaa00bf9e35de"},"5379bd2adb109cb6c15e7f0367c2eb1986d837f9977f50915afe4fc1759522ba","8d48b8f8a377ade8dd1f000625bc276eea067f2529cc9cafdf082d17142107d6","214f291323316651737db8ca0db4c14ae568a429e59fc5b4f364dd80fe72d5f6","76232dbb982272b182a76ad8745a9b02724dc9896e2328ce360e2c56c64c9778",{"version":"59f881f3204250aa6778e81a5e81e777f4684b92160b78a127a91f7016bde8c6","signature":"a03049a303d95f933af688a1c541867127a1226a4a200325369c02a39320bab7"},"c16631ce27bbed5b2fe93a3b5a9b76c22b64c909633e9f9a2cca997bc890ac51"],"root":[[58,63],65,66,[133,135],141,142,172,173,177,178],"options":{"declaration":true,"downlevelIteration":true,"esModuleInterop":true,"jsx":4,"module":5,"newLine":1,"noFallthroughCasesInSwitch":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","sourceMap":true,"strict":true,"target":1},"fileIdsList":[[86,113,120,130],[86,113,120],[113],[83,86,113,120,122,123,124],[113,124,125,129,131],[113,127],[113,126],[67,113],[70,113],[71,76,104,113],[72,83,84,91,101,112,113],[72,73,83,91,113],[74,113],[75,76,84,92,113],[76,101,109,113],[77,79,83,91,113],[78,113],[79,80,113],[83,113],[81,83,113],[83,84,85,101,112,113],[83,84,85,98,101,104,113],[113,117],[79,86,91,101,112,113],[83,84,86,87,91,101,109,112,113],[86,88,101,109,112,113],[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119],[83,89,113],[90,112,113],[79,83,91,101,113],[92,113],[93,113],[70,94,113],[95,111,113,117],[96,113],[97,113],[83,98,99,113],[98,100,113,115],[71,83,101,102,103,104,113],[71,101,103,113],[101,102,113],[104,113],[105,113],[83,107,108,113],[107,108,113],[76,91,101,109,113],[110,113],[91,111,113],[71,86,97,112,113],[76,113],[101,113,114],[113,115],[113,116],[71,76,83,85,94,101,112,113,115,117],[101,113,118],[84,101,113,120,121],[86,113,120,127,128],[71,84,86,101,113,120,174],[113,175],[113,137,138],[86,113,120,136,139],[113,170],[57,113],[57,113,144,169],[113,146,169],[57,113,145,146,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168],[57,113,146,147,169],[57,113,146,147],[57,113,146,169],[57,113,146],[113,146],[57,113,146,158,169],[57,113,146,152,162,169],[56,113],[45,46,56,113],[47,48,113],[45,46,47,49,50,54,113],[46,47,113],[55,113],[47,113],[45,46,47,50,51,52,53,113],[59,62,63,64,113],[65,113],[57,58,59,113],[59,60,113],[57,58,113],[57,59,62,63,113,132],[113,133],[59,62,63,113,135,140],[113,141],[58,59,60,61,113],[57,62,113,143,171],[113,172],[62,113,176],[113,177],[57,59,60,113],[62,63,64],[57,58,59],[59,60],[57,58],[57,59,62,63,132],[62,63,140],[58,59,60,61],[57,62,143],[62,176]],"referencedMap":[[131,1],[130,2],[174,3],[125,4],[132,5],[128,3],[121,3],[126,6],[127,7],[67,8],[68,8],[70,9],[71,10],[72,11],[73,12],[74,13],[75,14],[76,15],[77,16],[78,17],[79,18],[80,18],[82,19],[81,20],[83,19],[84,21],[85,22],[69,23],[119,3],[86,24],[87,25],[88,26],[120,27],[89,28],[90,29],[91,30],[92,31],[93,32],[94,33],[95,34],[96,35],[97,36],[98,37],[99,37],[100,38],[101,39],[103,40],[102,41],[104,42],[105,43],[106,3],[107,44],[108,45],[109,46],[110,47],[111,48],[112,49],[113,50],[114,51],[115,52],[116,53],[117,54],[118,55],[124,3],[123,3],[122,56],[129,57],[175,58],[176,59],[64,3],[137,3],[139,60],[138,3],[136,3],[140,61],[143,3],[43,3],[44,3],[8,3],[10,3],[9,3],[2,3],[11,3],[12,3],[13,3],[14,3],[15,3],[16,3],[17,3],[18,3],[3,3],[4,3],[22,3],[19,3],[20,3],[21,3],[23,3],[24,3],[25,3],[5,3],[26,3],[27,3],[28,3],[29,3],[6,3],[33,3],[30,3],[31,3],[32,3],[34,3],[7,3],[35,3],[40,3],[41,3],[36,3],[37,3],[38,3],[39,3],[1,3],[42,3],[171,62],[144,63],[146,64],[147,65],[169,66],[145,3],[148,67],[149,68],[150,3],[151,3],[152,63],[153,69],[154,70],[155,69],[156,63],[157,3],[158,71],[159,72],[160,68],[161,69],[163,73],[164,67],[162,68],[165,69],[166,3],[167,69],[168,3],[170,64],[57,74],[47,75],[49,76],[55,77],[51,3],[52,3],[50,78],[53,74],[45,3],[46,3],[56,79],[48,80],[54,81],[65,82],[66,83],[60,84],[61,85],[59,86],[133,87],[134,88],[141,89],[142,90],[135,3],[62,91],[172,92],[173,93],[58,3],[177,94],[178,95],[63,96]],"exportedModulesMap":[[131,1],[130,2],[174,3],[125,4],[132,5],[128,3],[121,3],[126,6],[127,7],[67,8],[68,8],[70,9],[71,10],[72,11],[73,12],[74,13],[75,14],[76,15],[77,16],[78,17],[79,18],[80,18],[82,19],[81,20],[83,19],[84,21],[85,22],[69,23],[119,3],[86,24],[87,25],[88,26],[120,27],[89,28],[90,29],[91,30],[92,31],[93,32],[94,33],[95,34],[96,35],[97,36],[98,37],[99,37],[100,38],[101,39],[103,40],[102,41],[104,42],[105,43],[106,3],[107,44],[108,45],[109,46],[110,47],[111,48],[112,49],[113,50],[114,51],[115,52],[116,53],[117,54],[118,55],[124,3],[123,3],[122,56],[129,57],[175,58],[176,59],[64,3],[137,3],[139,60],[138,3],[136,3],[140,61],[143,3],[43,3],[44,3],[8,3],[10,3],[9,3],[2,3],[11,3],[12,3],[13,3],[14,3],[15,3],[16,3],[17,3],[18,3],[3,3],[4,3],[22,3],[19,3],[20,3],[21,3],[23,3],[24,3],[25,3],[5,3],[26,3],[27,3],[28,3],[29,3],[6,3],[33,3],[30,3],[31,3],[32,3],[34,3],[7,3],[35,3],[40,3],[41,3],[36,3],[37,3],[38,3],[39,3],[1,3],[42,3],[171,62],[144,63],[146,64],[147,65],[169,66],[145,3],[148,67],[149,68],[150,3],[151,3],[152,63],[153,69],[154,70],[155,69],[156,63],[157,3],[158,71],[159,72],[160,68],[161,69],[163,73],[164,67],[162,68],[165,69],[166,3],[167,69],[168,3],[170,64],[57,74],[47,75],[49,76],[55,77],[51,3],[52,3],[50,78],[53,74],[45,3],[46,3],[56,79],[48,80],[54,81],[65,97],[66,83],[60,98],[61,99],[59,100],[133,101],[134,88],[141,102],[142,90],[62,103],[172,104],[173,93],[177,105],[178,95],[63,99]],"semanticDiagnosticsPerFile":[131,130,174,125,132,128,121,126,127,67,68,70,71,72,73,74,75,76,77,78,79,80,82,81,83,84,85,69,119,86,87,88,120,89,90,91,92,93,94,95,96,97,98,99,100,101,103,102,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,124,123,122,129,175,176,64,137,139,138,136,140,143,43,44,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,171,144,146,147,169,145,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163,164,162,165,166,167,168,170,57,47,49,55,51,52,50,53,45,46,56,48,54,65,66,60,61,59,133,134,141,142,135,62,172,173,58,177,178,63]},"version":"5.1.3"} \ No newline at end of file diff --git a/esm/validations.d.ts b/esm/validations.d.ts new file mode 100644 index 0000000..ff09c5f --- /dev/null +++ b/esm/validations.d.ts @@ -0,0 +1,24 @@ +import type { HandlerParams } from "./configureCreateHttpClient.mjs"; +import type { UnknownSharedRoute } from "./defineRoutes.mjs"; +export type ValidationOptions = { + skipInputValidation?: boolean; + skipResponseValidation?: boolean; +}; +type ExtractFromExisting = Extract; +type CheckedSchema = ExtractFromExisting; +export declare const validateSchemaWithExplicitError: ({ checkedSchema, params, route, adapterName, responseStatus, withIssuesInMessage, }: { + checkedSchema: ExtractFromExisting; + params: unknown; + route: R; + adapterName: string; + responseStatus?: undefined; + withIssuesInMessage?: boolean | undefined; +}) => unknown; +export declare const validateInputParams: (route: UnknownSharedRoute, params: HandlerParams, adapterName: string, options?: { + withIssuesInMessage: boolean; +}) => { + queryParams: unknown; + body: unknown; + headers: unknown; +}; +export {}; diff --git a/esm/validations.mjs b/esm/validations.mjs new file mode 100644 index 0000000..0c97437 --- /dev/null +++ b/esm/validations.mjs @@ -0,0 +1,100 @@ +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +var explicitError = function (_a) { + var _b; + var route = _a.route, error = _a.error, adapterName = _a.adapterName, checkedSchema = _a.checkedSchema, statusCode = _a.statusCode, withIssuesInMessage = _a.withIssuesInMessage; + var newError = new Error(__spreadArray([ + "Shared-route schema '".concat(checkedSchema, "' was not respected in adapter '").concat(adapterName, "'."), + checkedSchema === "responses" && + "Received status: ".concat(statusCode, ". Handled statuses: ").concat(Object.keys(route.responses).join(", "), "."), + "Route: ".concat(route.method.toUpperCase(), " ").concat(route.url) + ], __read((withIssuesInMessage && ((_b = error === null || error === void 0 ? void 0 : error.issues) === null || _b === void 0 ? void 0 : _b.length) + ? ["Issues: " + issuesToString(error === null || error === void 0 ? void 0 : error.issues)] + : [])), false).filter(Boolean) + .join("\n")); + newError.cause = error; + return newError; +}; +export var validateSchemaWithExplicitError = function (_a) { + var checkedSchema = _a.checkedSchema, _b = _a.params, params = _b === void 0 ? {} : _b, route = _a.route, adapterName = _a.adapterName, responseStatus = _a.responseStatus, _c = _a.withIssuesInMessage, withIssuesInMessage = _c === void 0 ? false : _c; + try { + if (checkedSchema === "responses") { + if (!responseStatus) + throw new Error("a response status is required when validating responses"); + var schema = route[checkedSchema][responseStatus]; + if (!schema) + throw new Error("No schema found for this status."); + return schema.parse(params); + } + return route[checkedSchema].parse(params); + } + catch (error) { + throw explicitError({ + route: route, + error: error, + adapterName: adapterName, + checkedSchema: checkedSchema, + statusCode: responseStatus, + withIssuesInMessage: withIssuesInMessage, + }); + } +}; +export var validateInputParams = function (route, params, adapterName, options) { + if (options === void 0) { options = { + withIssuesInMessage: false, + }; } + var withIssuesInMessage = options.withIssuesInMessage; + var queryParams = validateSchemaWithExplicitError({ + adapterName: adapterName, + checkedSchema: "queryParamsSchema", + params: params.queryParams, + route: route, + withIssuesInMessage: withIssuesInMessage, + }); + var body = validateSchemaWithExplicitError({ + adapterName: adapterName, + checkedSchema: "requestBodySchema", + params: params.body, + route: route, + withIssuesInMessage: withIssuesInMessage, + }); + // we validate headers separately because we don't want to re-affect req.headers parsed value + // because we don't want to lose all other headers + validateSchemaWithExplicitError({ + adapterName: adapterName, + checkedSchema: "headersSchema", + params: params.headers, + route: route, + }); + return { queryParams: queryParams, body: body, headers: params.headers }; +}; +var issuesToString = function (issues) { + return issues.map(function (_a) { + var message = _a.message, path = _a.path; + return "".concat(path.join("."), ": ").concat(message); + }).join(" | "); +}; +//# sourceMappingURL=validations.mjs.map \ No newline at end of file diff --git a/esm/validations.mjs.map b/esm/validations.mjs.map new file mode 100644 index 0000000..69382ff --- /dev/null +++ b/esm/validations.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"validations.mjs","sourceRoot":"","sources":["../src/validations.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/express/createExpressSharedRouter.d.ts b/express/createExpressSharedRouter.d.ts new file mode 100644 index 0000000..659deae --- /dev/null +++ b/express/createExpressSharedRouter.d.ts @@ -0,0 +1,8 @@ +import type { IRoute, RequestHandler, Router } from "express"; +import type { PathParameters, UnknownSharedRoute } from ".."; +import { z } from "zod"; +import { ValidationOptions } from "../validations"; +import { ValueOf } from "../defineRoutes"; +type ExpressSharedRouterOptions = Pick; +export declare const createExpressSharedRouter: , ExpressSharedRouter extends { [Route in keyof SharedRoutes]: (...handlers: RequestHandler, z.TypeOf>, z.TypeOf, z.TypeOf, any>[]) => IRoute; }>(sharedRoutes: SharedRoutes, expressRouter: Router, options?: ExpressSharedRouterOptions) => ExpressSharedRouter; +export {}; diff --git a/express/createExpressSharedRouter.js b/express/createExpressSharedRouter.js new file mode 100644 index 0000000..c6d9c0c --- /dev/null +++ b/express/createExpressSharedRouter.js @@ -0,0 +1,72 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createExpressSharedRouter = void 0; +var __1 = require(".."); +var validations_1 = require("../validations"); +var makeValidationMiddleware = function (route, options) { + return function (req, res, next) { + try { + if (!options.skipInputValidation) { + var validatedParams = (0, validations_1.validateInputParams)(route, { body: req.body, headers: req.headers, queryParams: req.query }, "express"); + req.body = validatedParams.body; + req.query = validatedParams.queryParams; + req.headers = validatedParams.headers; + } + next(); + } + catch (error) { + var zodError = error.cause; + res.status(400); + res.json({ + status: 400, + message: error.message, + issues: Array.from(new Set(zodIssuesToStrings(zodError.issues))), + }); + } + }; +}; +var zodIssuesToStrings = function (zodIssues) { + return zodIssues.flatMap(function (zodIssue) { + if (zodIssue.code === "invalid_union") { + return zodIssue.unionErrors.flatMap(function (_a) { + var issues = _a.issues; + return zodIssuesToStrings(issues); + }); + } + var message = zodIssue.message, path = zodIssue.path; + return "".concat(path.join("."), " : ").concat(message); + }); +}; +var assignHandlersToExpressRouter = function (expressRouter, route, options) { + if (options === void 0) { options = {}; } + var validationMiddleware = makeValidationMiddleware(route, options); + var url = route.url; + return function () { + var handlers = []; + for (var _i = 0; _i < arguments.length; _i++) { + handlers[_i] = arguments[_i]; + } + return expressRouter.route(url)[route.method](validationMiddleware, handlers); + }; +}; +var createExpressSharedRouter = function (sharedRoutes, expressRouter, options) { + var expressSharedRouter = (0, __1.keys)(sharedRoutes).reduce(function (acc, routeName) { + var _a; + var route = sharedRoutes[routeName]; + return __assign(__assign({}, acc), (_a = {}, _a[routeName] = assignHandlersToExpressRouter(expressRouter, route, options), _a)); + }, {}); + return expressSharedRouter; +}; +exports.createExpressSharedRouter = createExpressSharedRouter; +//# sourceMappingURL=createExpressSharedRouter.js.map \ No newline at end of file diff --git a/express/createExpressSharedRouter.js.map b/express/createExpressSharedRouter.js.map new file mode 100644 index 0000000..51a0c8b --- /dev/null +++ b/express/createExpressSharedRouter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"createExpressSharedRouter.js","sourceRoot":"","sources":["../src/express/createExpressSharedRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,wBAA0B;AAE1B,8CAAwE;AAKxE,IAAM,wBAAwB,GAC5B,UAAC,KAAyB,EAAE,OAAmC;IAC/D,OAAA,UAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QACb,IAAI;YACF,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;gBAChC,IAAM,eAAe,GAAG,IAAA,iCAAmB,EACzC,KAAK,EACL,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,EAChE,SAAS,CACV,CAAC;gBACF,GAAG,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;gBAChC,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,WAAkB,CAAC;gBAC/C,GAAG,CAAC,OAAO,GAAG,eAAe,CAAC,OAAc,CAAC;aAC9C;YACD,IAAI,EAAE,CAAC;SACR;QAAC,OAAO,KAAU,EAAE;YACnB,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAiB,CAAC;YACzC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC;gBACP,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;aACjE,CAAC,CAAC;SACJ;IACH,CAAC;AAtBD,CAsBC,CAAC;AAEJ,IAAM,kBAAkB,GAAG,UAAC,SAAqB;IAC/C,OAAO,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;QAChC,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE;YACrC,OAAO,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,UAAC,EAAU;oBAAR,MAAM,YAAA;gBAAO,OAAA,kBAAkB,CAAC,MAAM,CAAC;YAA1B,CAA0B,CAAC,CAAC;SACjF;QAEO,IAAA,OAAO,GAAW,QAAQ,QAAnB,EAAE,IAAI,GAAK,QAAQ,KAAb,CAAc;QACnC,OAAO,UAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAM,OAAO,CAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAM,6BAA6B,GAAG,UACpC,aAAqB,EACrB,KAAyB,EACzB,OAAwC;IAAxC,wBAAA,EAAA,YAAwC;IAExC,IAAM,oBAAoB,GAAG,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtE,IAAM,GAAG,GAAG,KAAK,CAAC,GAAa,CAAC;IAEhC,OAAO;QAAC,kBAA6B;aAA7B,UAA6B,EAA7B,qBAA6B,EAA7B,IAA6B;YAA7B,6BAA6B;;QACnC,OAAA,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IAAtE,CAAsE,CAAC;AAC3E,CAAC,CAAC;AAEK,IAAM,yBAAyB,GAAG,UAcvC,YAA0B,EAC1B,aAAqB,EACrB,OAAoC;IAEpC,IAAM,mBAAmB,GAAG,IAAA,QAAI,EAAC,YAAY,CAAC,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,SAAS;;QACnE,IAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACtC,6BACK,GAAG,gBACL,SAAS,IAAG,6BAA6B,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,OACzE;IACJ,CAAC,EAAE,EAAyB,CAAC,CAAC;IAE9B,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AA3BW,QAAA,yBAAyB,6BA2BpC"} \ No newline at end of file diff --git a/express/index.d.ts b/express/index.d.ts new file mode 100644 index 0000000..8f6a6a7 --- /dev/null +++ b/express/index.d.ts @@ -0,0 +1 @@ +export { createExpressSharedRouter } from "./createExpressSharedRouter"; diff --git a/express/index.js b/express/index.js new file mode 100644 index 0000000..ab63c8d --- /dev/null +++ b/express/index.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createExpressSharedRouter = void 0; +var createExpressSharedRouter_1 = require("./createExpressSharedRouter"); +Object.defineProperty(exports, "createExpressSharedRouter", { enumerable: true, get: function () { return createExpressSharedRouter_1.createExpressSharedRouter; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/express/index.js.map b/express/index.js.map new file mode 100644 index 0000000..572dc0c --- /dev/null +++ b/express/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/express/index.ts"],"names":[],"mappings":";;;AAAA,yEAAwE;AAA/D,sIAAA,yBAAyB,OAAA"} \ No newline at end of file diff --git a/fetch/createFetchSharedClient.d.ts b/fetch/createFetchSharedClient.d.ts new file mode 100644 index 0000000..6d2f5ed --- /dev/null +++ b/fetch/createFetchSharedClient.d.ts @@ -0,0 +1,13 @@ +import type { UnknownSharedRoute, Url } from ".."; +import { HandlerCreator } from ".."; +import type nodeFetch from "node-fetch"; +import type { Response as FetchResponse } from "node-fetch"; +import { ValidationOptions } from "../validations"; +declare function browserFetch(input: RequestInfo | URL, init?: RequestInit): Promise; +type Fetch = typeof browserFetch | typeof nodeFetch; +type FetchConfig = RequestInit & { + baseURL?: Url; +} & ValidationOptions; +export declare const createFetchHandlerCreator: >(fetch: Fetch, options?: FetchConfig) => HandlerCreator; +export declare const createFetchSharedClient: >(sharedRouters: SharedRoutes, fetch: Fetch, config?: FetchConfig) => import("..").HttpClient; +export {}; diff --git a/fetch/createFetchSharedClient.js b/fetch/createFetchSharedClient.js new file mode 100644 index 0000000..ef0f85f --- /dev/null +++ b/fetch/createFetchSharedClient.js @@ -0,0 +1,132 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createFetchSharedClient = exports.createFetchHandlerCreator = void 0; +var __1 = require(".."); +var queryParamsToString_1 = require("./queryParamsToString"); +var validations_1 = require("../validations"); +var createFetchHandlerCreator = function (fetch, options) { + if (options === void 0) { options = {}; } + return function (routeName, routes, replaceParamsInUrl) { + return function (_a) { + if (_a === void 0) { _a = {}; } + return __awaiter(void 0, void 0, void 0, function () { + var route, _b, body, headers, queryParams, bodyAsString, stringQueryParams, baseURL, defaultInit, res, processedBody, responseBody; + var urlParams = _a.urlParams, params = __rest(_a, ["urlParams"]); + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + route = routes[routeName]; + _b = options.skipInputValidation + ? params + : (0, validations_1.validateInputParams)(route, params, "fetch", { withIssuesInMessage: true }), body = _b.body, headers = _b.headers, queryParams = _b.queryParams; + bodyAsString = JSON.stringify(body); + stringQueryParams = queryParams && Object.keys(queryParams).length > 0 + ? "?" + (0, queryParamsToString_1.queryParamsToString)(queryParams) + : ""; + baseURL = options.baseURL, defaultInit = __rest(options, ["baseURL"]); + return [4 /*yield*/, fetch((baseURL ? baseURL : "") + + replaceParamsInUrl(route.url, urlParams) + + stringQueryParams, __assign(__assign(__assign(__assign({}, defaultInit), { method: route.method }), (bodyAsString !== "{}" ? { body: bodyAsString } : {})), { headers: __assign(__assign({ "Content-Type": "application/json" }, defaultInit === null || defaultInit === void 0 ? void 0 : defaultInit.headers), (headers !== null && headers !== void 0 ? headers : {})) }))]; + case 1: + res = _c.sent(); + return [4 /*yield*/, responseTypeToResponseBody(res, route.responseType)]; + case 2: + processedBody = _c.sent(); + responseBody = options.skipResponseValidation + ? processedBody + : (0, validations_1.validateSchemaWithExplicitError)({ + adapterName: "fetch", + checkedSchema: "responses", + responseStatus: res.status, + params: processedBody, + route: route, + withIssuesInMessage: true, + }); + return [2 /*return*/, { body: responseBody, status: res.status }]; + } + }); + }); + }; + }; +}; +exports.createFetchHandlerCreator = createFetchHandlerCreator; +var responseTypeToResponseBody = function (res, responseType) { + switch (responseType) { + case "json": + return res.json(); + case "text": + return res.text(); + case "blob": + return res.blob(); + case "arrayBuffer": + return res.arrayBuffer(); + default: { + var exhaustiveCheck = responseType; + return exhaustiveCheck; + } + } +}; +var createFetchSharedClient = function (sharedRouters, fetch, config) { + if (config === void 0) { config = {}; } + return (0, __1.configureCreateHttpClient)((0, exports.createFetchHandlerCreator)(fetch, config))(sharedRouters); +}; +exports.createFetchSharedClient = createFetchSharedClient; +//# sourceMappingURL=createFetchSharedClient.js.map \ No newline at end of file diff --git a/fetch/createFetchSharedClient.js.map b/fetch/createFetchSharedClient.js.map new file mode 100644 index 0000000..2e9b572 --- /dev/null +++ b/fetch/createFetchSharedClient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"createFetchSharedClient.js","sourceRoot":"","sources":["../src/fetch/createFetchSharedClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/fetch/index.d.ts b/fetch/index.d.ts new file mode 100644 index 0000000..01dec98 --- /dev/null +++ b/fetch/index.d.ts @@ -0,0 +1 @@ +export { createFetchSharedClient } from "./createFetchSharedClient"; diff --git a/fetch/index.js b/fetch/index.js new file mode 100644 index 0000000..8588604 --- /dev/null +++ b/fetch/index.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createFetchSharedClient = void 0; +var createFetchSharedClient_1 = require("./createFetchSharedClient"); +Object.defineProperty(exports, "createFetchSharedClient", { enumerable: true, get: function () { return createFetchSharedClient_1.createFetchSharedClient; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/fetch/index.js.map b/fetch/index.js.map new file mode 100644 index 0000000..84b3586 --- /dev/null +++ b/fetch/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/fetch/index.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA"} \ No newline at end of file diff --git a/fetch/queryParamsToString.d.ts b/fetch/queryParamsToString.d.ts new file mode 100644 index 0000000..af4d3de --- /dev/null +++ b/fetch/queryParamsToString.d.ts @@ -0,0 +1,8 @@ +type RawQueryParams = { + [key: string]: string | boolean | number; +}; +export type QueryParams = { + [K in keyof T]: T[K]; +}; +export declare const queryParamsToString: >(queryParams: Q) => string; +export {}; diff --git a/fetch/queryParamsToString.js b/fetch/queryParamsToString.js new file mode 100644 index 0000000..d45b588 --- /dev/null +++ b/fetch/queryParamsToString.js @@ -0,0 +1,37 @@ +"use strict"; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.queryParamsToString = void 0; +var queryParamsToString = function (queryParams) { + return Object.keys(queryParams) + .reduce(function (acc, param) { return __spreadArray(__spreadArray([], __read(acc), false), __read((typeof queryParams[param] !== "undefined" + ? ["".concat(param.toString(), "=").concat(encodeURI(queryParams[param].toString()))] + : [])), false); }, []) + .join("&"); +}; +exports.queryParamsToString = queryParamsToString; +//# sourceMappingURL=queryParamsToString.js.map \ No newline at end of file diff --git a/fetch/queryParamsToString.js.map b/fetch/queryParamsToString.js.map new file mode 100644 index 0000000..23cacc0 --- /dev/null +++ b/fetch/queryParamsToString.js.map @@ -0,0 +1 @@ +{"version":3,"file":"queryParamsToString.js","sourceRoot":"","sources":["../src/fetch/queryParamsToString.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAM,mBAAmB,GAAG,UACjC,WAAc;IAEd,OAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAoB;SACzC,MAAM,CACL,UAAC,GAAa,EAAE,KAAK,IAAK,8CACrB,GAAG,kBACH,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,WAAW;QAC3C,CAAC,CAAC,CAAC,UAAG,KAAK,CAAC,QAAQ,EAAE,cAAI,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAE,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC,WAJiB,CAKzB,EACD,EAAE,CACH;SACA,IAAI,CAAC,GAAG,CAAC;AAVZ,CAUY,CAAC;AAbF,QAAA,mBAAmB,uBAajB"} \ No newline at end of file diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..abc702d --- /dev/null +++ b/index.d.ts @@ -0,0 +1,7 @@ +export { createCustomSharedClient } from "./createCustomSharedClient"; +export { configureCreateHttpClient } from "./configureCreateHttpClient"; +export type { HandlerCreator, HttpClient, HttpResponse, } from "./configureCreateHttpClient"; +export { defineRoutes, defineRoute, listRoutes } from "./defineRoutes"; +export type { HttpMethod, SharedRoute, UnknownSharedRoute, UnknownSharedRouteWithUrl, } from "./defineRoutes"; +export type { PathParameters, Url } from "./pathParameters"; +export { keys } from "./pathParameters"; diff --git a/index.js b/index.js new file mode 100644 index 0000000..601e71f --- /dev/null +++ b/index.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.keys = exports.listRoutes = exports.defineRoute = exports.defineRoutes = exports.configureCreateHttpClient = exports.createCustomSharedClient = void 0; +var createCustomSharedClient_1 = require("./createCustomSharedClient"); +Object.defineProperty(exports, "createCustomSharedClient", { enumerable: true, get: function () { return createCustomSharedClient_1.createCustomSharedClient; } }); +var configureCreateHttpClient_1 = require("./configureCreateHttpClient"); +Object.defineProperty(exports, "configureCreateHttpClient", { enumerable: true, get: function () { return configureCreateHttpClient_1.configureCreateHttpClient; } }); +var defineRoutes_1 = require("./defineRoutes"); +Object.defineProperty(exports, "defineRoutes", { enumerable: true, get: function () { return defineRoutes_1.defineRoutes; } }); +Object.defineProperty(exports, "defineRoute", { enumerable: true, get: function () { return defineRoutes_1.defineRoute; } }); +Object.defineProperty(exports, "listRoutes", { enumerable: true, get: function () { return defineRoutes_1.listRoutes; } }); +var pathParameters_1 = require("./pathParameters"); +Object.defineProperty(exports, "keys", { enumerable: true, get: function () { return pathParameters_1.keys; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/index.js.map b/index.js.map new file mode 100644 index 0000000..98e7fc4 --- /dev/null +++ b/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";;;AAAA,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA;AACjC,yEAAwE;AAA/D,sIAAA,yBAAyB,OAAA;AAMlC,+CAAuE;AAA9D,4GAAA,YAAY,OAAA;AAAE,2GAAA,WAAW,OAAA;AAAE,0GAAA,UAAU,OAAA;AAQ9C,mDAAwC;AAA/B,sGAAA,IAAI,OAAA"} \ No newline at end of file diff --git a/openapi/createOpenApiGenerator.d.ts b/openapi/createOpenApiGenerator.d.ts new file mode 100644 index 0000000..f062b87 --- /dev/null +++ b/openapi/createOpenApiGenerator.d.ts @@ -0,0 +1,49 @@ +import { OpenAPIV3_1 as OpenAPI } from "openapi-types"; +import { z } from "zod"; +import { PathParameters, UnknownSharedRoute } from ".."; +type OmitFromExisting = Omit; +type Examples = { + [media: string]: OpenAPI.ExampleObject & { + value?: T; + }; +}; +type WithExampleOrExamples = { + example?: T; + examples?: never; +} | { + example?: never; + examples?: Examples; +}; +type OpenApiBody = Pick & { + example?: T; + examples?: Examples; +}; +type ExtraDocParameter = Partial> & WithExampleOrExamples; +type CreateOpenApiGenerator = ; +}, SecuritySchemeName extends string>(sharedRoutesByTag: SharedRoutesByTag, openApiRootDoc: Omit & { + components?: OmitFromExisting & { + securitySchemes?: Record; + }; +}) => (extraDataByRoute: Partial<{ + [Tag in keyof SharedRoutesByTag]: { + [R in keyof SharedRoutesByTag[Tag]]: OmitFromExisting & { + extraDocs: { + securitySchemeToApply?: SecuritySchemeName[]; + urlParams?: PathParameters extends Record ? never : Record, ExtraDocParameter>; + body?: z.infer extends void ? never : OpenApiBody>; + queryParams?: z.infer extends void ? never : { + [K in keyof z.infer]: ExtraDocParameter[K]>; + }; + headerParams?: z.infer extends void ? never : { + [K in keyof z.infer]: ExtraDocParameter[K]>; + }; + responses: { + [S in keyof SharedRoutesByTag[Tag][R]["responses"]]: OpenAPI.ResponseObject & WithExampleOrExamples>; + }; + }; + }; + }; +}>) => OpenAPI.Document; +export declare const createOpenApiGenerator: CreateOpenApiGenerator; +export {}; diff --git a/openapi/createOpenApiGenerator.js b/openapi/createOpenApiGenerator.js new file mode 100644 index 0000000..3ee11f8 --- /dev/null +++ b/openapi/createOpenApiGenerator.js @@ -0,0 +1,151 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createOpenApiGenerator = void 0; +var zod_to_json_schema_1 = require("zod-to-json-schema"); +var __1 = require(".."); +var extractFromOpenApiBody = function (openApiRequestBody) { + if (openApiRequestBody === void 0) { openApiRequestBody = {}; } + var examples = openApiRequestBody.examples, example = openApiRequestBody.example, rest = __rest(openApiRequestBody, ["examples", "example"]); + return { + withRequestBodyExemple: __assign(__assign({}, (example && { example: example })), (examples && { examples: examples })), + requestBodyDocs: rest, + }; +}; +var createOpenApiGenerator = function (sharedRoutesByTag, openApiRootDoc) { return function (extraDataByRoute) { return (__assign(__assign({}, openApiRootDoc), { paths: (0, __1.keys)(sharedRoutesByTag).reduce(function (rootAcc, tag) { + var sharedRoutes = sharedRoutesByTag[tag]; + return __assign(__assign({}, rootAcc), (0, __1.keys)(sharedRoutes).reduce(function (acc, routeName) { + var _a, _b; + var _c, _d; + var route = sharedRoutes[routeName]; + var _e = (_d = (_c = extraDataByRoute[tag]) === null || _c === void 0 ? void 0 : _c[routeName]) !== null && _d !== void 0 ? _d : {}, extraDocs = _e.extraDocs, extraDataForRoute = __rest(_e, ["extraDocs"]); + var _f = extractFromUrl(route.url, extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.urlParams), formattedUrl = _f.formattedUrl, pathParams = _f.pathParams; + var parameters = __spreadArray(__spreadArray(__spreadArray([], __read((pathParams.length > 0 ? pathParams : [])), false), __read((!isShapeObjectEmpty(route.queryParamsSchema) + ? zodObjectToParameters(route.queryParamsSchema, "query", extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.queryParams) + : [])), false), __read((!isShapeObjectEmpty(route.headersSchema) + ? zodObjectToParameters(route.headersSchema, "header", extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.headerParams) + : [])), false); + var _g = extractFromOpenApiBody(extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.body), withRequestBodyExemple = _g.withRequestBodyExemple, requestBodyDocs = _g.requestBodyDocs; + return __assign(__assign({}, acc), (_a = {}, _a[formattedUrl] = __assign(__assign({}, acc[formattedUrl]), (_b = {}, _b[route.method] = __assign(__assign(__assign(__assign(__assign(__assign({}, extraDataForRoute), { tags: [tag] }), ((extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.securitySchemeToApply) && + securitySchemeNamesToSecurity(extraDocs.securitySchemeToApply))), (parameters.length > 0 && { + parameters: parameters, + })), (!isShapeObjectEmpty(route.requestBodySchema) && { + requestBody: { + required: true, + content: { + "application/json": __assign(__assign({}, withRequestBodyExemple), { schema: __assign(__assign({}, requestBodyDocs), zodToOpenApi(route.requestBodySchema)) }), + }, + }, + })), { responses: (0, __1.keys)(route.responses).reduce(function (acc, status) { + var _a; + var _b, _c; + var responseSchema = zodToOpenApi(route.responses[status]); + var responseSchemaType = responseSchema.type; + var _d = (_c = (_b = extraDocs === null || extraDocs === void 0 ? void 0 : extraDocs.responses) === null || _b === void 0 ? void 0 : _b[status]) !== null && _c !== void 0 ? _c : {}, example = _d.example, examples = _d.examples, responseDoc = __rest(_d, ["example", "examples"]); + return __assign(__assign({}, acc), (_a = {}, _a[status.toString()] = __assign(__assign({}, responseDoc), (responseSchemaType !== undefined && { + content: { + "application/json": __assign(__assign(__assign({}, (example && { example: example })), (examples && { examples: examples })), { schema: responseSchema }), + }, + })), _a)); + }, {}) }), _b)), _a)); + }, {})); + }, {}) })); }; }; +exports.createOpenApiGenerator = createOpenApiGenerator; +var extractFromUrl = function (url, extraUrlParameters) { + var pathParams = []; + var formattedUrl = url.replace(/:(.*?)(\/|$)/g, function (_match, group1, group2) { + var _a; + var extraDocForParam = extraUrlParameters === null || extraUrlParameters === void 0 ? void 0 : extraUrlParameters[group1]; + pathParams.push(__assign(__assign({}, extraDocForParam), { name: group1, required: true, schema: { type: "string" }, in: "path" })); + return (_a = "{".concat(group1, "}") + group2) !== null && _a !== void 0 ? _a : ""; + }); + return { + formattedUrl: formattedUrl, + pathParams: pathParams, + }; +}; +var zodToOpenApi = function (schema) { + var _a = (0, zod_to_json_schema_1.zodToJsonSchema)(schema, { + $refStrategy: "none", + }), $schema = _a.$schema, additionalProperties = _a.additionalProperties, rest = __rest(_a, ["$schema", "additionalProperties"]); + return rest; +}; +var isShapeObjectEmpty = function (schema) { + var typeName = getTypeName(schema); + if (typeName === "ZodObject") { + var shape = getShape(schema); + return Object.keys(shape).length === 0; + } + return typeName === undefined; +}; +var zodObjectToParameters = function (schema, paramKind, extraDocumentation) { + if (extraDocumentation === void 0) { extraDocumentation = {}; } + var shape = getShape(schema); + return Object.keys(shape).reduce(function (acc, paramName) { + var paramSchema = shape[paramName]; + var extraDoc = extraDocumentation[paramName]; + var initialTypeName = getTypeName(paramSchema); + var required = initialTypeName !== "ZodOptional"; + var schema = zodToOpenApi(required ? paramSchema : paramSchema._def.innerType); + return __spreadArray(__spreadArray([], __read(acc), false), [ + __assign(__assign({}, extraDoc), { in: paramKind, name: paramName, required: required, schema: schema }), + ], false); + }, []); +}; +var getTypeName = function (schema) { + return schema._def.typeName; +}; +var securitySchemeNamesToSecurity = function (securitySchemeToApply) { return ({ + security: securitySchemeToApply.reduce(function (securityAcc, securitySchemeName) { + var _a; + return __spreadArray(__spreadArray([], __read(securityAcc), false), [(_a = {}, _a[securitySchemeName] = [], _a)], false); + }, []), +}); }; +var getShape = function (schema) { return schema._def.shape(); }; +//# sourceMappingURL=createOpenApiGenerator.js.map \ No newline at end of file diff --git a/openapi/createOpenApiGenerator.js.map b/openapi/createOpenApiGenerator.js.map new file mode 100644 index 0000000..5e5c97a --- /dev/null +++ b/openapi/createOpenApiGenerator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"createOpenApiGenerator.js","sourceRoot":"","sources":["../src/openapi/createOpenApiGenerator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openapi/index.d.ts b/openapi/index.d.ts new file mode 100644 index 0000000..015624c --- /dev/null +++ b/openapi/index.d.ts @@ -0,0 +1 @@ +export { createOpenApiGenerator } from "./createOpenApiGenerator"; diff --git a/openapi/index.js b/openapi/index.js new file mode 100644 index 0000000..e86a5ba --- /dev/null +++ b/openapi/index.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createOpenApiGenerator = void 0; +var createOpenApiGenerator_1 = require("./createOpenApiGenerator"); +Object.defineProperty(exports, "createOpenApiGenerator", { enumerable: true, get: function () { return createOpenApiGenerator_1.createOpenApiGenerator; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/openapi/index.js.map b/openapi/index.js.map new file mode 100644 index 0000000..07ca7a2 --- /dev/null +++ b/openapi/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/openapi/index.ts"],"names":[],"mappings":";;;AAAA,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA"} \ No newline at end of file diff --git a/package.json b/package.json index b86e228..f76044c 100755 --- a/package.json +++ b/package.json @@ -6,22 +6,6 @@ "type": "git", "url": "git@github.com:JeromeBu/shared-routes.git" }, - "scripts": { - "typecheck": "tsc --noEmit -p test", - "build": "pnpm build:cjs && pnpm build:esm # && pnpm build:deno", - "watch": "tsc -w & tsc -p tsconfig.esm.json -w", - "build:cjs": "tsc", - "build:esm": "rm -rf dist/esm && tsc -p tsconfig.esm.json && js2mjs dist/esm", - "build:deno": "denoify", - "test": "vitest", - "lint:check": "eslint . --ext .ts,.tsx", - "lint": "npm run lint:check -- --fix", - "_format": "prettier '**/*.{ts,tsx,json,md}'", - "format": "npm run _format -- --write", - "format:check": "npm run _format -- --list-different", - "make-lib-linkable": "pnpm build:cjs && pnpm build:esm && ts-node --skipProject scripts/make-dist-linkable.ts", - "prepare": "husky install" - }, "lint-staged": { "*.{ts,tsx}": [ "eslint --fix" @@ -38,9 +22,126 @@ "author": "u/jeromebu", "license": "MIT", "files": [ - "src/", - "dist/", - "!dist/tsconfig.tsbuildinfo" + "src/axios/createAxiosSharedClient.ts", + "src/axios/index.ts", + "src/configureCreateHttpClient.ts", + "src/createCustomSharedClient.ts", + "src/defineRoutes.ts", + "src/express/createExpressSharedRouter.ts", + "src/express/index.ts", + "src/fetch/createFetchSharedClient.ts", + "src/fetch/index.ts", + "src/fetch/queryParamsToString.ts", + "src/index.ts", + "src/openapi/createOpenApiGenerator.ts", + "src/openapi/index.ts", + "src/pathParameters.ts", + "src/supertest/createSupertestSharedClient.ts", + "src/supertest/index.ts", + "src/validations.ts", + "axios/createAxiosSharedClient.d.ts", + "axios/createAxiosSharedClient.js", + "axios/createAxiosSharedClient.js.map", + "axios/index.d.ts", + "axios/index.js", + "axios/index.js.map", + "configureCreateHttpClient.d.ts", + "configureCreateHttpClient.js", + "configureCreateHttpClient.js.map", + "createCustomSharedClient.d.ts", + "createCustomSharedClient.js", + "createCustomSharedClient.js.map", + "defineRoutes.d.ts", + "defineRoutes.js", + "defineRoutes.js.map", + "esm/axios/createAxiosSharedClient.d.ts", + "esm/axios/createAxiosSharedClient.mjs", + "esm/axios/createAxiosSharedClient.mjs.map", + "esm/axios/index.d.ts", + "esm/axios/index.mjs", + "esm/axios/index.mjs.map", + "esm/configureCreateHttpClient.d.ts", + "esm/configureCreateHttpClient.mjs", + "esm/configureCreateHttpClient.mjs.map", + "esm/createCustomSharedClient.d.ts", + "esm/createCustomSharedClient.mjs", + "esm/createCustomSharedClient.mjs.map", + "esm/defineRoutes.d.ts", + "esm/defineRoutes.mjs", + "esm/defineRoutes.mjs.map", + "esm/express/createExpressSharedRouter.d.ts", + "esm/express/createExpressSharedRouter.mjs", + "esm/express/createExpressSharedRouter.mjs.map", + "esm/express/index.d.ts", + "esm/express/index.mjs", + "esm/express/index.mjs.map", + "esm/fetch/createFetchSharedClient.d.ts", + "esm/fetch/createFetchSharedClient.mjs", + "esm/fetch/createFetchSharedClient.mjs.map", + "esm/fetch/index.d.ts", + "esm/fetch/index.mjs", + "esm/fetch/index.mjs.map", + "esm/fetch/queryParamsToString.d.ts", + "esm/fetch/queryParamsToString.mjs", + "esm/fetch/queryParamsToString.mjs.map", + "esm/index.d.ts", + "esm/index.mjs", + "esm/index.mjs.map", + "esm/openapi/createOpenApiGenerator.d.ts", + "esm/openapi/createOpenApiGenerator.mjs", + "esm/openapi/createOpenApiGenerator.mjs.map", + "esm/openapi/index.d.ts", + "esm/openapi/index.mjs", + "esm/openapi/index.mjs.map", + "esm/pathParameters.d.ts", + "esm/pathParameters.mjs", + "esm/pathParameters.mjs.map", + "esm/supertest/createSupertestSharedClient.d.ts", + "esm/supertest/createSupertestSharedClient.mjs", + "esm/supertest/createSupertestSharedClient.mjs.map", + "esm/supertest/index.d.ts", + "esm/supertest/index.mjs", + "esm/supertest/index.mjs.map", + "esm/tsconfig.esm.tsbuildinfo", + "esm/validations.d.ts", + "esm/validations.mjs", + "esm/validations.mjs.map", + "express/createExpressSharedRouter.d.ts", + "express/createExpressSharedRouter.js", + "express/createExpressSharedRouter.js.map", + "express/index.d.ts", + "express/index.js", + "express/index.js.map", + "fetch/createFetchSharedClient.d.ts", + "fetch/createFetchSharedClient.js", + "fetch/createFetchSharedClient.js.map", + "fetch/index.d.ts", + "fetch/index.js", + "fetch/index.js.map", + "fetch/queryParamsToString.d.ts", + "fetch/queryParamsToString.js", + "fetch/queryParamsToString.js.map", + "index.d.ts", + "index.js", + "index.js.map", + "openapi/createOpenApiGenerator.d.ts", + "openapi/createOpenApiGenerator.js", + "openapi/createOpenApiGenerator.js.map", + "openapi/index.d.ts", + "openapi/index.js", + "openapi/index.js.map", + "pathParameters.d.ts", + "pathParameters.js", + "pathParameters.js.map", + "supertest/createSupertestSharedClient.d.ts", + "supertest/createSupertestSharedClient.js", + "supertest/createSupertestSharedClient.js.map", + "supertest/index.d.ts", + "supertest/index.js", + "supertest/index.js.map", + "validations.d.ts", + "validations.js", + "validations.js.map" ], "keywords": [], "homepage": "https://jeromebu.gitbook.io/shared-routes", @@ -75,39 +176,39 @@ "zod": "^3.21.4", "zod-to-json-schema": "^3.21.0" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", - "module": "dist/esm/index.mjs", + "main": "index.js", + "types": "index.d.ts", + "module": "esm/index.mjs", "exports": { ".": { - "require": "./dist/index.js", - "import": "./dist/esm/index.mjs", - "types": "./dist/index.d.ts" + "require": "./index.js", + "import": "./esm/index.mjs", + "types": "./index.d.ts" }, "./axios": { - "require": "./dist/axios/index.js", - "import": "./dist/esm/axios/index.mjs", - "types": "./dist/axios/index.d.ts" + "require": "./axios/index.js", + "import": "./esm/axios/index.mjs", + "types": "./axios/index.d.ts" }, "./fetch": { - "require": "./dist/fetch/index.js", - "import": "./dist/esm/fetch/index.mjs", - "types": "./dist/fetch/index.d.ts" + "require": "./fetch/index.js", + "import": "./esm/fetch/index.mjs", + "types": "./fetch/index.d.ts" }, "./express": { - "require": "./dist/express/index.js", - "import": "./dist/esm/express/index.mjs", - "types": "./dist/express/index.d.ts" + "require": "./express/index.js", + "import": "./esm/express/index.mjs", + "types": "./express/index.d.ts" }, "./supertest": { - "require": "./dist/supertest/index.js", - "import": "./dist/esm/supertest/index.mjs", - "types": "./dist/supertest/index.d.ts" + "require": "./supertest/index.js", + "import": "./esm/supertest/index.mjs", + "types": "./supertest/index.d.ts" }, "./openapi": { - "require": "./dist/openapi/index.js", - "import": "./dist/esm/openapi/index.mjs", - "types": "./dist/openapi/index.d.ts" + "require": "./openapi/index.js", + "import": "./esm/openapi/index.mjs", + "types": "./openapi/index.d.ts" } } } diff --git a/pathParameters.d.ts b/pathParameters.d.ts new file mode 100644 index 0000000..c40384b --- /dev/null +++ b/pathParameters.d.ts @@ -0,0 +1,19 @@ +type Http = "http://" | "https://"; +type AbsoluteUrl = `${Http}${string}`; +type RelativeUrl = `/${string}`; +export type Url = AbsoluteUrl | RelativeUrl; +interface ParamsDictionary { + [key: string]: string; +} +type RemoveDomain = S extends RelativeUrl ? S : S extends `${Http}${string}${"/"}${infer P}` ? `/${P}` : "/"; +type RemoveTail = S extends `${infer P}${Tail}` ? P : S; +type GetRouteParameter = RemoveTail, `-${string}`>, `.${string}`>; +export type PathParameters = string extends Route ? ParamsDictionary : RemoveDomain extends `${string}:${infer Rest}` ? (GetRouteParameter extends never ? ParamsDictionary : GetRouteParameter extends `${infer ParamName}?` ? { + [P in ParamName]?: string; +} : { + [P in GetRouteParameter]: string; +}) & (Rest extends `${GetRouteParameter}${infer Next}` ? PathParameters : unknown) : {}; +export type ReplaceParamsInUrl = (path: U, params: PathParameters) => Url; +export declare const replaceParamsInUrl: ReplaceParamsInUrl; +export declare const keys: >(obj: Obj) => (keyof Obj)[]; +export {}; diff --git a/pathParameters.js b/pathParameters.js new file mode 100644 index 0000000..653d9ab --- /dev/null +++ b/pathParameters.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.keys = exports.replaceParamsInUrl = void 0; +var replaceParamsInUrl = function (url, params) { + if (params === void 0) { params = {}; } + var paramNames = (0, exports.keys)(params); + if (paramNames.length === 0) + return url; + return paramNames.reduce(function (acc, paramName) { return acc.replace(":".concat(paramName.toString()), params[paramName]); }, url); +}; +exports.replaceParamsInUrl = replaceParamsInUrl; +var keys = function (obj) { + return Object.keys(obj); +}; +exports.keys = keys; +//# sourceMappingURL=pathParameters.js.map \ No newline at end of file diff --git a/pathParameters.js.map b/pathParameters.js.map new file mode 100644 index 0000000..8a59e2d --- /dev/null +++ b/pathParameters.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pathParameters.js","sourceRoot":"","sources":["src/pathParameters.ts"],"names":[],"mappings":";;;AA+CO,IAAM,kBAAkB,GAAuB,UACpD,GAAG,EACH,MAAyC;IAAzC,uBAAA,EAAA,SAAS,EAAgC;IAEzC,IAAM,UAAU,GAAG,IAAA,YAAI,EAAC,MAAM,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,UAAU,CAAC,MAAM,CACtB,UAAC,GAAG,EAAE,SAAS,IAAK,OAAA,GAAG,CAAC,OAAO,CAAC,WAAI,SAAS,CAAC,QAAQ,EAAE,CAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAA1D,CAA0D,EAC9E,GAAU,CACX,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,kBAAkB,sBAU7B;AAEK,IAAM,IAAI,GAAG,UAAsC,GAAQ;IAChE,OAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAkB;AAAjC,CAAiC,CAAC;AADvB,QAAA,IAAI,QACmB"} \ No newline at end of file diff --git a/supertest/createSupertestSharedClient.d.ts b/supertest/createSupertestSharedClient.d.ts new file mode 100644 index 0000000..b77e0ad --- /dev/null +++ b/supertest/createSupertestSharedClient.d.ts @@ -0,0 +1,5 @@ +import type { UnknownSharedRoute } from ".."; +import { HandlerCreator } from ".."; +import type { SuperTest, Test } from "supertest"; +export declare const createSupertestHandlerCreator: (supertestRequest: SuperTest) => HandlerCreator; +export declare const createSupertestSharedClient: >(sharedRoutes: SharedRoutes, supertestRequest: SuperTest) => import("..").HttpClient; diff --git a/supertest/createSupertestSharedClient.js b/supertest/createSupertestSharedClient.js new file mode 100644 index 0000000..2844bf8 --- /dev/null +++ b/supertest/createSupertestSharedClient.js @@ -0,0 +1,82 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createSupertestSharedClient = exports.createSupertestHandlerCreator = void 0; +var __1 = require(".."); +var supertestRequestToCorrectHttpMethod = function (supertestRequest, method) { return supertestRequest[method]; }; +var createSupertestHandlerCreator = function (supertestRequest) { + return function (routeName, routes, replaceParamsInUrl) { + var route = routes[routeName]; + return function (_a) { + var _b = _a === void 0 ? {} : _a, headers = _b.headers, body = _b.body, queryParams = _b.queryParams, urlParams = _b.urlParams; + return __awaiter(void 0, void 0, void 0, function () { + var result; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: return [4 /*yield*/, supertestRequestToCorrectHttpMethod(supertestRequest, route.method)(replaceParamsInUrl(route.url, urlParams)) + .send(body) + .set(headers !== null && headers !== void 0 ? headers : {}) + .query(queryParams)]; + case 1: + result = _c.sent(); + return [2 /*return*/, __assign({ status: result.status, body: result.body }, (!Object.keys(route.responses).includes(result.status.toString()) && { + text: result.text, + }))]; + } + }); + }); + }; + }; +}; +exports.createSupertestHandlerCreator = createSupertestHandlerCreator; +var createSupertestSharedClient = function (sharedRoutes, supertestRequest) { + return (0, __1.configureCreateHttpClient)((0, exports.createSupertestHandlerCreator)(supertestRequest))(sharedRoutes); +}; +exports.createSupertestSharedClient = createSupertestSharedClient; +//# sourceMappingURL=createSupertestSharedClient.js.map \ No newline at end of file diff --git a/supertest/createSupertestSharedClient.js.map b/supertest/createSupertestSharedClient.js.map new file mode 100644 index 0000000..7769b09 --- /dev/null +++ b/supertest/createSupertestSharedClient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"createSupertestSharedClient.js","sourceRoot":"","sources":["../src/supertest/createSupertestSharedClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,wBAA+D;AAI/D,IAAM,mCAAmC,GAAG,UAC1C,gBAAiC,EACjC,MAAkB,IACO,OAAA,gBAAgB,CAAC,MAAM,CAAC,EAAxB,CAAwB,CAAC;AAE7C,IAAM,6BAA6B,GACxC,UAAC,gBAAiC;IAClC,OAAA,UAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB;QACpC,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,UAAO,EAA8C;gBAA9C,qBAA4C,EAAE,KAAA,EAA5C,OAAO,aAAA,EAAE,IAAI,UAAA,EAAE,WAAW,iBAAA,EAAE,SAAS,eAAA;;;;;gCACpC,qBAAM,mCAAmC,CACtD,gBAAgB,EAChB,KAAK,CAAC,MAAM,CACb,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;iCACxC,IAAI,CAAC,IAAI,CAAC;iCACV,GAAG,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;iCAClB,KAAK,CAAC,WAAW,CAAC,EAAA;;4BANf,MAAM,GAAG,SAMM;4BAErB,iCACE,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,IAAI,IACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI;oCACtE,IAAI,EAAE,MAAM,CAAC,IAAI;iCAClB,CAAC,GACF;;;;SACH,CAAC;IACJ,CAAC;AAnBD,CAmBC,CAAC;AArBS,QAAA,6BAA6B,iCAqBtC;AAEG,IAAM,2BAA2B,GAAG,UAGzC,YAA0B,EAC1B,gBAAiC;IAEjC,OAAA,IAAA,6BAAyB,EAAC,IAAA,qCAA6B,EAAC,gBAAgB,CAAC,CAAC,CACxE,YAAY,CACb;AAFD,CAEC,CAAC;AARS,QAAA,2BAA2B,+BAQpC"} \ No newline at end of file diff --git a/supertest/index.d.ts b/supertest/index.d.ts new file mode 100644 index 0000000..8854d2a --- /dev/null +++ b/supertest/index.d.ts @@ -0,0 +1 @@ +export { createSupertestSharedClient } from "./createSupertestSharedClient"; diff --git a/supertest/index.js b/supertest/index.js new file mode 100644 index 0000000..5ab31f3 --- /dev/null +++ b/supertest/index.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createSupertestSharedClient = void 0; +var createSupertestSharedClient_1 = require("./createSupertestSharedClient"); +Object.defineProperty(exports, "createSupertestSharedClient", { enumerable: true, get: function () { return createSupertestSharedClient_1.createSupertestSharedClient; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/supertest/index.js.map b/supertest/index.js.map new file mode 100644 index 0000000..221632d --- /dev/null +++ b/supertest/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/supertest/index.ts"],"names":[],"mappings":";;;AAAA,6EAA4E;AAAnE,0IAAA,2BAA2B,OAAA"} \ No newline at end of file diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo new file mode 100644 index 0000000..a6a68bb --- /dev/null +++ b/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.dom.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/typeAliases.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/util.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/ZodError.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/locales/en.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/errors.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/parseUtil.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/enumUtil.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/errorUtil.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/partialUtil.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/types.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/external.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/index.d.ts","../node_modules/.pnpm/zod@3.21.4/node_modules/zod/index.d.ts","../src/pathParameters.ts","../src/defineRoutes.ts","../src/configureCreateHttpClient.ts","../src/createCustomSharedClient.ts","../src/index.ts","../src/validations.ts","../node_modules/.pnpm/axios@1.4.0/node_modules/axios/index.d.ts","../src/axios/createAxiosSharedClient.ts","../src/axios/index.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/assert.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/assert/strict.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/globals.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/async_hooks.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/buffer.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/child_process.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/cluster.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/console.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/constants.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/crypto.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/dgram.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/dns.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/dns/promises.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/domain.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/dom-events.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/events.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/fs.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/fs/promises.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/http.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/http2.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/https.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/inspector.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/module.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/net.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/os.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/path.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/perf_hooks.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/process.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/punycode.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/querystring.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/readline.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/readline/promises.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/repl.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/stream.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/stream/promises.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/stream/consumers.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/stream/web.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/string_decoder.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/test.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/timers.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/timers/promises.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/tls.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/trace_events.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/tty.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/url.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/util.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/v8.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/vm.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/wasi.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/worker_threads.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/zlib.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/globals.global.d.ts","../node_modules/.pnpm/@types+node@18.14.0/node_modules/@types/node/index.d.ts","../node_modules/.pnpm/@types+mime@1.3.2/node_modules/@types/mime/index.d.ts","../node_modules/.pnpm/@types+send@0.17.1/node_modules/@types/send/index.d.ts","../node_modules/.pnpm/@types+range-parser@1.2.4/node_modules/@types/range-parser/index.d.ts","../node_modules/.pnpm/@types+qs@6.9.7/node_modules/@types/qs/index.d.ts","../node_modules/.pnpm/@types+express-serve-static-core@4.17.35/node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/.pnpm/@types+mime@3.0.1/node_modules/@types/mime/Mime.d.ts","../node_modules/.pnpm/@types+mime@3.0.1/node_modules/@types/mime/index.d.ts","../node_modules/.pnpm/@types+http-errors@2.0.1/node_modules/@types/http-errors/index.d.ts","../node_modules/.pnpm/@types+serve-static@1.15.2/node_modules/@types/serve-static/index.d.ts","../node_modules/.pnpm/@types+connect@3.4.35/node_modules/@types/connect/index.d.ts","../node_modules/.pnpm/@types+body-parser@1.19.2/node_modules/@types/body-parser/index.d.ts","../node_modules/.pnpm/@types+express@4.17.17/node_modules/@types/express/index.d.ts","../src/express/createExpressSharedRouter.ts","../src/express/index.ts","../src/fetch/queryParamsToString.ts","../node_modules/.pnpm/formdata-polyfill@4.0.10/node_modules/formdata-polyfill/esm.min.d.ts","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/file.d.ts","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/index.d.ts","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/from.d.ts","../node_modules/.pnpm/node-fetch@3.3.1/node_modules/node-fetch/@types/index.d.ts","../src/fetch/createFetchSharedClient.ts","../src/fetch/index.ts","../node_modules/.pnpm/openapi-types@12.1.0/node_modules/openapi-types/dist/index.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/Options.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/any.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/Refs.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/errorMessages.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/array.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/bigint.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/boolean.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/date.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/enum.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/intersection.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/literal.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/map.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/nativeEnum.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/never.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/null.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/nullable.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/number.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/object.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/string.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/record.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/set.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/tuple.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/undefined.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/union.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parsers/unknown.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/parseDef.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/src/zodToJsonSchema.d.ts","../node_modules/.pnpm/zod-to-json-schema@3.21.0_zod@3.21.4/node_modules/zod-to-json-schema/index.d.ts","../src/openapi/createOpenApiGenerator.ts","../src/openapi/index.ts","../node_modules/.pnpm/@types+cookiejar@2.1.2/node_modules/@types/cookiejar/index.d.ts","../node_modules/.pnpm/@types+superagent@4.1.18/node_modules/@types/superagent/index.d.ts","../node_modules/.pnpm/@types+supertest@2.0.12/node_modules/@types/supertest/index.d.ts","../src/supertest/createSupertestSharedClient.ts","../src/supertest/index.ts"],"fileInfos":[{"version":"f59215c5f1d886b05395ee7aca73e0ac69ddfad2843aa88530e797879d511bad","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"3dda5344576193a4ae48b8d03f105c86f20b2f2aff0a1d1fd7935f5d68649654","affectsGlobalScope":true},{"version":"9d9885c728913c1d16e0d2831b40341d6ad9a0ceecaabc55209b306ad9c736a5","affectsGlobalScope":true},{"version":"17bea081b9c0541f39dd1ae9bc8c78bdd561879a682e60e2f25f688c0ecab248","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"f06948deb2a51aae25184561c9640fb66afeddb34531a9212d011792b1d19e0a","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"5487b97cfa28b26b4a9ef0770f872bdbebd4c46124858de00f242c3eed7519f4","7a01f546ace66019156e4232a1bee2fabc2f8eabeb052473d926ee1693956265","fb53b1c6a6c799b7e3cc2de3fb5c9a1c04a1c60d4380a37792d84c5f8b33933b","8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","c2cb3c8ff388781258ea9ddbcd8a947f751bddd6886e1d3b3ea09ddaa895df80","f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","98a9cc18f661d28e6bd31c436e1984f3980f35e0f0aa9cf795c54f8ccb667ffe","c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","19903057d0249e45c579bef2b771c37609e4853a8b88adbb0b6b63f9e1d1f372","f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802",{"version":"be139d52709c57e683b367f8e3118a064130c670cd6814e7e5b927adaf2fbb21","signature":"c7c176a5a8a12c6b3d5b28c95320448f17c7d5438485c53a086dea69ed2e6801"},{"version":"a33b0928d741f3cc2d9d375350cb6d57d074323ba282d424d3aa0c89fd764eb6","signature":"a01ce36a4fa79bb209996f311b56369233c709c1ff49c056f768751b69ddab09"},{"version":"fc5f108e945ccda3f5ccf6f05ce84f9aaf0d51f8988a2994abe1af71c88524fa","signature":"44a17461f4133206989c5b56a7ed0d77d485f866c43afa5b144a2a1587fe0150"},{"version":"454671610b0389f294e74f0ffbf4d72c926d9e11da889d359674ae4e3224ef6b","signature":"70aad179112a492efbeed445504038ea12e90db5f6ecf452bd13b606e9263cd9"},{"version":"76c0556d36524e5a16ef84d239fb3992c7cdef0a5535f5f63349917cca1c414c","signature":"c4acec2b887b9279da570a4f056c51a61988231afabbd200590fff738e71e422"},{"version":"090107203b8abddb313ebf8e0791259ba3994cd9848e05bafd1e1eb8eac23311","signature":"e00cdcf103ee17e7f881640c0de60250dbbe5201452a786177992420d03955e7"},"1d729ea435a93e1a70519d06a6f13fa418c4c39a52b69e6db86750ebfcdf5554",{"version":"cc5a216ec084184c7888e53c94bcf6e6c01f1b069e879ca8cb1c4ed91eb9bd88","signature":"002ace4931001d9ea1f3717a109a41bf16dcfbb33fe8d9e848d8f2b791034eaf"},"2aa4a640d2afabc591928da1d45c45eedb060a69c17a90fa5e7fa0828aa15e27","7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true},"11e2d554398d2bd460e7d06b2fa5827a297c8acfbe00b4f894a224ac0862857f",{"version":"17a1140b90821c2c8d7064c9fc7598797c385714e6aa88b85e30b1159af8dc9b","affectsGlobalScope":true},"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","dab86d9604fe40854ef3c0a6f9e8948873dc3509213418e5e457f410fd11200f","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","5eec82ac21f84d83586c59a16b9b8502d34505d1393393556682fe7e7fde9ef2","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"2c45b35f4850881ab132f80d3cb51e8a359a4d8fafdc5ff2401d260dc27862f4","7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","a15eb098ed86a4135cba05d77e792d6189fa8607a00c9b1b381c0e9550c04ba5",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","c4577fb855ca259bdbf3ea663ca73988ce5f84251a92b4aef80a1f4122b6f98e","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"ff07a9a03c65732ccc59b3c65bc584173da093bd563a6565411c01f5703bd3cb","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"ed2a670a77a1b80653c5bde2d813b0ab2e92872cc9b2b611ce11050b95139be6","84e3bbd6f80983d468260fdbfeeb431cc81f7ea98d284d836e4d168e36875e86","aad5ffa61406b8e19524738fcf0e6fda8b3485bba98626268fdf252d1b2b630a","16d51f964ec125ad2024cf03f0af444b3bc3ec3614d9345cc54d09bab45c9a4c","ba601641fac98c229ccd4a303f747de376d761babb33229bb7153bed9356c9cc",{"version":"352fc8497a30bc806d7defa0043d85802e5f35a7688731ee9a21456f5cb32a94","affectsGlobalScope":true},"5b9ecf7da4d71cf3832dbb8336150fa924631811f488ad4690c2dfec2b4fb1d7","951c85f75aac041dddbedfedf565886a7b494e29ec1532e2a9b4a6180560b50e","f463d61cf39c3a6a5f96cdf7adfdb72a0b1d663f7b5d5b6dd042adba835430c2","f7a9cb83c8fbc081a8b605880d191e0d0527cde2c1b2b2b623beca8f0203a2cd","6d829824ead8999f87b6df21200df3c6150391b894b4e80662caa462bd48d073","afc559c1b93df37c25aef6b3dfa2d64325b0e112e887ee18bf7e6f4ec383fc90","43cdd474c5aa3340da4816bb8f1ae7f3b1bcf9e70d997afc36a0f2c432378c84",{"version":"740da0b5f25141d6fd70b215899faea3108db0e61ace8c2636fe3ad129a5182a","signature":"1ebb58c3210e488446f87753fe1998eeab336feaea8aeb1fae67e173a42a03da"},"fa00eede2b2640bcfec133440377a75fc7d4647affa0aa68d1dad3626ec441db",{"version":"69571e322ffb287ea739ba2a674369b3790974f717e8a47d969f84543cde2da2","signature":"4714df73aa332341fd02da657beb85950e4c60eed5c7520b203e5b52b15ed992"},"d782e571cb7d6ec0f0645957ed843d00e3f8577e08cc2940f400c931bc47a8df","9167246623f181441e6116605221268d94e33a1ebd88075e2dc80133c928ae7e","dc1a838d8a514b6de9fbce3bd5e6feb9ccfe56311e9338bb908eb4d0d966ecaf","186f09ed4b1bc1d5a5af5b1d9f42e2d798f776418e82599b3de16423a349d184","d692ae73951775d2448df535ce8bc8abf162dc343911fedda2c37b8de3b20d8e",{"version":"8a804c372ae43a1e5c4a36b6acfbff9beb8e61a31db60f4bbddb12054a98244e","signature":"e3e111e077027bc3f8ed326df065b482b1a23d9fc67df36c3abb14876acea721"},"8b3b10df45a1ec07333e61a4b2ed7c01a2ca295688db942bc1220d328c86eb72","cc3e30832aff12a575919d59eb3d680ca7cc999e1041bb0fc489dbe0276b066b","dd804b99db086f2f0e24bb373d2a1e9d9177f32f5c8f2c7b37c99accdf835e0c","e70f03e85bc8a2385e538a2db0c9ee532f6a9b346872aa809f173a26df7caee1","264808a845721a9f3df608a5e7ed12537f976d1645f20cbb448b106068f82332","8d484f5d6fd888f53e7cc21957ec2370461c73d230efb3467b9fb1822901535b","df73b0c2aa1ffa4a9aebd72baee78edf77ce5023d4476c04eadadbcdeb2964dc","065cbd81319d18ffc3b81100fbc60da26daf7fa090b26edf7dd3cc8c1a6cfbc5","771c436459c7a2ac2604ffa55a3abd76ffe8cae6aeae700d749f0fa5e8869ff6","7d4a2dae1a1ee3b99563747fa815076956911a833954deed5a4aa2d9207df167","45f6cd001ba50294b3e9a43800b22e0798cdcdc20c214cafd55d4d7d1914c331","b81b383239d2f4f14515331d7017febcb23786d90c5acc9688a891010fe25d4c","c60f24b4fd55376e4e095914d8f5345f63b7028d50fc8a0b7ec930f82777cacf","5754e79fbbfbb921b60ca1ad35cfbb5940733d93110bb1a935584f90cedb1c68","f7fcb70b90e9664b1ff1fb8566d3af99ca1a057d0dcfb94fb69b430463acba27","fb3af1e7369a6a52e0382612036ddcea2d089cdb0cccadc968a975043621e5fa","51353ffcc4bec12870c1435205dcaedab91ef108123017fd50fe8c3aed2bec04","e26befbe9607e9915734929db869fd83943f66e08c8e59d7308c14f6b6e755a3","4f596be4c3cb6ab63476dfa81bfe5f2a75768b6fd966d4c716411b4daa98df11","6d0e44cb89017602b13264823b15ada2a38e2ccb2a831c3e57680a0eb57d4bed","5e3f90d8fbf438ecb335d40e7a830f8deba1f045a2c3a27a8f5a4cdf8f499422","3a98713a36fe040df4d7e10a9e57a983f814f5cac42d3fe7919a342a6b9c103f","5dbaf247d7887721b20d8cf0a127460782ebbdc4285868f831a2f48104f034b5","b44d4ecd18d153d893eb38bfd827c0d624ed6f8fed4d9622489d76b3e4847067","23a12ab68ec3b350709bc4c15ddd34d8afa5e94dfccb1346f663f2c4bdb4334a","c9dfb06ca7c62fc5a95d33362f66c2bf5bf78d61ab433e62ec44190ea4012910","8d8b8fea19a532864502cbe5b298aadc194b970d511998342e38e4b9dea98c48","97479d4a4ddc4f4db849e5d6daadda8d986f5a7c580a0d79b3763a536a62268f","7efebf1092b8e7dfd08b0e54ec7d86dfabfd505f820d89351d957bfbc0bb3db2","032ccc910e4f1baf0355a2e43bc535caec36b1e916e64491ec2cabea5593593b",{"version":"4cbf318f7c1f298841bf4c5458869bb69e4b8dc8b18250af718bca02d232f3b8","signature":"c20dcccad05651d65e749c164c2cd88a3fb35d46a4595a6633bfaa00bf9e35de"},"5379bd2adb109cb6c15e7f0367c2eb1986d837f9977f50915afe4fc1759522ba","8d48b8f8a377ade8dd1f000625bc276eea067f2529cc9cafdf082d17142107d6","214f291323316651737db8ca0db4c14ae568a429e59fc5b4f364dd80fe72d5f6","76232dbb982272b182a76ad8745a9b02724dc9896e2328ce360e2c56c64c9778",{"version":"59f881f3204250aa6778e81a5e81e777f4684b92160b78a127a91f7016bde8c6","signature":"a03049a303d95f933af688a1c541867127a1226a4a200325369c02a39320bab7"},"c16631ce27bbed5b2fe93a3b5a9b76c22b64c909633e9f9a2cca997bc890ac51"],"root":[[58,63],65,66,[133,135],141,142,172,173,177,178],"options":{"declaration":true,"downlevelIteration":true,"esModuleInterop":true,"jsx":4,"module":1,"newLine":1,"noFallthroughCasesInSwitch":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","sourceMap":true,"strict":true,"target":1},"fileIdsList":[[86,113,120,130],[86,113,120],[113],[83,86,113,120,122,123,124],[113,124,125,129,131],[113,127],[113,126],[67,113],[70,113],[71,76,104,113],[72,83,84,91,101,112,113],[72,73,83,91,113],[74,113],[75,76,84,92,113],[76,101,109,113],[77,79,83,91,113],[78,113],[79,80,113],[83,113],[81,83,113],[83,84,85,101,112,113],[83,84,85,98,101,104,113],[113,117],[79,86,91,101,112,113],[83,84,86,87,91,101,109,112,113],[86,88,101,109,112,113],[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119],[83,89,113],[90,112,113],[79,83,91,101,113],[92,113],[93,113],[70,94,113],[95,111,113,117],[96,113],[97,113],[83,98,99,113],[98,100,113,115],[71,83,101,102,103,104,113],[71,101,103,113],[101,102,113],[104,113],[105,113],[83,107,108,113],[107,108,113],[76,91,101,109,113],[110,113],[91,111,113],[71,86,97,112,113],[76,113],[101,113,114],[113,115],[113,116],[71,76,83,85,94,101,112,113,115,117],[101,113,118],[84,101,113,120,121],[86,113,120,127,128],[71,84,86,101,113,120,174],[113,175],[113,137,138],[86,113,120,136,139],[113,170],[57,113],[57,113,144,169],[113,146,169],[57,113,145,146,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168],[57,113,146,147,169],[57,113,146,147],[57,113,146,169],[57,113,146],[113,146],[57,113,146,158,169],[57,113,146,152,162,169],[56,113],[45,46,56,113],[47,48,113],[45,46,47,49,50,54,113],[46,47,113],[55,113],[47,113],[45,46,47,50,51,52,53,113],[59,62,63,64,113],[65,113],[57,58,59,113],[59,60,113],[57,58,113],[57,59,62,63,113,132],[113,133],[59,62,63,113,135,140],[113,141],[58,59,60,61,113],[57,62,113,143,171],[113,172],[62,113,176],[113,177],[57,59,60,113],[62,63,64],[57,58,59],[59,60],[57,58],[57,59,62,63,132],[62,63,140],[58,59,60,61],[57,62,143],[62,176]],"referencedMap":[[131,1],[130,2],[174,3],[125,4],[132,5],[128,3],[121,3],[126,6],[127,7],[67,8],[68,8],[70,9],[71,10],[72,11],[73,12],[74,13],[75,14],[76,15],[77,16],[78,17],[79,18],[80,18],[82,19],[81,20],[83,19],[84,21],[85,22],[69,23],[119,3],[86,24],[87,25],[88,26],[120,27],[89,28],[90,29],[91,30],[92,31],[93,32],[94,33],[95,34],[96,35],[97,36],[98,37],[99,37],[100,38],[101,39],[103,40],[102,41],[104,42],[105,43],[106,3],[107,44],[108,45],[109,46],[110,47],[111,48],[112,49],[113,50],[114,51],[115,52],[116,53],[117,54],[118,55],[124,3],[123,3],[122,56],[129,57],[175,58],[176,59],[64,3],[137,3],[139,60],[138,3],[136,3],[140,61],[143,3],[43,3],[44,3],[8,3],[10,3],[9,3],[2,3],[11,3],[12,3],[13,3],[14,3],[15,3],[16,3],[17,3],[18,3],[3,3],[4,3],[22,3],[19,3],[20,3],[21,3],[23,3],[24,3],[25,3],[5,3],[26,3],[27,3],[28,3],[29,3],[6,3],[33,3],[30,3],[31,3],[32,3],[34,3],[7,3],[35,3],[40,3],[41,3],[36,3],[37,3],[38,3],[39,3],[1,3],[42,3],[171,62],[144,63],[146,64],[147,65],[169,66],[145,3],[148,67],[149,68],[150,3],[151,3],[152,63],[153,69],[154,70],[155,69],[156,63],[157,3],[158,71],[159,72],[160,68],[161,69],[163,73],[164,67],[162,68],[165,69],[166,3],[167,69],[168,3],[170,64],[57,74],[47,75],[49,76],[55,77],[51,3],[52,3],[50,78],[53,74],[45,3],[46,3],[56,79],[48,80],[54,81],[65,82],[66,83],[60,84],[61,85],[59,86],[133,87],[134,88],[141,89],[142,90],[135,3],[62,91],[172,92],[173,93],[58,3],[177,94],[178,95],[63,96]],"exportedModulesMap":[[131,1],[130,2],[174,3],[125,4],[132,5],[128,3],[121,3],[126,6],[127,7],[67,8],[68,8],[70,9],[71,10],[72,11],[73,12],[74,13],[75,14],[76,15],[77,16],[78,17],[79,18],[80,18],[82,19],[81,20],[83,19],[84,21],[85,22],[69,23],[119,3],[86,24],[87,25],[88,26],[120,27],[89,28],[90,29],[91,30],[92,31],[93,32],[94,33],[95,34],[96,35],[97,36],[98,37],[99,37],[100,38],[101,39],[103,40],[102,41],[104,42],[105,43],[106,3],[107,44],[108,45],[109,46],[110,47],[111,48],[112,49],[113,50],[114,51],[115,52],[116,53],[117,54],[118,55],[124,3],[123,3],[122,56],[129,57],[175,58],[176,59],[64,3],[137,3],[139,60],[138,3],[136,3],[140,61],[143,3],[43,3],[44,3],[8,3],[10,3],[9,3],[2,3],[11,3],[12,3],[13,3],[14,3],[15,3],[16,3],[17,3],[18,3],[3,3],[4,3],[22,3],[19,3],[20,3],[21,3],[23,3],[24,3],[25,3],[5,3],[26,3],[27,3],[28,3],[29,3],[6,3],[33,3],[30,3],[31,3],[32,3],[34,3],[7,3],[35,3],[40,3],[41,3],[36,3],[37,3],[38,3],[39,3],[1,3],[42,3],[171,62],[144,63],[146,64],[147,65],[169,66],[145,3],[148,67],[149,68],[150,3],[151,3],[152,63],[153,69],[154,70],[155,69],[156,63],[157,3],[158,71],[159,72],[160,68],[161,69],[163,73],[164,67],[162,68],[165,69],[166,3],[167,69],[168,3],[170,64],[57,74],[47,75],[49,76],[55,77],[51,3],[52,3],[50,78],[53,74],[45,3],[46,3],[56,79],[48,80],[54,81],[65,97],[66,83],[60,98],[61,99],[59,100],[133,101],[134,88],[141,102],[142,90],[62,103],[172,104],[173,93],[177,105],[178,95],[63,99]],"semanticDiagnosticsPerFile":[131,130,174,125,132,128,121,126,127,67,68,70,71,72,73,74,75,76,77,78,79,80,82,81,83,84,85,69,119,86,87,88,120,89,90,91,92,93,94,95,96,97,98,99,100,101,103,102,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,124,123,122,129,175,176,64,137,139,138,136,140,143,43,44,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,171,144,146,147,169,145,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163,164,162,165,166,167,168,170,57,47,49,55,51,52,50,53,45,46,56,48,54,65,66,60,61,59,133,134,141,142,135,62,172,173,58,177,178,63]},"version":"5.1.3"} \ No newline at end of file diff --git a/validations.d.ts b/validations.d.ts new file mode 100644 index 0000000..1d0b8a0 --- /dev/null +++ b/validations.d.ts @@ -0,0 +1,24 @@ +import type { HandlerParams } from "./configureCreateHttpClient"; +import type { UnknownSharedRoute } from "./defineRoutes"; +export type ValidationOptions = { + skipInputValidation?: boolean; + skipResponseValidation?: boolean; +}; +type ExtractFromExisting = Extract; +type CheckedSchema = ExtractFromExisting; +export declare const validateSchemaWithExplicitError: ({ checkedSchema, params, route, adapterName, responseStatus, withIssuesInMessage, }: { + checkedSchema: ExtractFromExisting; + params: unknown; + route: R; + adapterName: string; + responseStatus?: undefined; + withIssuesInMessage?: boolean | undefined; +}) => unknown; +export declare const validateInputParams: (route: UnknownSharedRoute, params: HandlerParams, adapterName: string, options?: { + withIssuesInMessage: boolean; +}) => { + queryParams: unknown; + body: unknown; + headers: unknown; +}; +export {}; diff --git a/validations.js b/validations.js new file mode 100644 index 0000000..4e215bb --- /dev/null +++ b/validations.js @@ -0,0 +1,105 @@ +"use strict"; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validateInputParams = exports.validateSchemaWithExplicitError = void 0; +var explicitError = function (_a) { + var _b; + var route = _a.route, error = _a.error, adapterName = _a.adapterName, checkedSchema = _a.checkedSchema, statusCode = _a.statusCode, withIssuesInMessage = _a.withIssuesInMessage; + var newError = new Error(__spreadArray([ + "Shared-route schema '".concat(checkedSchema, "' was not respected in adapter '").concat(adapterName, "'."), + checkedSchema === "responses" && + "Received status: ".concat(statusCode, ". Handled statuses: ").concat(Object.keys(route.responses).join(", "), "."), + "Route: ".concat(route.method.toUpperCase(), " ").concat(route.url) + ], __read((withIssuesInMessage && ((_b = error === null || error === void 0 ? void 0 : error.issues) === null || _b === void 0 ? void 0 : _b.length) + ? ["Issues: " + issuesToString(error === null || error === void 0 ? void 0 : error.issues)] + : [])), false).filter(Boolean) + .join("\n")); + newError.cause = error; + return newError; +}; +var validateSchemaWithExplicitError = function (_a) { + var checkedSchema = _a.checkedSchema, _b = _a.params, params = _b === void 0 ? {} : _b, route = _a.route, adapterName = _a.adapterName, responseStatus = _a.responseStatus, _c = _a.withIssuesInMessage, withIssuesInMessage = _c === void 0 ? false : _c; + try { + if (checkedSchema === "responses") { + if (!responseStatus) + throw new Error("a response status is required when validating responses"); + var schema = route[checkedSchema][responseStatus]; + if (!schema) + throw new Error("No schema found for this status."); + return schema.parse(params); + } + return route[checkedSchema].parse(params); + } + catch (error) { + throw explicitError({ + route: route, + error: error, + adapterName: adapterName, + checkedSchema: checkedSchema, + statusCode: responseStatus, + withIssuesInMessage: withIssuesInMessage, + }); + } +}; +exports.validateSchemaWithExplicitError = validateSchemaWithExplicitError; +var validateInputParams = function (route, params, adapterName, options) { + if (options === void 0) { options = { + withIssuesInMessage: false, + }; } + var withIssuesInMessage = options.withIssuesInMessage; + var queryParams = (0, exports.validateSchemaWithExplicitError)({ + adapterName: adapterName, + checkedSchema: "queryParamsSchema", + params: params.queryParams, + route: route, + withIssuesInMessage: withIssuesInMessage, + }); + var body = (0, exports.validateSchemaWithExplicitError)({ + adapterName: adapterName, + checkedSchema: "requestBodySchema", + params: params.body, + route: route, + withIssuesInMessage: withIssuesInMessage, + }); + // we validate headers separately because we don't want to re-affect req.headers parsed value + // because we don't want to lose all other headers + (0, exports.validateSchemaWithExplicitError)({ + adapterName: adapterName, + checkedSchema: "headersSchema", + params: params.headers, + route: route, + }); + return { queryParams: queryParams, body: body, headers: params.headers }; +}; +exports.validateInputParams = validateInputParams; +var issuesToString = function (issues) { + return issues.map(function (_a) { + var message = _a.message, path = _a.path; + return "".concat(path.join("."), ": ").concat(message); + }).join(" | "); +}; +//# sourceMappingURL=validations.js.map \ No newline at end of file diff --git a/validations.js.map b/validations.js.map new file mode 100644 index 0000000..08ce6d3 --- /dev/null +++ b/validations.js.map @@ -0,0 +1 @@ +{"version":3,"file":"validations.js","sourceRoot":"","sources":["src/validations.ts"],"names":[],"mappings":"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"} \ No newline at end of file