From 41d2ac6125ae7cb0a4dca0975ec1a13463917f07 Mon Sep 17 00:00:00 2001 From: Landon Gavin Date: Sun, 7 Apr 2024 18:24:48 -0400 Subject: [PATCH 1/5] feat!: changing openapi generator Changed openapi code generator to @hey-api/openapi-ts. Not supporting all properties yet. Supporting new properties: - base - serviceResponse - enums - useDateType indent and useUnionTypes properties were removed left in for backwards compatibility. BREAKING CHANGE: changed from cjs to mjs --- .github/workflows/test.yml | 13 +- .gitignore | 1 + README.md | 22 +- examples/react-app/package.json | 6 +- examples/react-app/request.ts | 10 +- examples/react-app/src/App.tsx | 8 +- examples/react-app/tsconfig.json | 9 +- examples/react-app/tsconfig.openapi.json | 18 + package.json | 13 +- pnpm-lock.yaml | 1647 ++++++++++------- src/cli.mts | 93 + src/cli.ts | 39 - src/{common.ts => common.mts} | 17 + src/{constants.ts => constants.mts} | 0 src/createExports.mts | 51 + src/createExports.ts | 233 --- src/{createImports.ts => createImports.mts} | 74 +- src/{createSource.ts => createSource.mts} | 34 +- ...teUseMutation.ts => createUseMutation.mts} | 4 +- src/{createUseQuery.ts => createUseQuery.mts} | 34 +- src/generate.mts | 45 + src/generate.ts | 21 - src/{print.ts => print.mts} | 12 +- src/service.mts | 149 ++ src/{util.ts => util.mts} | 0 tsconfig.json | 8 +- 26 files changed, 1519 insertions(+), 1042 deletions(-) create mode 100644 examples/react-app/tsconfig.openapi.json create mode 100644 src/cli.mts delete mode 100644 src/cli.ts rename src/{common.ts => common.mts} (76%) rename src/{constants.ts => constants.mts} (100%) create mode 100644 src/createExports.mts delete mode 100644 src/createExports.ts rename src/{createImports.ts => createImports.mts} (56%) rename src/{createSource.ts => createSource.mts} (82%) rename src/{createUseMutation.ts => createUseMutation.mts} (99%) rename src/{createUseQuery.ts => createUseQuery.mts} (94%) create mode 100644 src/generate.mts delete mode 100644 src/generate.ts rename src/{print.ts => print.mts} (80%) create mode 100644 src/service.mts rename src/{util.ts => util.mts} (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b8d52b..b342969 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,23 +24,20 @@ jobs: - name: Install Node.js uses: actions/setup-node@v4 with: - node-version: 20 - cache: 'pnpm' + node-version: 18 + cache: "pnpm" - name: Install dependencies - run: pnpm -w install - + run: pnpm install --frozen-lockfile + - name: Build run: pnpm -w build - - name: Install dependencies in example app - run: pnpm --filter @7nohe/react-app install --no-frozen-lockfile - - name: Run codegen run: pnpm --filter @7nohe/react-app generate:api - name: Archive generated query file - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: generated-query-file-${{ matrix.os }} path: examples/react-app/openapi/queries/index.ts diff --git a/.gitignore b/.gitignore index 8cffc73..cf4419f 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ dist-ssr *.sw? openapi +*.tsbuildinfo diff --git a/README.md b/README.md index 494302d..cc46df5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - Supports generation of custom react hooks that use React Query's `useQuery` and `useMutation` hooks - Supports generation of query keys for query caching -- Supports the option to use pure TypeScript clients generated by [OpenAPI Typescript Codegen](https://github.com/ferdikoomen/openapi-typescript-codegen) +- Supports the option to use pure TypeScript clients generated by [@hey-api/openapi-ts](https://github.com/hey-api/openapi-ts) ## Install @@ -44,12 +44,24 @@ Options: -i, --input OpenAPI specification, can be a path, url or string content (required) -o, --output Output directory (default: "openapi") -c, --client HTTP client to generate [fetch, xhr, node, axios, angular] (default: "fetch") - --useUnionTypes Use union types (default: false) + --useUnionTypes Unused, will be removed in the next major version --exportSchemas Write schemas to disk (default: false) - --indent Indentation options [4, 2, tabs] (default: "4") + --indent Unused, will be removed in the next major version --postfixServices Service name postfix (default: "Service") - --postfixModels Modal name postfix + --postfixModels Unused, will be removed in the next major version --request Path to custom request file + --write Write the files to disk (true or false) + --useDateType Use Date type instead of string for date types for models, this will not convert the data to a Date object + --enums Generate JavaScript objects from enum definitions? + --base Manually set base in OpenAPI config instead of inferring from server value + --serviceResponse Define shape of returned value from service calls ['body', 'generics', 'response'] + --operationId Use operation ID to generate operation names? + --lint Process output folder with linter? + --name Custom client class name + --format Process output folder with formatter? + --exportCore Export core types + --exportModels Export models + --exportServices Export services -h, --help display help for command ``` @@ -70,7 +82,7 @@ $ openapi-rq -i ./petstore.yaml - common.ts <- common types - queries.ts <- generated query hooks - suspenses.ts <- generated suspense hooks - - requests <- output code generated by OpenAPI Typescript Codegen + - requests <- output code generated by @hey-api/openapi-ts ``` ### In your app diff --git a/examples/react-app/package.json b/examples/react-app/package.json index 950009f..fb997a7 100644 --- a/examples/react-app/package.json +++ b/examples/react-app/package.json @@ -9,8 +9,8 @@ "dev:mock": "prism mock ./petstore.yaml --dynamic", "build": "tsc && vite build", "preview": "vite preview", - "generate:api": "node ../../dist/src/cli.js -i ./petstore.yaml -c axios --exportSchemas=true --postfixServices=Client --request ./request.ts", - "test:generated": "tsc ./openapi/queries/index.ts --noEmit --target esnext --moduleResolution node" + "generate:api": "node ../../dist/cli.mjs -i ./petstore.yaml -c axios --request ./request.ts --postfixServices=Client", + "test:generated": "tsc -p ./tsconfig.openapi.json --noEmit" }, "dependencies": { "@tanstack/react-query": "^5.18.1", @@ -28,4 +28,4 @@ "typescript": "^5.3.3", "vite": "^5.0.12" } -} \ No newline at end of file +} diff --git a/examples/react-app/request.ts b/examples/react-app/request.ts index 5cf6f3a..45d6c86 100644 --- a/examples/react-app/request.ts +++ b/examples/react-app/request.ts @@ -1,5 +1,5 @@ import axios from "axios"; -import type { AxiosError, AxiosRequestConfig, AxiosResponse } from "axios"; +import type { RawAxiosRequestHeaders } from "axios"; import type { ApiRequestOptions } from "./ApiRequestOptions"; import { CancelablePromise } from "./CancelablePromise"; @@ -13,7 +13,7 @@ const axiosInstance = axios.create({ baseURL: "http://localhost:4010", headers: { // Your custom headers - }, + } satisfies RawAxiosRequestHeaders, }); // Add a request interceptor @@ -49,12 +49,12 @@ export const request = ( return new CancelablePromise((resolve, reject, onCancel) => { onCancel(() => source.cancel("The user aborted a request.")); - let formattedHeaders = options.headers; - if(options.mediaType) { + let formattedHeaders = options.headers as RawAxiosRequestHeaders; + if (options.mediaType) { formattedHeaders = { ...options.headers, "Content-Type": options.mediaType, - }; + } satisfies RawAxiosRequestHeaders; } return axiosInstance diff --git a/examples/react-app/src/App.tsx b/examples/react-app/src/App.tsx index 0e7e0c4..3c18510 100644 --- a/examples/react-app/src/App.tsx +++ b/examples/react-app/src/App.tsx @@ -14,7 +14,9 @@ function App() { const [tags, _setTags] = useState([]); const [limit, _setLimit] = useState(10); - const { data, error, refetch } = useDefaultClientFindPets({ tags, limit }); + const { data, error, refetch } = useDefaultClientFindPets({ + data: { tags, limit }, + }); // This is an example of a query that is not defined in the OpenAPI spec // this defaults to any - here we are showing how to override the type @@ -46,7 +48,9 @@ function App() { onClick={() => { addPet( { - requestBody: { name: "Duggy" }, + data: { + requestBody: { name: "Duggy" }, + }, }, { onSuccess: () => { diff --git a/examples/react-app/tsconfig.json b/examples/react-app/tsconfig.json index f5a7dd6..374b672 100644 --- a/examples/react-app/tsconfig.json +++ b/examples/react-app/tsconfig.json @@ -10,12 +10,15 @@ "strict": true, "forceConsistentCasingInFileNames": true, "module": "ESNext", - "moduleResolution": "Node", + "moduleResolution": "Bundler", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx" }, - "include": ["src", "openapi"], - "references": [{ "path": "./tsconfig.node.json" }] + "include": ["src"], + "references": [ + { "path": "./tsconfig.node.json" }, + { "path": "./tsconfig.openapi.json" } + ] } diff --git a/examples/react-app/tsconfig.openapi.json b/examples/react-app/tsconfig.openapi.json new file mode 100644 index 0000000..89de92d --- /dev/null +++ b/examples/react-app/tsconfig.openapi.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "composite": true, + "target": "ESNext", + "useDefineForClassFields": true, + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node10", + "resolveJsonModule": true, + "isolatedModules": true + }, + "include": ["openapi"] +} diff --git a/package.json b/package.json index 3420379..c9097e9 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,12 @@ "version": "0.5.3", "description": "OpenAPI React Query Codegen", "bin": { - "openapi-rq": "dist/src/cli.js" + "openapi-rq": "dist/cli.js" }, + "type": "module", + "workspaces": [ + "examples/*" + ], "scripts": { "build": "tsc -p tsconfig.json", "preview": "npm run build && npm -C examples/react-app run generate:api", @@ -27,21 +31,22 @@ "openapi", "swagger", "typescript", - "openapi-typescript-codegen" + "openapi-typescript-codegen", + "@hey-api/openapi-ts" ], "author": "Daiki Urata (@7nohe)", "license": "MIT", "devDependencies": { + "@hey-api/openapi-ts": "0.34.5", "@types/node": "^20.10.6", "commander": "^12.0.0", "glob": "^10.3.10", - "openapi-typescript-codegen": "0.25.0", "typescript": "^5.3.3" }, "peerDependencies": { + "@hey-api/openapi-ts": "0.34.5", "commander": ">= 11 < 13", "glob": ">= 10", - "openapi-typescript-codegen": "^0.24.0", "typescript": ">= 4.8.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c42746e..32e3ff1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,48 +8,30 @@ importers: .: devDependencies: + '@hey-api/openapi-ts': + specifier: 0.34.5 + version: 0.34.5 '@types/node': specifier: ^20.10.6 - version: 20.10.6 + version: 20.12.2 commander: specifier: ^12.0.0 version: 12.0.0 glob: specifier: ^10.3.10 - version: 10.3.10 - openapi-typescript-codegen: - specifier: 0.25.0 - version: 0.25.0 + version: 10.3.12 typescript: specifier: ^5.3.3 - version: 5.3.3 - - dist: - devDependencies: - '@types/node': - specifier: ^20.10.6 - version: 20.10.6 - commander: - specifier: ^12.0.0 - version: 12.0.0 - glob: - specifier: ^10.3.10 - version: 10.3.10 - openapi-typescript-codegen: - specifier: 0.26.0 - version: 0.26.0 - typescript: - specifier: ^5.3.3 - version: 5.3.3 + version: 5.4.3 examples/react-app: dependencies: '@tanstack/react-query': specifier: ^5.18.1 - version: 5.18.1(react@18.2.0) + version: 5.28.9(react@18.2.0) axios: specifier: ^1.6.7 - version: 1.6.7 + version: 1.6.8 form-data: specifier: ~4.0.0 version: 4.0.0 @@ -62,83 +44,72 @@ importers: devDependencies: '@stoplight/prism-cli': specifier: ^5.5.2 - version: 5.5.2 + version: 5.7.0 '@types/react': specifier: ^18.2.52 - version: 18.2.52 + version: 18.2.73 '@types/react-dom': specifier: ^18.2.18 - version: 18.2.18 + version: 18.2.23 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.0.12) + version: 4.2.1(vite@5.2.7) npm-run-all: specifier: ^4.1.5 version: 4.1.5 typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.4.3 vite: specifier: ^5.0.12 - version: 5.0.12(@types/node@20.10.6) + version: 5.2.7(@types/node@20.12.2) packages: - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@apidevtools/json-schema-ref-parser@11.1.0: - resolution: {integrity: sha512-g/VW9ZQEFJAOwAyUb8JFf7MLiLy2uEB4rU270rGzDwICxnxMlPy0O11KVePSgS36K1NI29gSlK84n5INGhd4Ag==} + /@apidevtools/json-schema-ref-parser@11.5.4: + resolution: {integrity: sha512-o2fsypTGU0WxRxbax8zQoHiIB4dyrkwYfcm8TxZ+bx9pCzcWZbQtiMqpgBvWA/nJ2TrGjK5adCLfTH8wUeU/Wg==} engines: {node: '>= 16'} dependencies: '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.14 - '@types/lodash.clonedeep': 4.5.9 + '@types/json-schema': 7.0.15 js-yaml: 4.1.0 - lodash.clonedeep: 4.5.0 dev: true - /@apidevtools/json-schema-ref-parser@9.0.9: - resolution: {integrity: sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==} - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.14 - call-me-maybe: 1.0.2 - js-yaml: 4.1.0 - dev: true - - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 dev: true - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data@7.24.1: + resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/core@7.24.3: + resolution: {integrity: sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.7 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) + '@babel/helpers': 7.24.1 + '@babel/parser': 7.24.1 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -148,13 +119,13 @@ packages: - supports-color dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.24.1: + resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true @@ -162,9 +133,9 @@ packages: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.1 '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 dev: true @@ -178,40 +149,40 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.3 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} dev: true @@ -219,18 +190,18 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} dev: true @@ -244,92 +215,93 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.23.7: - resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} + /@babel/helpers@7.24.1: + resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 dev: true - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + /@babel/parser@7.24.1: + resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + /@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + /@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.1 + '@babel/types': 7.24.0 dev: true - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.24.1 + '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true - /@esbuild/aix-ppc64@0.19.11: - resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -337,8 +309,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.11: - resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -346,8 +318,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.11: - resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -355,8 +327,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.11: - resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -364,8 +336,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.11: - resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -373,8 +345,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.11: - resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -382,8 +354,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.11: - resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -391,8 +363,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.11: - resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -400,8 +372,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.11: - resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -409,8 +381,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.11: - resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -418,8 +390,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.11: - resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -427,8 +399,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.11: - resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -436,8 +408,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.11: - resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -445,8 +417,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.11: - resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -454,8 +426,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.11: - resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -463,8 +435,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.11: - resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -472,8 +444,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.11: - resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -481,8 +453,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.11: - resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -490,8 +462,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.11: - resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -499,8 +471,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.11: - resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -508,8 +480,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.11: - resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -517,8 +489,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.11: - resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -526,8 +498,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.11: - resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -544,6 +516,18 @@ packages: engines: {node: '>=14.0.0', npm: '>=6.0.0'} dev: true + /@hey-api/openapi-ts@0.34.5: + resolution: {integrity: sha512-aW5Q2Mgm0vDZK42EBWHgDk8VLptGyREA23s8FyKeE37YaNsJB5PP+gbSM1jW0QuTGGXStHHP8dpxcVz6N4XmjA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + '@apidevtools/json-schema-ref-parser': 11.5.4 + c12: 1.10.0 + camelcase: 8.0.0 + commander: 12.0.0 + handlebars: 4.7.8 + dev: true + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -556,22 +540,22 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} dev: true @@ -579,10 +563,10 @@ packages: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: true @@ -597,126 +581,140 @@ packages: dev: true optional: true - /@rollup/rollup-android-arm-eabi@4.9.2: - resolution: {integrity: sha512-RKzxFxBHq9ysZ83fn8Iduv3A283K7zPPYuhL/z9CQuyFrjwpErJx0h4aeb/bnJ+q29GRLgJpY66ceQ/Wcsn3wA==} + /@rollup/rollup-android-arm-eabi@4.13.2: + resolution: {integrity: sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.9.2: - resolution: {integrity: sha512-yZ+MUbnwf3SHNWQKJyWh88ii2HbuHCFQnAYTeeO1Nb8SyEiWASEi5dQUygt3ClHWtA9My9RQAYkjvrsZ0WK8Xg==} + /@rollup/rollup-android-arm64@4.13.2: + resolution: {integrity: sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.9.2: - resolution: {integrity: sha512-vqJ/pAUh95FLc/G/3+xPqlSBgilPnauVf2EXOQCZzhZJCXDXt/5A8mH/OzU6iWhb3CNk5hPJrh8pqJUPldN5zw==} + /@rollup/rollup-darwin-arm64@4.13.2: + resolution: {integrity: sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.9.2: - resolution: {integrity: sha512-otPHsN5LlvedOprd3SdfrRNhOahhVBwJpepVKUN58L0RnC29vOAej1vMEaVU6DadnpjivVsNTM5eNt0CcwTahw==} + /@rollup/rollup-darwin-x64@4.13.2: + resolution: {integrity: sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.2: - resolution: {integrity: sha512-ewG5yJSp+zYKBYQLbd1CUA7b1lSfIdo9zJShNTyc2ZP1rcPrqyZcNlsHgs7v1zhgfdS+kW0p5frc0aVqhZCiYQ==} + /@rollup/rollup-linux-arm-gnueabihf@4.13.2: + resolution: {integrity: sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.2: - resolution: {integrity: sha512-pL6QtV26W52aCWTG1IuFV3FMPL1m4wbsRG+qijIvgFO/VBsiXJjDPE/uiMdHBAO6YcpV4KvpKtd0v3WFbaxBtg==} + /@rollup/rollup-linux-arm64-gnu@4.13.2: + resolution: {integrity: sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.2: - resolution: {integrity: sha512-On+cc5EpOaTwPSNetHXBuqylDW+765G/oqB9xGmWU3npEhCh8xu0xqHGUA+4xwZLqBbIZNcBlKSIYfkBm6ko7g==} + /@rollup/rollup-linux-arm64-musl@4.13.2: + resolution: {integrity: sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.2: - resolution: {integrity: sha512-Wnx/IVMSZ31D/cO9HSsU46FjrPWHqtdF8+0eyZ1zIB5a6hXaZXghUKpRrC4D5DcRTZOjml2oBhXoqfGYyXKipw==} + /@rollup/rollup-linux-powerpc64le-gnu@4.13.2: + resolution: {integrity: sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==} + cpu: [ppc64le] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.13.2: + resolution: {integrity: sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.2: - resolution: {integrity: sha512-ym5x1cj4mUAMBummxxRkI4pG5Vht1QMsJexwGP8547TZ0sox9fCLDHw9KCH9c1FO5d9GopvkaJsBIOkTKxksdw==} + /@rollup/rollup-linux-s390x-gnu@4.13.2: + resolution: {integrity: sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.13.2: + resolution: {integrity: sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.2: - resolution: {integrity: sha512-m0hYELHGXdYx64D6IDDg/1vOJEaiV8f1G/iO+tejvRCJNSwK4jJ15e38JQy5Q6dGkn1M/9KcyEOwqmlZ2kqaZg==} + /@rollup/rollup-linux-x64-musl@4.13.2: + resolution: {integrity: sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.2: - resolution: {integrity: sha512-x1CWburlbN5JjG+juenuNa4KdedBdXLjZMp56nHFSHTOsb/MI2DYiGzLtRGHNMyydPGffGId+VgjOMrcltOksA==} + /@rollup/rollup-win32-arm64-msvc@4.13.2: + resolution: {integrity: sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.2: - resolution: {integrity: sha512-VVzCB5yXR1QlfsH1Xw1zdzQ4Pxuzv+CPr5qpElpKhVxlxD3CRdfubAG9mJROl6/dmj5gVYDDWk8sC+j9BI9/kQ==} + /@rollup/rollup-win32-ia32-msvc@4.13.2: + resolution: {integrity: sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.2: - resolution: {integrity: sha512-SYRedJi+mweatroB+6TTnJYLts0L0bosg531xnQWtklOI6dezEagx4Q0qDyvRdK+qgdA3YZpjjGuPFtxBmddBA==} + /@rollup/rollup-win32-x64-msvc@4.13.2: + resolution: {integrity: sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /@stoplight/http-spec@6.0.2: - resolution: {integrity: sha512-6uQxW0ycJF3cUSthsv7u3EClGn6AgqkLW9Q0dlrxOYJ1iH5Rx6SJEGYtmnkbTc/iXX/LygyoQ40lk8ebpqSegQ==} + /@stoplight/http-spec@7.0.3: + resolution: {integrity: sha512-r9Y8rT4RbqY7NWqSXjiqtBq0Nme2K5cArSX9gDPeuud8F4CwbizP7xkUwLdwDdHgoJkyIQ3vkFJpHzUVCQeOOA==} engines: {node: '>=14.13'} dependencies: '@stoplight/json': 3.21.0 '@stoplight/json-schema-generator': 1.0.2 - '@stoplight/types': 14.0.0 + '@stoplight/types': 14.1.0 '@types/json-schema': 7.0.11 - '@types/swagger-schema-official': 2.0.24 - '@types/type-is': 1.6.5 + '@types/swagger-schema-official': 2.0.25 + '@types/type-is': 1.6.6 fnv-plus: 1.3.1 - lodash.isequalwith: 4.4.0 - lodash.pick: 4.4.0 - lodash.pickby: 4.6.0 + lodash: 4.17.21 openapi3-ts: 2.0.2 - postman-collection: 4.2.1 + postman-collection: 4.4.0 tslib: 2.6.2 type-is: 1.6.18 transitivePeerDependencies: @@ -749,7 +747,7 @@ packages: dependencies: '@jsdevtools/ono': 7.1.3 '@stoplight/path': 1.3.2 - '@stoplight/yaml': 4.2.3 + '@stoplight/yaml': 4.3.0 call-me-maybe: 1.0.2 fastestsmallesttextencoderdecoder: 1.0.22 isomorphic-fetch: 3.0.0 @@ -761,7 +759,7 @@ packages: /@stoplight/json-schema-sampler@0.3.0: resolution: {integrity: sha512-G7QImi2xr9+8iPEg0D9YUi1BWhIiiEm19aMb91oWBSdxuhezOAqqRP3XNY6wczHV9jLWW18f+KkghTy9AG0BQA==} dependencies: - '@types/json-schema': 7.0.14 + '@types/json-schema': 7.0.15 json-pointer: 0.6.2 dev: true @@ -769,7 +767,7 @@ packages: resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} engines: {node: '>=8.3.0'} dependencies: - '@stoplight/ordered-object-literal': 1.0.4 + '@stoplight/ordered-object-literal': 1.0.5 '@stoplight/path': 1.3.2 '@stoplight/types': 13.20.0 jsonc-parser: 2.2.1 @@ -777,8 +775,8 @@ packages: safe-stable-stringify: 1.1.1 dev: true - /@stoplight/ordered-object-literal@1.0.4: - resolution: {integrity: sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==} + /@stoplight/ordered-object-literal@1.0.5: + resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} engines: {node: '>=8'} dev: true @@ -787,21 +785,20 @@ packages: engines: {node: '>=8'} dev: true - /@stoplight/prism-cli@5.5.2: - resolution: {integrity: sha512-klorLXhFeaeJtGhsJeUESf0qc2Lenwp4lap9J0x7VC3AqPAXbTxsWAWZDytxdqleqXckuuqjpcJnZ97AXEDiXg==} + /@stoplight/prism-cli@5.7.0: + resolution: {integrity: sha512-0V6z9Zcbj/+yLJqajTHnO6nbBknHZqXpL7zZzS3DTZkzs19H0X2nZcI+4unImxEChmFTJif+zzW0q3W6KJfJAA==} engines: {node: '>=16'} hasBin: true dependencies: - '@stoplight/http-spec': 6.0.2 '@stoplight/json': 3.21.0 '@stoplight/json-schema-ref-parser': 9.2.7 - '@stoplight/prism-core': 5.5.2 - '@stoplight/prism-http': 5.5.2 - '@stoplight/prism-http-server': 5.5.2 - '@stoplight/types': 14.0.0 + '@stoplight/prism-core': 5.6.0 + '@stoplight/prism-http': 5.7.0 + '@stoplight/prism-http-server': 5.7.0 + '@stoplight/types': 14.1.1 chalk: 4.1.2 - chokidar: 3.5.3 - fp-ts: 2.16.1 + chokidar: 3.6.0 + fp-ts: 2.16.5 json-schema-faker: 0.5.3 lodash: 4.17.21 node-fetch: 2.7.0 @@ -817,26 +814,26 @@ packages: - supports-color dev: true - /@stoplight/prism-core@5.5.2: - resolution: {integrity: sha512-l5OwwjXE7WwUppT+HWidIp5bZBZDvZyWxIDMQKY9M9nK4YQou7mqr/9ibLORR1UxuYDXkK8M4sGLsvo5L/dqeg==} + /@stoplight/prism-core@5.6.0: + resolution: {integrity: sha512-QKdx+wmHz4g+wRIFl6hZi2kYeGrCnOny+gPOoIbJwZ8BaL+B8SaGKYFqyMbU8Jl4jHoUKKvjflCRVy3BFpsRUQ==} engines: {node: '>=16'} dependencies: - fp-ts: 2.16.1 + fp-ts: 2.16.5 lodash: 4.17.21 pino: 6.14.0 tslib: 2.6.2 dev: true - /@stoplight/prism-http-server@5.5.2: - resolution: {integrity: sha512-8PymFniyMa9OikoI1uP6DP9tzV/nMl9sp2kpvBHp3xQ/Klub4UZO0XKaODdGLYYnCs36h3Cghmd8hhaYd7HLMA==} + /@stoplight/prism-http-server@5.7.0: + resolution: {integrity: sha512-KQYKtYzddkDO6t6uzin90vF6PHJAQkDLjRnge55cxaeNmKh5SkT889Zxmfgvx9naAh4Uu1sYD0ajkKpt/+8Ubw==} engines: {node: '>=16'} dependencies: - '@stoplight/prism-core': 5.5.2 - '@stoplight/prism-http': 5.5.2 - '@stoplight/types': 14.0.0 - fast-xml-parser: 4.3.2 - fp-ts: 2.16.1 - io-ts: 2.2.20(fp-ts@2.16.1) + '@stoplight/prism-core': 5.6.0 + '@stoplight/prism-http': 5.7.0 + '@stoplight/types': 14.1.1 + fast-xml-parser: 4.3.6 + fp-ts: 2.16.5 + io-ts: 2.2.21(fp-ts@2.16.5) lodash: 4.17.21 micri: 4.5.1 node-fetch: 2.7.0 @@ -848,17 +845,19 @@ packages: - supports-color dev: true - /@stoplight/prism-http@5.5.2: - resolution: {integrity: sha512-LADy+GkEF+hCG2wqedIrAH+ic4gFawzvCf8xc4UrMa4kQ4G3HKupCxnirml+o2Lvl6a5aLD5ENIUHWtNz0XCkw==} + /@stoplight/prism-http@5.7.0: + resolution: {integrity: sha512-+XdhsLIzUuZodd5dULG8hdCF3GWOCpUplpddBQLgJbpYqVCfd6KS4gETaobzvtpffLOyDhZ7DDji7lFE6N9lvw==} engines: {node: '>=16'} dependencies: '@faker-js/faker': 6.3.1 + '@stoplight/http-spec': 7.0.3 '@stoplight/json': 3.21.0 '@stoplight/json-schema-merge-allof': 0.7.8 + '@stoplight/json-schema-ref-parser': 9.2.7 '@stoplight/json-schema-sampler': 0.3.0 - '@stoplight/prism-core': 5.5.2 - '@stoplight/types': 14.0.0 - '@stoplight/yaml': 4.2.3 + '@stoplight/prism-core': 5.6.0 + '@stoplight/types': 14.1.1 + '@stoplight/yaml': 4.3.0 abstract-logging: 2.0.1 accepts: 1.3.8 ajv: 8.12.0 @@ -866,7 +865,7 @@ packages: caseless: 0.12.0 chalk: 4.1.2 content-type: 1.0.5 - fp-ts: 2.16.1 + fp-ts: 2.16.5 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 json-schema-faker: 0.5.3 @@ -887,42 +886,50 @@ packages: resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} engines: {node: ^12.20 || >=14.13} dependencies: - '@types/json-schema': 7.0.14 - utility-types: 3.10.0 + '@types/json-schema': 7.0.15 + utility-types: 3.11.0 dev: true - /@stoplight/types@14.0.0: - resolution: {integrity: sha512-w7Ejau6TaB7RqR0vWzGJSdmgLEYD2frjgbHPZoxgGQwAq/R8Qh/D9p9Bl9JFdii+YTL5xoDjyX0c1WDRlbMV8g==} + /@stoplight/types@14.1.0: + resolution: {integrity: sha512-fL8Nzw03+diALw91xHEHA5Q0WCGeW9WpPgZQjodNUWogAgJ56aJs03P9YzsQ1J6fT7/XjDqHMgn7/RlsBzB/SQ==} engines: {node: ^12.20 || >=14.13} dependencies: - '@types/json-schema': 7.0.14 - utility-types: 3.10.0 + '@types/json-schema': 7.0.15 + utility-types: 3.11.0 dev: true - /@stoplight/yaml-ast-parser@0.0.48: - resolution: {integrity: sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==} + /@stoplight/types@14.1.1: + resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} + engines: {node: ^12.20 || >=14.13} + dependencies: + '@types/json-schema': 7.0.15 + utility-types: 3.11.0 + dev: true + + /@stoplight/yaml-ast-parser@0.0.50: + resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} dev: true - /@stoplight/yaml@4.2.3: - resolution: {integrity: sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw==} + /@stoplight/yaml@4.3.0: + resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} engines: {node: '>=10.8'} dependencies: - '@stoplight/ordered-object-literal': 1.0.4 - '@stoplight/types': 13.20.0 - '@stoplight/yaml-ast-parser': 0.0.48 + '@stoplight/ordered-object-literal': 1.0.5 + '@stoplight/types': 14.1.1 + '@stoplight/yaml-ast-parser': 0.0.50 tslib: 2.6.2 dev: true - /@tanstack/query-core@5.18.1: - resolution: {integrity: sha512-fYhrG7bHgSNbnkIJF2R4VUXb4lF7EBiQjKkDc5wOlB7usdQOIN4LxxHpDxyE3qjqIst1WBGvDtL48T0sHJGKCw==} + /@tanstack/query-core@5.28.9: + resolution: {integrity: sha512-hNlfCiqZevr3GRVPXS3MhaGW5hjcxvCsIQ4q6ff7EPlvFwYZaS+0d9EIIgofnegDaU2BbCDlyURoYfRl5rmzow==} dev: false - /@tanstack/react-query@5.18.1(react@18.2.0): - resolution: {integrity: sha512-PdI07BbsahZ+04PxSuDQsQvBWe008eWFk/YYWzt8fvzt2sALUM0TpAJa/DFpqa7+SSo7j1EQR6Jx6znXNHyaXw==} + /@tanstack/react-query@5.28.9(react@18.2.0): + resolution: {integrity: sha512-vwifBkGXsydsLxFOBMe3+f8kvtDoqDRDwUNjPHVDDt+FoBetCbOWAUHgZn4k+CVeZgLmy7bx6aKeDbe3e8koOQ==} peerDependencies: react: ^18.0.0 dependencies: - '@tanstack/query-core': 5.18.1 + '@tanstack/query-core': 5.28.9 react: 18.2.0 dev: false @@ -934,100 +941,89 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - '@types/babel__generator': 7.6.6 - '@types/babel__template': 7.4.3 - '@types/babel__traverse': 7.20.3 + '@babel/parser': 7.24.1 + '@babel/types': 7.24.0 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.5 dev: true - /@types/babel__generator@7.6.6: - resolution: {integrity: sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==} + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true - /@types/babel__template@7.4.3: - resolution: {integrity: sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==} + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.24.1 + '@babel/types': 7.24.0 dev: true - /@types/babel__traverse@7.20.3: - resolution: {integrity: sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==} + /@types/babel__traverse@7.20.5: + resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: true - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/json-schema@7.0.14: - resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} - dev: true - - /@types/lodash.clonedeep@4.5.9: - resolution: {integrity: sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==} - dependencies: - '@types/lodash': 4.14.202 + /@types/json-schema@7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/lodash@4.14.202: - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@types/node@20.10.6: - resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==} + /@types/node@20.12.2: + resolution: {integrity: sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==} dependencies: undici-types: 5.26.5 dev: true - /@types/prop-types@15.7.9: - resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==} + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} dev: true - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + /@types/react-dom@18.2.23: + resolution: {integrity: sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==} dependencies: - '@types/react': 18.2.52 + '@types/react': 18.2.73 dev: true - /@types/react@18.2.52: - resolution: {integrity: sha512-E/YjWh3tH+qsLKaUzgpZb5AY0ChVa+ZJzF7ogehVILrFpdQk6nC/WXOv0bfFEABbXbgNxLBGU7IIZByPKb6eBw==} + /@types/react@18.2.73: + resolution: {integrity: sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==} dependencies: - '@types/prop-types': 15.7.9 - '@types/scheduler': 0.16.4 - csstype: 3.1.2 + '@types/prop-types': 15.7.12 + csstype: 3.1.3 dev: true - /@types/scheduler@0.16.4: - resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} + /@types/swagger-schema-official@2.0.25: + resolution: {integrity: sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==} dev: true - /@types/swagger-schema-official@2.0.24: - resolution: {integrity: sha512-rIxM8fXP1J1JI6ElxJ/9OhDIO3eKjy9JdtzWEF1N7juY8oy3m6jZCag85JVF6UDOrH/LigVer9D5w5baoohw4g==} - dev: true - - /@types/type-is@1.6.5: - resolution: {integrity: sha512-EUDwQq2WSEDdjfMIc7ZXgAFPn7Eqi0DsiGRNorvwpQZD/BCBg6FFkn3CaJRr90NB3xZlAsgN20WacVJURc4lHw==} + /@types/type-is@1.6.6: + resolution: {integrity: sha512-fs1KHv/f9OvmTMsu4sBNaUu32oyda9Y9uK25naJG8gayxNrfqGIjPQsbLIYyfe7xFkppnPlJB+BuTldOaX9bXw==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.12.2 dev: true - /@vitejs/plugin-react@4.2.1(vite@5.0.12): + /@vitejs/plugin-react@4.2.1(vite@5.2.7): resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.24.3 + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.3) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.0.12(@types/node@20.10.6) + vite: 5.2.7(@types/node@20.12.2) transitivePeerDependencies: - supports-color dev: true @@ -1044,6 +1040,12 @@ packages: negotiator: 0.6.3 dev: true + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -1120,24 +1122,26 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 dev: true /asynckit@0.4.0: @@ -1149,15 +1153,17 @@ packages: engines: {node: '>=8.0.0'} dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true - /axios@1.6.7: - resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + /axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} dependencies: - follow-redirects: 1.15.5 + follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -1168,8 +1174,8 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -1197,35 +1203,56 @@ packages: fill-range: 7.0.1 dev: true - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001572 - electron-to-chromium: 1.4.617 + caniuse-lite: 1.0.30001603 + electron-to-chromium: 1.4.722 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /c12@1.10.0: + resolution: {integrity: sha512-0SsG7UDhoRWcuSvKWHaXmu5uNjDCDN3nkQLRL4Q42IlFy+ze58FcCoI3uPwINXinkz7ZinbhEgyzYFw9u9ZV8g==} dependencies: + chokidar: 3.6.0 + confbox: 0.1.3 + defu: 6.1.4 + dotenv: 16.4.5 + giget: 1.2.3 + jiti: 1.21.0 + mlly: 1.6.1 + ohash: 1.1.3 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.0.3 + rc9: 2.1.1 + dev: true + + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 dev: true /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} dev: true - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + /camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} dev: true - /caniuse-lite@1.0.30001572: - resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} + /caniuse-lite@1.0.30001603: + resolution: {integrity: sha512-iL2iSS0eDILMb9n5yKQoTBim9jMZ0Yrk8g0N9K7UzYyWnfIKzXBZD5ngpM37ZcL/cv0Mli8XtVMRYMQAfFpi5Q==} dev: true /caseless@0.12.0: @@ -1254,8 +1281,8 @@ packages: engines: {node: '>=4.0.0'} dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 @@ -1269,6 +1296,17 @@ packages: fsevents: 2.3.3 dev: true + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: true + + /citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + dependencies: + consola: 3.2.3 + dev: true + /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -1305,11 +1343,6 @@ packages: delayed-stream: 1.0.0 dev: false - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - dev: true - /commander@12.0.0: resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} engines: {node: '>=18'} @@ -1336,6 +1369,15 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /confbox@0.1.3: + resolution: {integrity: sha512-eH3ZxAihl1PhKfpr4VfEN6/vUd87fmgb6JkldHgg/YR6aEBhW63qUDgzP2Y6WM0UumdsYp5H3kibalXAdHfbgg==} + dev: true + + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: true + /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -1373,8 +1415,35 @@ packages: which: 2.0.2 dev: true - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 dev: true /debug@4.3.4: @@ -1389,35 +1458,48 @@ packages: ms: 2.1.2 dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.0 dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.0 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: false + /destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + dev: true + + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: true + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.617: - resolution: {integrity: sha512-sYNE3QxcDS4ANW1k4S/wWYMXjCVcFSOX3Bg8jpuMFaXt/x8JCmp0R1Xe1ZXDX4WXnSRBf+GJ/3eGWicUuQq5cg==} + /electron-to-chromium@1.4.722: + resolution: {integrity: sha512-5nLE0TWFFpZ80Crhtp4pIp8LXCztjYX41yUcV6b+bKR2PqzjskTMOOlBi1VjBHlvHwS+4gar7kNKOrsbsewEZQ==} dev: true /emoji-regex@8.0.0: @@ -1434,58 +1516,84 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 - get-symbol-description: 1.0.0 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.4 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.0 + object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 - has-tostringtag: 1.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 dev: true /es-to-primitive@1.2.1: @@ -1497,39 +1605,39 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.19.11: - resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.11 - '@esbuild/android-arm': 0.19.11 - '@esbuild/android-arm64': 0.19.11 - '@esbuild/android-x64': 0.19.11 - '@esbuild/darwin-arm64': 0.19.11 - '@esbuild/darwin-x64': 0.19.11 - '@esbuild/freebsd-arm64': 0.19.11 - '@esbuild/freebsd-x64': 0.19.11 - '@esbuild/linux-arm': 0.19.11 - '@esbuild/linux-arm64': 0.19.11 - '@esbuild/linux-ia32': 0.19.11 - '@esbuild/linux-loong64': 0.19.11 - '@esbuild/linux-mips64el': 0.19.11 - '@esbuild/linux-ppc64': 0.19.11 - '@esbuild/linux-riscv64': 0.19.11 - '@esbuild/linux-s390x': 0.19.11 - '@esbuild/linux-x64': 0.19.11 - '@esbuild/netbsd-x64': 0.19.11 - '@esbuild/openbsd-x64': 0.19.11 - '@esbuild/sunos-x64': 0.19.11 - '@esbuild/win32-arm64': 0.19.11 - '@esbuild/win32-ia32': 0.19.11 - '@esbuild/win32-x64': 0.19.11 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -1544,12 +1652,27 @@ packages: hasBin: true dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-redact@3.3.0: - resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + /fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} dev: true @@ -1557,8 +1680,8 @@ packages: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fast-xml-parser@4.3.2: - resolution: {integrity: sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==} + /fast-xml-parser@4.3.6: + resolution: {integrity: sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==} hasBin: true dependencies: strnum: 1.0.5 @@ -1594,6 +1717,11 @@ packages: locate-path: 2.0.0 dev: true + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + /flatstr@1.0.12: resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} dev: true @@ -1602,8 +1730,8 @@ packages: resolution: {integrity: sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==} dev: true - /follow-redirects@1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -1643,17 +1771,15 @@ packages: resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} dev: true - /fp-ts@2.16.1: - resolution: {integrity: sha512-by7U5W8dkIzcvDofUcO42yl9JbnHTEDBrzu3pt5fKT+Z4Oy85I21K80EYJYdjQGC2qum4Vo55Ag57iiIK4FYuA==} + /fp-ts@2.16.5: + resolution: {integrity: sha512-N8T8PwMSeTKKtkm9lkj/zSTAnPC/aJIIrQhnHxxkL0KLsRCNUPANksJOlMXxcKKCo7H1ORP3No9EMD+fP0tsdA==} dev: true - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 + minipass: 3.3.6 dev: true /fsevents@2.3.3: @@ -1672,9 +1798,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -1692,21 +1818,43 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has: 1.0.4 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 + hasown: 2.0.2 dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + + /giget@1.2.3: + resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true + dependencies: + citty: 0.1.6 + consola: 3.2.3 + defu: 6.1.4 + node-fetch-native: 1.6.4 + nypm: 0.3.8 + ohash: 1.1.3 + pathe: 1.1.2 + tar: 6.2.1 dev: true /glob-parent@5.1.2: @@ -1716,16 +1864,16 @@ packages: is-glob: 4.0.3 dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + /glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.3 + minimatch: 9.0.4 minipass: 7.0.4 - path-scurry: 1.10.1 + path-scurry: 1.10.2 dev: true /globals@11.12.0: @@ -1743,7 +1891,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.4 dev: true /graceful-fs@4.2.11: @@ -1781,14 +1929,14 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.1 + es-define-property: 1.0.0 dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} dev: true @@ -1797,16 +1945,18 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 dev: true /hosted-git-info@2.8.9: @@ -1838,6 +1988,11 @@ packages: - supports-color dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -1849,29 +2004,29 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 dev: true - /io-ts@2.2.20(fp-ts@2.16.1): - resolution: {integrity: sha512-Rq2BsYmtwS5vVttie4rqrOCIfHCS9TgpRLFpKQCM1wZBBRY9nWVGmEvm2FnDbSE2un1UE39DvFpTR5UL47YDcA==} + /io-ts@2.2.21(fp-ts@2.16.5): + resolution: {integrity: sha512-zz2Z69v9ZIC3mMLYWIeoUcwWD6f+O7yP92FMVVaXEOSZH1jnVBmET/urd/uoarD1WGBY4rCj8TAyMPzsGNzMFQ==} peerDependencies: fp-ts: ^2.5.0 dependencies: - fp-ts: 2.16.1 + fp-ts: 2.16.5 dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /is-arrayish@0.2.1: @@ -1888,15 +2043,15 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-callable@1.2.7: @@ -1904,17 +2059,24 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} dependencies: - has: 1.0.4 + is-typed-array: 1.1.13 dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-extglob@2.1.1: @@ -1934,8 +2096,8 @@ packages: is-extglob: 2.1.1 dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true @@ -1943,7 +2105,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-number@7.0.0: @@ -1955,21 +2117,27 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-symbol@1.0.4: @@ -1979,17 +2147,17 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.11 + which-typed-array: 1.1.15 dev: true /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 dev: true /isarray@2.0.5: @@ -2004,7 +2172,7 @@ packages: resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} dependencies: node-fetch: 2.7.0 - whatwg-fetch: 3.6.19 + whatwg-fetch: 3.6.20 transitivePeerDependencies: - encoding dev: true @@ -2018,6 +2186,11 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2081,14 +2254,6 @@ packages: ono: 4.0.11 dev: true - /json-schema-ref-parser@9.0.9: - resolution: {integrity: sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==} - engines: {node: '>=10'} - deprecated: Please switch to @apidevtools/json-schema-ref-parser - dependencies: - '@apidevtools/json-schema-ref-parser': 9.0.9 - dev: true - /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true @@ -2103,12 +2268,8 @@ packages: resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.11 + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true /jsonpath-plus@7.2.0: @@ -2143,22 +2304,6 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.clonedeep@4.5.0: - resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} - dev: true - - /lodash.isequalwith@4.4.0: - resolution: {integrity: sha512-dcZON0IalGBpRmJBmMkaoV7d3I80R2O+FrzsZyHdNSFrANq/cgDqKQNmAHE8UEj4+QYWwwhkQOVdLHiAopzlsQ==} - dev: true - - /lodash.pick@4.4.0: - resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} - dev: true - - /lodash.pickby@4.6.0: - resolution: {integrity: sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==} - dev: true - /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -2170,8 +2315,8 @@ packages: js-tokens: 4.0.0 dev: false - /lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} dev: true @@ -2198,6 +2343,10 @@ packages: engines: {node: '>= 0.10.0'} dev: true + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + /micri@4.5.1: resolution: {integrity: sha512-AtvnSBGFglNr+iqs5gufpHT9xRXUabgu9vYEnQYPXSBs+nLSBvmUS5Mzg+3LJ9eQBrNA1o5M49WeqiX1f+d2sg==} engines: {node: '>= 12.0.0'} @@ -2221,14 +2370,19 @@ packages: dependencies: mime-db: 1.52.0 + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -2242,11 +2396,31 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: true + /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} dev: true + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -2254,6 +2428,21 @@ packages: minimist: 1.2.8 dev: true + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mlly@1.6.1: + resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.0.3 + ufo: 1.5.3 + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -2281,6 +2470,10 @@ packages: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} dev: true + /node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + dev: true + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -2324,11 +2517,30 @@ packages: pidtree: 0.3.1 read-pkg: 3.0.0 shell-quote: 1.8.1 - string.prototype.padend: 3.1.5 + string.prototype.padend: 3.1.6 dev: true - /object-inspect@1.13.0: - resolution: {integrity: sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==} + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nypm@0.3.8: + resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + dependencies: + citty: 0.1.6 + consola: 3.2.3 + execa: 8.0.1 + pathe: 1.1.2 + ufo: 1.5.3 + dev: true + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true /object-keys@1.1.1: @@ -2336,42 +2548,31 @@ packages: engines: {node: '>= 0.4'} dev: true - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /ono@4.0.11: - resolution: {integrity: sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==} - dependencies: - format-util: 1.0.5 + /ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} dev: true - /openapi-typescript-codegen@0.25.0: - resolution: {integrity: sha512-nN/TnIcGbP58qYgwEEy5FrAAjePcYgfMaCe3tsmYyTgI3v4RR9v8os14L+LEWDvV50+CmqiyTzRkKKtJeb6Ybg==} - hasBin: true + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} dependencies: - camelcase: 6.3.0 - commander: 11.1.0 - fs-extra: 11.2.0 - handlebars: 4.7.8 - json-schema-ref-parser: 9.0.9 + mimic-fn: 4.0.0 dev: true - /openapi-typescript-codegen@0.26.0: - resolution: {integrity: sha512-5D45xawBHu9efxaDdioeZAfAQGxE0v12aNk24dTymNHRA75A6bFP8tKUAIzx8+AKWN7d/S9RWD87yVWhlFLhDA==} - hasBin: true + /ono@4.0.11: + resolution: {integrity: sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==} dependencies: - '@apidevtools/json-schema-ref-parser': 11.1.0 - camelcase: 6.3.0 - commander: 11.1.0 - fs-extra: 11.2.0 - handlebars: 4.7.8 + format-util: 1.0.5 dev: true /openapi3-ts@2.0.2: @@ -2432,15 +2633,20 @@ packages: engines: {node: '>=8'} dev: true + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.0.1 + lru-cache: 10.2.0 minipass: 7.0.4 dev: true @@ -2451,6 +2657,14 @@ packages: pify: 3.0.0 dev: true + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -2479,7 +2693,7 @@ packages: resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==} hasBin: true dependencies: - fast-redact: 3.3.0 + fast-redact: 3.5.0 fast-safe-stringify: 2.1.1 flatstr: 1.0.12 pino-std-serializers: 3.2.0 @@ -2496,17 +2710,30 @@ packages: load-json-file: 4.0.0 dev: true - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.1 + mlly: 1.6.1 + pathe: 1.1.2 + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true - /postman-collection@4.2.1: - resolution: {integrity: sha512-DFLt3/yu8+ldtOTIzmBUctoupKJBOVK4NZO0t68K2lIir9smQg7OdQTBjOXYy+PDh7u0pSDvD66tm93eBHEPHA==} + /postman-collection@4.4.0: + resolution: {integrity: sha512-2BGDFcUwlK08CqZFUlIC8kwRJueVzPjZnnokWPtJCd9f2J06HBQpGL7t2P1Ud1NEsK9NHq9wdipUhWLOPj5s/Q==} engines: {node: '>=10'} dependencies: '@faker-js/faker': 5.5.3 @@ -2526,7 +2753,7 @@ packages: resolution: {integrity: sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==} engines: {node: '>=10'} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /pretty-data@0.40.0: @@ -2541,8 +2768,8 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: false - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true @@ -2550,6 +2777,14 @@ packages: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: true + /rc9@2.1.1: + resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} + dependencies: + defu: 6.1.4 + destr: 2.0.3 + flat: 5.0.2 + dev: true + /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -2597,13 +2832,14 @@ packages: picomatch: 2.3.1 dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 dev: true /require-directory@2.1.1: @@ -2620,38 +2856,42 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true - /rollup@4.9.2: - resolution: {integrity: sha512-66RB8OtFKUTozmVEh3qyNfH+b+z2RXBVloqO2KCC/pjFaGaHtxP9fVfOQKPSGXg2mElmjmxjW/fZ7iKrEpMH5Q==} + /rollup@4.13.2: + resolution: {integrity: sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.2 - '@rollup/rollup-android-arm64': 4.9.2 - '@rollup/rollup-darwin-arm64': 4.9.2 - '@rollup/rollup-darwin-x64': 4.9.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.2 - '@rollup/rollup-linux-arm64-gnu': 4.9.2 - '@rollup/rollup-linux-arm64-musl': 4.9.2 - '@rollup/rollup-linux-riscv64-gnu': 4.9.2 - '@rollup/rollup-linux-x64-gnu': 4.9.2 - '@rollup/rollup-linux-x64-musl': 4.9.2 - '@rollup/rollup-win32-arm64-msvc': 4.9.2 - '@rollup/rollup-win32-ia32-msvc': 4.9.2 - '@rollup/rollup-win32-x64-msvc': 4.9.2 + '@rollup/rollup-android-arm-eabi': 4.13.2 + '@rollup/rollup-android-arm64': 4.13.2 + '@rollup/rollup-darwin-arm64': 4.13.2 + '@rollup/rollup-darwin-x64': 4.13.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.13.2 + '@rollup/rollup-linux-arm64-gnu': 4.13.2 + '@rollup/rollup-linux-arm64-musl': 4.13.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.13.2 + '@rollup/rollup-linux-riscv64-gnu': 4.13.2 + '@rollup/rollup-linux-s390x-gnu': 4.13.2 + '@rollup/rollup-linux-x64-gnu': 4.13.2 + '@rollup/rollup-linux-x64-musl': 4.13.2 + '@rollup/rollup-win32-arm64-msvc': 4.13.2 + '@rollup/rollup-win32-ia32-msvc': 4.13.2 + '@rollup/rollup-win32-x64-msvc': 4.13.2 fsevents: 2.3.3 dev: true - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -2660,11 +2900,12 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -2700,13 +2941,26 @@ packages: lru-cache: 6.0.0 dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.2 dev: true /shebang-command@1.2.0: @@ -2737,12 +2991,14 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.13.0 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 dev: true /signal-exit@4.1.0: @@ -2766,8 +3022,8 @@ packages: flatstr: 1.0.12 dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} dev: true @@ -2780,22 +3036,22 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.17 dev: true - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} dev: true /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.17 dev: true - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + /spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} dev: true /split2@3.2.2: @@ -2826,38 +3082,41 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.padend@3.1.5: - resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} + /string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-object-atoms: 1.0.0 dev: true /string_decoder@1.3.0: @@ -2885,6 +3144,11 @@ packages: engines: {node: '>=4'} dev: true + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} dev: true @@ -2908,6 +3172,18 @@ packages: engines: {node: '>= 0.4'} dev: true + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -2936,50 +3212,60 @@ packages: mime-types: 2.1.35 dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.3: + resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} hasBin: true dev: true + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + dev: true + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -2991,7 +3277,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -3001,26 +3287,21 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.22.2): + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 + browserslist: 4.23.0 + escalade: 3.1.2 picocolors: 1.0.0 dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /uri-template-lite@22.9.0: @@ -3035,8 +3316,8 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /utility-types@3.10.0: - resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==} + /utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} engines: {node: '>= 4'} dev: true @@ -3077,8 +3358,8 @@ packages: resolution: {integrity: sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==} dev: true - /vite@5.0.12(@types/node@20.10.6): - resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} + /vite@5.2.7(@types/node@20.12.2): + resolution: {integrity: sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -3105,10 +3386,10 @@ packages: terser: optional: true dependencies: - '@types/node': 20.10.6 - esbuild: 0.19.11 - postcss: 8.4.32 - rollup: 4.9.2 + '@types/node': 20.12.2 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.13.2 optionalDependencies: fsevents: 2.3.3 dev: true @@ -3117,8 +3398,8 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true - /whatwg-fetch@3.6.19: - resolution: {integrity: sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==} + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} dev: true /whatwg-mimetype@3.0.0: @@ -3143,15 +3424,15 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /which@1.3.1: @@ -3219,7 +3500,7 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/src/cli.mts b/src/cli.mts new file mode 100644 index 0000000..95f90ad --- /dev/null +++ b/src/cli.mts @@ -0,0 +1,93 @@ +#!/usr/bin/env node +import { generate } from "./generate.mjs"; +import { Command, Option } from "commander"; +import { UserConfig } from "@hey-api/openapi-ts"; +import { readFile } from "fs/promises"; +import { dirname, join } from "path"; +import { fileURLToPath } from "node:url"; + +const program = new Command(); + +export type LimitedUserConfig = Omit; + +async function setupProgram() { + const __filename = fileURLToPath(import.meta.url); + const __dirname = dirname(__filename); + const file = await readFile(join(__dirname, "../package.json"), "utf-8"); + const packageJson = JSON.parse(file); + const version = packageJson.version; + + program + .name("openapi-rq") + .version(version) + .description("Generate React Query code based on OpenAPI") + .requiredOption( + "-i, --input ", + "OpenAPI specification, can be a path, url or string content (required)" + ) + .option("-o, --output ", "Output directory", "openapi") + .addOption( + new Option("-c, --client ", "HTTP client to generate") + .choices(["angular", "axios", "fetch", "node", "xhr"]) + .default("fetch") + ) + .option("--exportSchemas ", "Write schemas to disk") + .option("--postfixServices ", "Service name postfix", "Service") + .option( + "--postfixModels ", + "Depreciated - now unused - left for backwards compatibility" + ) + .option("--request ", "Path to custom request file") + .option( + "--exportCore ", + "Export core - Generate Core client classes?" + ) + .option("--exportModels ", "Generate models?") + .option("--exportServices ", "Generate services?") + .option("--format", "Process output folder with formatter?") + .option("--lint", "Process output folder with linter?") + .option("--name", "Custom client class name") + .option("--operationId", "Use operation ID to generate operation names?") + .addOption( + new Option( + "--serviceResponse ", + "Define shape of returned value from service calls" + ).choices(["body", "generics", "response"]) + ) + .option( + "--base ", + "Manually set base in OpenAPI config instead of inferring from server value" + ) + .option("--enums", "Generate JavaScript objects from enum definitions?") + .option( + "--useDateType", + "Use Date type instead of string for date types for models, this will not convert the data to a Date object" + ) + /* TODO: Implement this feature - useOptions + * currently this will not work because the options are new exports of the Services + * we new to be able to import any of the options from each service into the queries files + */ + // .option("--useOptions ", "Use options or arguments functions") + .option("--write", "Write the files to disk (true or false)") + // TODO: remove these options in the next major release + .addOption( + new Option( + "--indent ", + "Depreciated - now unused - left for backwards compatibility" + ).hideHelp() + ) + // TODO: remove these options in the next major release + .addOption( + new Option( + "--useUnionTypes ", + "Depreciated - now unused - left for backwards compatibility" + ).hideHelp() + ) + .parse(); + + const options = program.opts(); + + generate(options, version); +} + +setupProgram(); diff --git a/src/cli.ts b/src/cli.ts deleted file mode 100644 index be071a8..0000000 --- a/src/cli.ts +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env node -import { generate } from "./generate"; -import { Command } from "commander"; -import packageJson from "../package.json"; -import { Options } from "openapi-typescript-codegen"; - -export type CLIOptions = { - output?: string; - client?: Options["httpClient"]; -} & Pick; - -const program = new Command(); - -program - .name("openapi-rq") - .version(packageJson.version) - .description("Generate React Query code based on OpenAPI") - .requiredOption( - "-i, --input ", - "OpenAPI specification, can be a path, url or string content (required)" - ) - .option("-o, --output ", "Output directory", "openapi") - .option( - "-c, --client ", - "HTTP client to generate [fetch, xhr, node, axios, angular]", - "fetch" - ) - .option("--useUnionTypes", "Use union types", false) - .option("--exportSchemas ", "Write schemas to disk", false) - .option("--indent ", "Indentation options [4, 2, tabs]", "4") - .option("--postfixServices ", "Service name postfix", "Service") - .option("--postfixModels ", "Modal name postfix") - .option("--request ", "Path to custom request file") - .parse(); - -const options = program.opts(); - -console.log(`Generating React Query code using OpenApi file ${options.output}`); -generate(options); diff --git a/src/common.ts b/src/common.mts similarity index 76% rename from src/common.ts rename to src/common.mts index c123061..59e9895 100644 --- a/src/common.ts +++ b/src/common.mts @@ -48,9 +48,26 @@ export async function exists(f: PathLike) { const Common = "Common"; +/** + * Build a common type name by prepending the Common namespace. + */ export function BuildCommonTypeName(name: string | ts.Identifier) { if (typeof name === "string") { return ts.factory.createIdentifier(`${Common}.${name}`); } return ts.factory.createIdentifier(`${Common}.${name.text}`); } + +/** + * Safely parse a value into a number. Checks for NaN and Infinity. + * Returns NaN if the string is not a valid number. + * @param value The value to parse. + * @returns The parsed number or NaN if the value is not a valid number. + */ +export function safeParseNumber(value: unknown): number { + const parsed = Number(value); + if (!isNaN(parsed) && isFinite(parsed)) { + return parsed; + } + return NaN; +} diff --git a/src/constants.ts b/src/constants.mts similarity index 100% rename from src/constants.ts rename to src/constants.mts diff --git a/src/createExports.mts b/src/createExports.mts new file mode 100644 index 0000000..9bcc5e5 --- /dev/null +++ b/src/createExports.mts @@ -0,0 +1,51 @@ +import { createUseQuery } from "./createUseQuery.mjs"; +import { createUseMutation } from "./createUseMutation.mjs"; +import { Service } from "./service.mjs"; + +export const createExports = (service: Service) => { + const { klasses } = service; + const methods = klasses.map((k) => k.methods).flat(); + + const allGet = methods.filter((m) => m.httpMethodName === "'GET'"); + const allPost = methods.filter((m) => m.httpMethodName === "'POST'"); + + const allQueries = allGet.map((m) => createUseQuery(m)); + const allMutations = allPost.map((m) => createUseMutation(m)); + + const commonInQueries = allQueries + .map(({ apiResponse, returnType, key }) => [apiResponse, returnType, key]) + .flat(); + const commonInMutations = allMutations + .map(({ mutationResult }) => [mutationResult]) + .flat(); + + const allCommon = [...commonInQueries, ...commonInMutations]; + + const mainQueries = allQueries.map(({ queryHook }) => [queryHook]).flat(); + const mainMutations = allMutations + .map(({ mutationHook }) => [mutationHook]) + .flat(); + + const mainExports = [...mainQueries, ...mainMutations]; + + const suspenseQueries = allQueries + .map(({ suspenseQueryHook }) => [suspenseQueryHook]) + .flat(); + + const suspenseExports = [...suspenseQueries]; + + return { + /** + * Common types and variables between queries (regular and suspense) and mutations + */ + allCommon, + /** + * Main exports are the hooks that are used in the components + */ + mainExports, + /** + * Suspense exports are the hooks that are used in the suspense components + */ + suspenseExports, + }; +}; diff --git a/src/createExports.ts b/src/createExports.ts deleted file mode 100644 index c441d91..0000000 --- a/src/createExports.ts +++ /dev/null @@ -1,233 +0,0 @@ -import ts, { JSDoc } from "typescript"; -import { sync } from "glob"; -import { join } from "path"; -import fs from "fs"; -import { createUseQuery } from "./createUseQuery"; -import { createUseMutation } from "./createUseMutation"; -import { type MethodDescription } from "./common"; - -export function getMethodsFromService(generatedClientsPath: string) { - const services = sync( - join(generatedClientsPath, "services", "*.ts").replace(/\\/g, "/") - ); - const nodes = services.map((servicePath) => - ts.createSourceFile( - servicePath, // fileName - fs.readFileSync(join(process.cwd(), servicePath), "utf8"), - ts.ScriptTarget.Latest // languageVersion - ) - ); - return [ - ...nodes - .map((node) => { - const foundKlass = node - .getChildren()[0] - .getChildren() - .find((child) => child.kind === ts.SyntaxKind.ClassDeclaration); - if (!foundKlass) { - throw new Error("Class not found"); - } - const klass = foundKlass as ts.ClassDeclaration; - const className = klass.name?.getText(node); - if (!className) { - throw new Error("Class name not found"); - } - const methods = klass.members.filter( - (node) => node.kind === ts.SyntaxKind.MethodDeclaration - ) as ts.MethodDeclaration[]; - if (!methods.length) { - throw new Error("No methods found"); - } - return methods.map((method) => { - const methodBlockNode = method - .getChildren(node) - .find((child) => child.kind === ts.SyntaxKind.Block); - - if (!methodBlockNode) { - throw new Error("Method block not found"); - } - const methodBlock = methodBlockNode as ts.Block; - const foundReturnStatement = methodBlock.statements.find( - (s) => s.kind === ts.SyntaxKind.ReturnStatement - ); - if (!foundReturnStatement) { - throw new Error("Return statement not found"); - } - const returnStatement = foundReturnStatement as ts.ReturnStatement; - const foundCallExpression = returnStatement.expression; - if (!foundCallExpression) { - throw new Error("Call expression not found"); - } - const callExpression = foundCallExpression as ts.CallExpression; - const properties = ( - callExpression.arguments[1] as ts.ObjectLiteralExpression - ).properties as unknown as ts.PropertyAssignment[]; - const httpMethodName = properties - .find((p) => p.name?.getText(node) === "method") - ?.initializer?.getText(node); - - if (!httpMethodName) { - throw new Error("httpMethodName not found"); - } - - const getAllChildren = (tsNode: ts.Node): Array => { - const childItems = tsNode.getChildren(node); - if (childItems.length) { - const allChildren = childItems.map(getAllChildren); - return [tsNode].concat(allChildren.flat()); - } - return [tsNode]; - }; - - const children = getAllChildren(method); - const jsDoc = children - .filter((c) => c.kind === ts.SyntaxKind.JSDoc) - .map((c) => (c as JSDoc).comment); - const isDeprecated = children.some( - (c) => c.kind === ts.SyntaxKind.JSDocDeprecatedTag - ); - - return { - className, - node, - method, - methodBlock, - httpMethodName, - jsDoc, - isDeprecated, - } satisfies MethodDescription; - }); - }) - .flat(), - ]; -} - -export const createExportsV2 = (generatedClientsPath: string) => { - const methods = getMethodsFromService(generatedClientsPath); - - const allGet = methods.filter((m) => m.httpMethodName === "'GET'"); - const allPost = methods.filter((m) => m.httpMethodName === "'POST'"); - - const allQueries = allGet.map((m) => createUseQuery(m)); - const allMutations = allPost.map((m) => createUseMutation(m)); - - const commonInQueries = allQueries - .map(({ apiResponse, returnType, key }) => [apiResponse, returnType, key]) - .flat(); - const commonInMutations = allMutations - .map(({ mutationResult }) => [mutationResult]) - .flat(); - - const allCommon = [...commonInQueries, ...commonInMutations]; - - const mainQueries = allQueries.map(({ queryHook }) => [queryHook]).flat(); - const mainMutations = allMutations - .map(({ mutationHook }) => [mutationHook]) - .flat(); - - const mainExports = [...mainQueries, ...mainMutations]; - - const suspenseQueries = allQueries - .map(({ suspenseQueryHook }) => [suspenseQueryHook]) - .flat(); - - const suspenseExports = [...suspenseQueries]; - - return { - /** - * Common types and variables between queries (regular and suspense) and mutations - */ - allCommon, - /** - * Main exports are the hooks that are used in the components - */ - mainExports, - /** - * Suspense exports are the hooks that are used in the suspense components - */ - suspenseExports, - }; -}; - -// export const createExports = (generatedClientsPath: string) => { -// const services = sync( -// join(generatedClientsPath, "services", "*.ts").replace(/\\/g, "/") -// ); -// const nodes = services.map((servicePath) => -// ts.createSourceFile( -// servicePath, // fileName -// fs.readFileSync(join(process.cwd(), servicePath), "utf8"), -// ts.ScriptTarget.Latest // languageVersion -// ) -// ); -// return [ -// ...nodes -// .map((node) => { -// const klass = node -// .getChildren()[0] -// .getChildren() -// .find( -// (child) => child.kind === ts.SyntaxKind.ClassDeclaration -// ) as ts.ClassDeclaration; -// const className = klass.name?.getText(node); -// if (!className) { -// throw new Error("Class name not found"); -// } -// const methods = klass.members.filter( -// (node) => node.kind === ts.SyntaxKind.MethodDeclaration -// ) as ts.MethodDeclaration[]; -// return methods -// .map((method) => { -// const methodBlock = method -// .getChildren(node) -// .find((child) => child.kind === ts.SyntaxKind.Block) as ts.Block; -// const returnStatement = methodBlock.statements.find( -// (s) => s.kind === ts.SyntaxKind.ReturnStatement -// ) as ts.ReturnStatement; -// const callExpression = -// returnStatement.expression as ts.CallExpression; -// const properties = ( -// callExpression.arguments[1] as ts.ObjectLiteralExpression -// ).properties as unknown as ts.PropertyAssignment[]; -// const httpMethodName = properties -// .find((p) => p.name?.getText(node) === "method") -// ?.initializer?.getText(node); - -// if (!httpMethodName) { -// throw new Error("httpMethodName not found"); -// } - -// const getAllChildren = (tsNode: ts.Node): Array => { -// const childItems = tsNode.getChildren(node); -// if (childItems.length) { -// const allChildren = childItems.map(getAllChildren); -// return [tsNode].concat(allChildren.flat()); -// } -// return [tsNode]; -// }; - -// const children = getAllChildren(method); -// const jsDoc = children -// .filter((c) => c.kind === ts.SyntaxKind.JSDoc) -// .map((c) => { -// return (c as JSDoc).comment; -// }); -// const hasDeprecated = children.some( -// (c) => c.kind === ts.SyntaxKind.JSDocDeprecatedTag -// ); - -// return httpMethodName === "'GET'" -// ? createUseQuery(node, className, method, jsDoc, hasDeprecated) -// : createUseMutation( -// node, -// className, -// method, -// jsDoc, -// hasDeprecated -// ); -// }) -// .flat(); -// }) -// .flat(), -// ]; -// }; diff --git a/src/createImports.ts b/src/createImports.mts similarity index 56% rename from src/createImports.ts rename to src/createImports.mts index 6f74b7d..4c1e8f3 100644 --- a/src/createImports.ts +++ b/src/createImports.mts @@ -1,16 +1,34 @@ import ts from "typescript"; -import { sync } from "glob"; +import { glob } from "glob"; import { extname, basename, posix } from "path"; +import { Service } from "./service.mjs"; const { join } = posix; -export const createImports = (generatedClientsPath: string) => { - const models = sync( - join(generatedClientsPath, "models", "*.ts").replace(/\\/g, "/") - ); - const services = sync( - join(generatedClientsPath, "services", "*.ts").replace(/\\/g, "/") +export const createImports = async ({ + generatedClientsPath, + service, + serviceEndName, +}: { + generatedClientsPath: string; + service: Service; + serviceEndName: string; +}) => { + const { klasses } = service; + // get all class names + const classNames = klasses.map(({ className }) => className); + // remove duplicates + const uniqueClassNames = [...new Set(classNames)]; + + const modalsPath = join(generatedClientsPath, "models").replace(/\\/g, "/"); + const servicesPath = join(generatedClientsPath, "services").replace( + /\\/g, + "/" ); + const [models, services] = await Promise.all([ + glob(join(modalsPath, "*.ts")), + glob(join(servicesPath, "*.ts")), + ]); return [ ts.factory.createImportDeclaration( undefined, @@ -98,5 +116,47 @@ export const createImports = (generatedClientsPath: string) => { undefined ); }), + // import all class names from service file + ...uniqueClassNames.map((className) => { + return ts.factory.createImportDeclaration( + undefined, + ts.factory.createImportClause( + false, + undefined, + ts.factory.createNamedImports([ + ts.factory.createImportSpecifier( + false, + undefined, + ts.factory.createIdentifier(className) + ), + ]) + ), + ts.factory.createStringLiteral(join("../requests")), + undefined + ); + }), + // import all data objects from service file + ...uniqueClassNames.map((className) => { + // remove serviceEndName from the end of class name + // TODO: we should use a better way to remove the serviceEndName from the end of the class name + const classNameData = className.replace(serviceEndName, ""); + + return ts.factory.createImportDeclaration( + undefined, + ts.factory.createImportClause( + false, + undefined, + ts.factory.createNamedImports([ + ts.factory.createImportSpecifier( + false, + undefined, + ts.factory.createIdentifier(`${classNameData}Data`) + ), + ]) + ), + ts.factory.createStringLiteral(join("../requests")), + undefined + ); + }), ]; }; diff --git a/src/createSource.ts b/src/createSource.mts similarity index 82% rename from src/createSource.ts rename to src/createSource.mts index 6c7155c..3e5881f 100644 --- a/src/createSource.ts +++ b/src/createSource.mts @@ -1,11 +1,17 @@ -import ts, { factory } from "typescript"; -import { createImports } from "./createImports"; -import { createExportsV2 } from "./createExports"; -import { version } from "../package.json"; - -const createSourceFile = (outputPath: string) => { - const imports = createImports(outputPath); - const exports = createExportsV2(outputPath); +import ts from "typescript"; +import { createImports } from "./createImports.mjs"; +import { createExports } from "./createExports.mjs"; +import { getServices } from "./service.mjs"; + +const createSourceFile = async (outputPath: string, serviceEndName: string) => { + const service = await getServices(outputPath); + + const imports = await createImports({ + generatedClientsPath: outputPath, + service, + serviceEndName, + }); + const exports = createExports(service); const commonSource = ts.factory.createSourceFile( [...imports, ...exports.allCommon], @@ -66,7 +72,15 @@ const createSourceFile = (outputPath: string) => { }; }; -export const createSources = (outputPath: string) => { +export const createSource = async ({ + outputPath, + version, + serviceEndName, +}: { + outputPath: string; + version: string; + serviceEndName: string; +}) => { const queriesFile = ts.createSourceFile( "queries.ts", "", @@ -103,7 +117,7 @@ export const createSources = (outputPath: string) => { }); const { commonSource, mainSource, suspenseSource, indexSource } = - createSourceFile(outputPath); + await createSourceFile(outputPath, serviceEndName); const commonResult = `// generated with @7nohe/openapi-react-query-codegen@${version} \n` + diff --git a/src/createUseMutation.ts b/src/createUseMutation.mts similarity index 99% rename from src/createUseMutation.ts rename to src/createUseMutation.mts index 706a270..a2e41aa 100644 --- a/src/createUseMutation.ts +++ b/src/createUseMutation.mts @@ -7,8 +7,8 @@ import { TError, capitalizeFirstLetter, getNameFromMethod, -} from "./common"; -import { addJSDocToNode } from "./util"; +} from "./common.mjs"; +import { addJSDocToNode } from "./util.mjs"; /** * Awaited> diff --git a/src/createUseQuery.ts b/src/createUseQuery.mts similarity index 94% rename from src/createUseQuery.ts rename to src/createUseQuery.mts index d6deb42..17be417 100644 --- a/src/createUseQuery.ts +++ b/src/createUseQuery.mts @@ -5,10 +5,11 @@ import { getNameFromMethod, queryKeyConstraint, queryKeyGenericType, -} from "./common"; -import { addJSDocToNode } from "./util"; -import { type MethodDescription } from "./common"; -import { TData, TError } from "./common"; + TData, + TError, +} from "./common.mjs"; +import { addJSDocToNode } from "./util.mjs"; +import { type MethodDescription } from "./common.mjs"; export const createApiResponseType = ({ className, @@ -76,18 +77,35 @@ export function getRequestParamFromMethod( if (!method.parameters.length) { return null; } + + // we need to get the properties of the object + return ts.factory.createParameterDeclaration( undefined, undefined, ts.factory.createObjectBindingPattern( - method.parameters.map((param) => - ts.factory.createBindingElement( + method.parameters.map((param) => { + const type = param.type; + if (!type) { + throw new Error("No type found"); + } + const subTypes = type?.getChildren(); + if (!subTypes) { + throw new Error("No subType found"); + } + console.log(param.type as ts.TypeNode); + // console.log(param.type?.getText(node)); + // console.log(subType.getText(node)); + subTypes.forEach((subType) => { + console.log(subType.kind); + }); + return ts.factory.createBindingElement( undefined, undefined, ts.factory.createIdentifier(param.name.getText(node)), undefined - ) - ) + ); + }) ), undefined, ts.factory.createTypeLiteralNode( diff --git a/src/generate.mts b/src/generate.mts new file mode 100644 index 0000000..b713944 --- /dev/null +++ b/src/generate.mts @@ -0,0 +1,45 @@ +import { createClient, UserConfig } from "@hey-api/openapi-ts"; +import { print } from "./print.mjs"; +import path from "path"; +import { createSource } from "./createSource.mjs"; +import { defaultOutputPath, requestsOutputPath } from "./constants.mjs"; +import { safeParseNumber } from "./common.mjs"; + +export async function generate(options: UserConfig, version: string) { + const openApiOutputPath = path.join( + options.output ?? defaultOutputPath, + requestsOutputPath + ); + + // loop through properties on the options object + // if the property is a string of number then convert it to a number + // if the property is a string of boolean then convert it to a boolean + const formattedOptions = Object.entries(options).reduce( + (acc, [key, value]) => { + const typedKey = key as keyof UserConfig; + const typedValue = value as (typeof options)[keyof UserConfig]; + const parsedNumber = safeParseNumber(typedValue); + if (!isNaN(parsedNumber)) { + (acc as any)[typedKey] = parsedNumber; + } else if (value === "true") { + (acc as any)[typedKey] = true; + } else if (value === "false") { + (acc as any)[typedKey] = false; + } + return acc; + }, + options + ); + await createClient({ + ...formattedOptions, + output: openApiOutputPath, + useOptions: true, + }); + const { postfixServices } = formattedOptions; + const source = await createSource({ + outputPath: openApiOutputPath, + version, + serviceEndName: postfixServices!, + }); + await print(source, formattedOptions); +} diff --git a/src/generate.ts b/src/generate.ts deleted file mode 100644 index 7c96fc7..0000000 --- a/src/generate.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { generate as generateTSClients } from "openapi-typescript-codegen"; -import { print } from "./print"; -import { CLIOptions } from "./cli"; -import path from "path"; -import { createSources } from "./createSource"; -import { defaultOutputPath, requestsOutputPath } from "./constants"; - -export async function generate(options: CLIOptions) { - const openApiOutputPath = path.join( - options.output ?? defaultOutputPath, - requestsOutputPath - ); - - await generateTSClients({ - ...options, - httpClient: options.client, - output: openApiOutputPath, - }); - const sources = createSources(openApiOutputPath); - print(sources, options); -} diff --git a/src/print.ts b/src/print.mts similarity index 80% rename from src/print.ts rename to src/print.mts index c480b27..f4ce6f1 100644 --- a/src/print.ts +++ b/src/print.mts @@ -1,15 +1,15 @@ -import { stat, mkdir, writeFile } from "fs/promises"; +import { mkdir, writeFile } from "fs/promises"; import path from "path"; -import { CLIOptions } from "./cli"; -import { defaultOutputPath, queriesOutputPath } from "./constants"; -import { exists } from "./common"; +import { defaultOutputPath, queriesOutputPath } from "./constants.mjs"; +import { LimitedUserConfig } from "./cli.mjs"; +import { exists } from "./common.mjs"; async function printGeneratedTS( result: { name: string; content: string; }, - options: CLIOptions + options: LimitedUserConfig ) { const dir = path.join(options.output ?? defaultOutputPath, queriesOutputPath); const dirExists = await exists(dir); @@ -24,7 +24,7 @@ export async function print( name: string; content: string; }[], - options: CLIOptions + options: LimitedUserConfig ) { const outputPath = options.output ?? defaultOutputPath; const dirExists = await exists(outputPath); diff --git a/src/service.mts b/src/service.mts new file mode 100644 index 0000000..a648bc0 --- /dev/null +++ b/src/service.mts @@ -0,0 +1,149 @@ +import { readFile } from "fs/promises"; +import { join } from "path"; +import ts, { JSDoc } from "typescript"; +import { MethodDescription } from "./common.mjs"; + +export type Service = { + node: ts.SourceFile; + klasses: Array<{ + className: string; + klass: ts.ClassDeclaration; + methods: Array; + }>; +}; + +export async function getServices( + generatedClientsPath: string +): Promise { + const pathToService = join(generatedClientsPath, "services.ts").replace( + /\\/g, + "/" + ); + const servicesPath = await readFile( + join(process.cwd(), pathToService), + "utf-8" + ); + + const node = ts.createSourceFile( + pathToService, // fileName + servicesPath, + ts.ScriptTarget.Latest // languageVersion + ); + + const klasses = getClassesFromService(node); + return { + klasses: klasses.map(({ klass, className }) => ({ + className: className, + klass, + methods: getMethodsFromService(node, klass), + })), + node, + } satisfies Service; +} + +function getClassesFromService(node: ts.SourceFile) { + const nodeChildren = node.getChildren(); + if (!nodeChildren.length) { + throw new Error("No children found"); + } + + const subChildren = nodeChildren.map((child) => child.getChildren()).flat(); + + const foundKlasses = subChildren.filter( + (child) => child.kind === ts.SyntaxKind.ClassDeclaration + ); + + if (!foundKlasses.length) { + throw new Error("No classes found"); + } + const klasses = foundKlasses as ts.ClassDeclaration[]; + return klasses.map((klass) => { + const className = getClassNameFromClassNode(klass); + return { + className, + klass, + }; + }); +} + +function getClassNameFromClassNode(klass: ts.ClassDeclaration) { + const className = String(klass.name?.escapedText); + + if (!className) { + throw new Error("Class name not found"); + } + return className; +} + +function getMethodsFromService( + node: ts.SourceFile, + klass: ts.ClassDeclaration +) { + const methods = klass.members.filter( + (node) => node.kind === ts.SyntaxKind.MethodDeclaration + ) as ts.MethodDeclaration[]; + if (!methods.length) { + throw new Error("No methods found"); + } + return methods.map((method) => { + const methodBlockNode = method + .getChildren(node) + .find((child) => child.kind === ts.SyntaxKind.Block); + + if (!methodBlockNode) { + throw new Error("Method block not found"); + } + const methodBlock = methodBlockNode as ts.Block; + const foundReturnStatement = methodBlock.statements.find( + (s) => s.kind === ts.SyntaxKind.ReturnStatement + ); + if (!foundReturnStatement) { + throw new Error("Return statement not found"); + } + const returnStatement = foundReturnStatement as ts.ReturnStatement; + const foundCallExpression = returnStatement.expression; + if (!foundCallExpression) { + throw new Error("Call expression not found"); + } + const callExpression = foundCallExpression as ts.CallExpression; + const properties = ( + callExpression.arguments[1] as ts.ObjectLiteralExpression + ).properties as unknown as ts.PropertyAssignment[]; + const httpMethodName = properties + .find((p) => p.name?.getText(node) === "method") + ?.initializer?.getText(node); + + if (!httpMethodName) { + throw new Error("httpMethodName not found"); + } + + const getAllChildren = (tsNode: ts.Node): Array => { + const childItems = tsNode.getChildren(node); + if (childItems.length) { + const allChildren = childItems.map(getAllChildren); + return [tsNode].concat(allChildren.flat()); + } + return [tsNode]; + }; + + const children = getAllChildren(method); + const jsDoc = children + .filter((c) => c.kind === ts.SyntaxKind.JSDoc) + .map((c) => (c as JSDoc).comment); + const isDeprecated = children.some( + (c) => c.kind === ts.SyntaxKind.JSDocDeprecatedTag + ); + + const className = getClassNameFromClassNode(klass); + + return { + className, + node, + method, + methodBlock, + httpMethodName, + jsDoc, + isDeprecated, + } satisfies MethodDescription; + }); +} diff --git a/src/util.ts b/src/util.mts similarity index 100% rename from src/util.ts rename to src/util.mts diff --git a/tsconfig.json b/tsconfig.json index 1146fcc..37a52d6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "module": "commonjs", - "moduleResolution": "node", + "module": "NodeNext", + "moduleResolution": "NodeNext", "allowSyntheticDefaultImports": true, "strict": true, "esModuleInterop": true, @@ -10,7 +10,9 @@ "resolveJsonModule": true, "outDir": "dist", "lib": ["ESNext", "DOM"], - "target": "ESNext" + "target": "ESNext", + "baseUrl": ".", + "rootDir": "src" }, "include": [ "src" From baafa2de8e58d9ab017852a72221a4823dc7d2b8 Mon Sep 17 00:00:00 2001 From: Landon Gavin Date: Mon, 8 Apr 2024 13:10:20 -0400 Subject: [PATCH 2/5] feat: support useOptions of @hey-api/openapi-ts - removed deprecated options of @hey-api/openapi-ts - using ts-morph to help traverse typescript source files --- README.md | 19 ++- examples/react-app/package.json | 2 +- examples/react-app/src/App.tsx | 26 ++-- .../src/components/SuspenseChild.tsx | 4 +- .../src/components/SuspenseParent.tsx | 8 +- examples/react-app/src/main.tsx | 17 +- package.json | 6 +- pnpm-lock.yaml | 110 ++++++++++++- src/cli.mts | 33 ---- src/common.mts | 34 +++- src/createImports.mts | 32 ++++ src/createSource.mts | 16 +- src/createUseMutation.mts | 98 ++++++++---- src/createUseQuery.mts | 146 ++++++++++-------- src/generate.mts | 12 +- src/service.mts | 87 ++++------- src/util.mts | 11 +- 17 files changed, 413 insertions(+), 248 deletions(-) diff --git a/README.md b/README.md index cc46df5..0319fcf 100644 --- a/README.md +++ b/README.md @@ -44,24 +44,14 @@ Options: -i, --input OpenAPI specification, can be a path, url or string content (required) -o, --output Output directory (default: "openapi") -c, --client HTTP client to generate [fetch, xhr, node, axios, angular] (default: "fetch") - --useUnionTypes Unused, will be removed in the next major version - --exportSchemas Write schemas to disk (default: false) - --indent Unused, will be removed in the next major version - --postfixServices Service name postfix (default: "Service") - --postfixModels Unused, will be removed in the next major version --request Path to custom request file - --write Write the files to disk (true or false) --useDateType Use Date type instead of string for date types for models, this will not convert the data to a Date object --enums Generate JavaScript objects from enum definitions? --base Manually set base in OpenAPI config instead of inferring from server value --serviceResponse Define shape of returned value from service calls ['body', 'generics', 'response'] --operationId Use operation ID to generate operation names? --lint Process output folder with linter? - --name Custom client class name --format Process output folder with formatter? - --exportCore Export core types - --exportModels Export models - --exportServices Export services -h, --help display help for command ``` @@ -158,6 +148,15 @@ function ParentComponent() { ); } +function App() { + return ( +
+

Pet List

+ +
+ ); +} + export default App; ``` diff --git a/examples/react-app/package.json b/examples/react-app/package.json index fb997a7..c6a5005 100644 --- a/examples/react-app/package.json +++ b/examples/react-app/package.json @@ -9,7 +9,7 @@ "dev:mock": "prism mock ./petstore.yaml --dynamic", "build": "tsc && vite build", "preview": "vite preview", - "generate:api": "node ../../dist/cli.mjs -i ./petstore.yaml -c axios --request ./request.ts --postfixServices=Client", + "generate:api": "node ../../dist/cli.mjs -i ./petstore.yaml -c axios --request ./request.ts", "test:generated": "tsc -p ./tsconfig.openapi.json --noEmit" }, "dependencies": { diff --git a/examples/react-app/src/App.tsx b/examples/react-app/src/App.tsx index 3c18510..007340d 100644 --- a/examples/react-app/src/App.tsx +++ b/examples/react-app/src/App.tsx @@ -1,10 +1,10 @@ import "./App.css"; import { - useDefaultClientAddPet, - useDefaultClientFindPets, - useDefaultClientFindPetsKey, - useDefaultClientGetNotDefined, - useDefaultClientPostNotDefined, + useDefaultServiceAddPet, + useDefaultServiceFindPets, + useDefaultServiceFindPetsKey, + useDefaultServiceGetNotDefined, + useDefaultServicePostNotDefined, } from "../openapi/queries"; import { useState } from "react"; import { queryClient } from "./queryClient"; @@ -14,18 +14,16 @@ function App() { const [tags, _setTags] = useState([]); const [limit, _setLimit] = useState(10); - const { data, error, refetch } = useDefaultClientFindPets({ - data: { tags, limit }, - }); + const { data, error, refetch } = useDefaultServiceFindPets({ tags, limit }); // This is an example of a query that is not defined in the OpenAPI spec // this defaults to any - here we are showing how to override the type // Note - this is marked as deprecated in the OpenAPI spec and being passed to the client - const { data: notDefined } = useDefaultClientGetNotDefined(); + const { data: notDefined } = useDefaultServiceGetNotDefined(); const { mutate: mutateNotDefined } = - useDefaultClientPostNotDefined(); + useDefaultServicePostNotDefined(); - const { mutate: addPet } = useDefaultClientAddPet(); + const { mutate: addPet } = useDefaultServiceAddPet(); if (error) return ( @@ -48,14 +46,12 @@ function App() { onClick={() => { addPet( { - data: { - requestBody: { name: "Duggy" }, - }, + requestBody: { name: "Duggy" }, }, { onSuccess: () => { queryClient.invalidateQueries({ - queryKey: [useDefaultClientFindPetsKey], + queryKey: [useDefaultServiceFindPetsKey], }); console.log("success"); }, diff --git a/examples/react-app/src/components/SuspenseChild.tsx b/examples/react-app/src/components/SuspenseChild.tsx index d2f482e..0999316 100644 --- a/examples/react-app/src/components/SuspenseChild.tsx +++ b/examples/react-app/src/components/SuspenseChild.tsx @@ -1,7 +1,7 @@ -import { useDefaultClientFindPetsSuspense } from "../../openapi/queries/suspense"; +import { useDefaultServiceFindPetsSuspense } from "../../openapi/queries/suspense"; export const SuspenseChild = () => { - const { data } = useDefaultClientFindPetsSuspense({ tags: [], limit: 10 }); + const { data } = useDefaultServiceFindPetsSuspense({ tags: [], limit: 10 }); if (!Array.isArray(data)) { return
Error!
; diff --git a/examples/react-app/src/components/SuspenseParent.tsx b/examples/react-app/src/components/SuspenseParent.tsx index d86e793..3498100 100644 --- a/examples/react-app/src/components/SuspenseParent.tsx +++ b/examples/react-app/src/components/SuspenseParent.tsx @@ -3,10 +3,8 @@ import { SuspenseChild } from "./SuspenseChild"; export const SuspenseParent = () => { return ( - <> - loading...}> - - - + loading...}> + + ); }; diff --git a/examples/react-app/src/main.tsx b/examples/react-app/src/main.tsx index e0d6b27..b8a928c 100644 --- a/examples/react-app/src/main.tsx +++ b/examples/react-app/src/main.tsx @@ -1,13 +1,14 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App' -import './index.css' -import { QueryClientProvider } from '@tanstack/react-query' -import { queryClient } from './queryClient' -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; +import "./index.css"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { queryClient } from "./queryClient"; + +ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( -) +); diff --git a/package.json b/package.json index c9097e9..7006003 100644 --- a/package.json +++ b/package.json @@ -37,16 +37,18 @@ "author": "Daiki Urata (@7nohe)", "license": "MIT", "devDependencies": { - "@hey-api/openapi-ts": "0.34.5", + "@hey-api/openapi-ts": "0.36.0", "@types/node": "^20.10.6", "commander": "^12.0.0", "glob": "^10.3.10", + "ts-morph": "^22.0.0", "typescript": "^5.3.3" }, "peerDependencies": { - "@hey-api/openapi-ts": "0.34.5", + "@hey-api/openapi-ts": "0.36.0", "commander": ">= 11 < 13", "glob": ">= 10", + "ts-morph": ">= 22 < 23", "typescript": ">= 4.8.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32e3ff1..99b8192 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@hey-api/openapi-ts': - specifier: 0.34.5 - version: 0.34.5 + specifier: 0.36.0 + version: 0.36.0(typescript@5.4.3) '@types/node': specifier: ^20.10.6 version: 20.12.2 @@ -20,6 +20,9 @@ importers: glob: specifier: ^10.3.10 version: 10.3.12 + ts-morph: + specifier: ^22.0.0 + version: 22.0.0 typescript: specifier: ^5.3.3 version: 5.4.3 @@ -516,16 +519,19 @@ packages: engines: {node: '>=14.0.0', npm: '>=6.0.0'} dev: true - /@hey-api/openapi-ts@0.34.5: - resolution: {integrity: sha512-aW5Q2Mgm0vDZK42EBWHgDk8VLptGyREA23s8FyKeE37YaNsJB5PP+gbSM1jW0QuTGGXStHHP8dpxcVz6N4XmjA==} + /@hey-api/openapi-ts@0.36.0(typescript@5.4.3): + resolution: {integrity: sha512-vm7td6EAisXiIfaQSZmR/2T7jUt+7YGjXacQ2qSlVlJCQp+RSAhZ9xxx88fAzjYHRdv4V5BXqGl2Q2lSw2sCGg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + peerDependencies: + typescript: ^5.x dependencies: '@apidevtools/json-schema-ref-parser': 11.5.4 c12: 1.10.0 camelcase: 8.0.0 commander: 12.0.0 handlebars: 4.7.8 + typescript: 5.4.3 dev: true /@isaacs/cliui@8.0.2: @@ -574,6 +580,27 @@ packages: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} dev: true + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -938,6 +965,15 @@ packages: engines: {node: '>= 10'} dev: true + /@ts-morph/common@0.23.0: + resolution: {integrity: sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==} + dependencies: + fast-glob: 3.3.2 + minimatch: 9.0.4 + mkdirp: 3.0.1 + path-browserify: 1.0.1 + dev: true + /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: @@ -1315,6 +1351,10 @@ packages: wrap-ansi: 7.0.0 dev: true + /code-block-writer@13.0.1: + resolution: {integrity: sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg==} + dev: true + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -1671,6 +1711,17 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + /fast-redact@3.5.0: resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} @@ -1691,6 +1742,12 @@ packages: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} dev: true + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + dev: true + /figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} @@ -2347,6 +2404,11 @@ packages: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + /micri@4.5.1: resolution: {integrity: sha512-AtvnSBGFglNr+iqs5gufpHT9xRXUabgu9vYEnQYPXSBs+nLSBvmUS5Mzg+3LJ9eQBrNA1o5M49WeqiX1f+d2sg==} engines: {node: '>= 12.0.0'} @@ -2354,6 +2416,14 @@ packages: handler-agent: 0.2.0 dev: true + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -2434,6 +2504,12 @@ packages: hasBin: true dev: true + /mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + dev: true + /mlly@1.6.1: resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} dependencies: @@ -2618,6 +2694,10 @@ packages: lodash.camelcase: 4.3.0 dev: true + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -2773,6 +2853,10 @@ packages: engines: {node: '>=6'} dev: true + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: true @@ -2861,6 +2945,11 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + /rollup@4.13.2: resolution: {integrity: sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -2886,6 +2975,12 @@ packages: fsevents: 2.3.3 dev: true + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + /safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -3200,6 +3295,13 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true + /ts-morph@22.0.0: + resolution: {integrity: sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==} + dependencies: + '@ts-morph/common': 0.23.0 + code-block-writer: 13.0.1 + dev: true + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true diff --git a/src/cli.mts b/src/cli.mts index 95f90ad..cb93fc4 100644 --- a/src/cli.mts +++ b/src/cli.mts @@ -31,22 +31,9 @@ async function setupProgram() { .choices(["angular", "axios", "fetch", "node", "xhr"]) .default("fetch") ) - .option("--exportSchemas ", "Write schemas to disk") - .option("--postfixServices ", "Service name postfix", "Service") - .option( - "--postfixModels ", - "Depreciated - now unused - left for backwards compatibility" - ) .option("--request ", "Path to custom request file") - .option( - "--exportCore ", - "Export core - Generate Core client classes?" - ) - .option("--exportModels ", "Generate models?") - .option("--exportServices ", "Generate services?") .option("--format", "Process output folder with formatter?") .option("--lint", "Process output folder with linter?") - .option("--name", "Custom client class name") .option("--operationId", "Use operation ID to generate operation names?") .addOption( new Option( @@ -63,26 +50,6 @@ async function setupProgram() { "--useDateType", "Use Date type instead of string for date types for models, this will not convert the data to a Date object" ) - /* TODO: Implement this feature - useOptions - * currently this will not work because the options are new exports of the Services - * we new to be able to import any of the options from each service into the queries files - */ - // .option("--useOptions ", "Use options or arguments functions") - .option("--write", "Write the files to disk (true or false)") - // TODO: remove these options in the next major release - .addOption( - new Option( - "--indent ", - "Depreciated - now unused - left for backwards compatibility" - ).hideHelp() - ) - // TODO: remove these options in the next major release - .addOption( - new Option( - "--useUnionTypes ", - "Depreciated - now unused - left for backwards compatibility" - ).hideHelp() - ) .parse(); const options = program.opts(); diff --git a/src/common.mts b/src/common.mts index 59e9895..3d8acb2 100644 --- a/src/common.mts +++ b/src/common.mts @@ -1,6 +1,12 @@ import { type PathLike } from "fs"; import { stat } from "fs/promises"; -import ts, { JSDocComment, NodeArray, SourceFile } from "typescript"; +import ts from "typescript"; +import { + MethodDeclaration, + JSDoc, + SourceFile, + ParameterDeclaration, +} from "ts-morph"; export const TData = ts.factory.createIdentifier("TData"); export const TError = ts.factory.createIdentifier("TError"); @@ -20,20 +26,17 @@ export const lowercaseFirstLetter = (str: string) => { return str.charAt(0).toLowerCase() + str.slice(1); }; -export const getNameFromMethod = ( - method: ts.MethodDeclaration, - node: ts.SourceFile -) => { - return method.name.getText(node); +export const getNameFromMethod = (method: MethodDeclaration) => { + return method.getName(); }; export type MethodDescription = { className: string; node: SourceFile; - method: ts.MethodDeclaration; + method: MethodDeclaration; methodBlock: ts.Block; httpMethodName: string; - jsDoc: (string | NodeArray | undefined)[]; + jsDoc: JSDoc[]; isDeprecated: boolean; }; @@ -71,3 +74,18 @@ export function safeParseNumber(value: unknown): number { } return NaN; } + +export function extractPropertiesFromObjectParam(param: ParameterDeclaration) { + const referenced = param.findReferences()[0]; + const def = referenced.getDefinition(); + const paramNodes = def + .getNode() + .getType() + .getProperties() + .map((prop) => ({ + name: prop.getName(), + optional: prop.isOptional(), + type: prop.getValueDeclaration()?.getType()!, + })); + return paramNodes; +} diff --git a/src/createImports.mts b/src/createImports.mts index 4c1e8f3..af46878 100644 --- a/src/createImports.mts +++ b/src/createImports.mts @@ -2,6 +2,7 @@ import ts from "typescript"; import { glob } from "glob"; import { extname, basename, posix } from "path"; import { Service } from "./service.mjs"; +import { Project } from "ts-morph"; const { join } = posix; @@ -9,10 +10,12 @@ export const createImports = async ({ generatedClientsPath, service, serviceEndName, + project, }: { generatedClientsPath: string; service: Service; serviceEndName: string; + project: Project; }) => { const { klasses } = service; // get all class names @@ -20,6 +23,16 @@ export const createImports = async ({ // remove duplicates const uniqueClassNames = [...new Set(classNames)]; + const modelsFile = project + .getSourceFiles() + .find((sourceFile) => sourceFile.getFilePath().includes("models.ts")); + + if (!modelsFile) { + throw new Error("No models file found"); + } + + const modalNames = Array.from(modelsFile.getExportedDeclarations().keys()); + const modalsPath = join(generatedClientsPath, "models").replace(/\\/g, "/"); const servicesPath = join(generatedClientsPath, "services").replace( /\\/g, @@ -158,5 +171,24 @@ export const createImports = async ({ undefined ); }), + // import all the models by name + ts.factory.createImportDeclaration( + undefined, + ts.factory.createImportClause( + false, + undefined, + ts.factory.createNamedImports([ + ...modalNames.map((modelName) => + ts.factory.createImportSpecifier( + false, + undefined, + ts.factory.createIdentifier(modelName) + ) + ), + ]) + ), + ts.factory.createStringLiteral(join("../requests/models")), + undefined + ), ]; }; diff --git a/src/createSource.mts b/src/createSource.mts index 3e5881f..3147e89 100644 --- a/src/createSource.mts +++ b/src/createSource.mts @@ -2,14 +2,28 @@ import ts from "typescript"; import { createImports } from "./createImports.mjs"; import { createExports } from "./createExports.mjs"; import { getServices } from "./service.mjs"; +import { Project } from "ts-morph"; +import { join } from "path"; const createSourceFile = async (outputPath: string, serviceEndName: string) => { - const service = await getServices(outputPath); + const project = new Project({ + // Optionally specify compiler options, tsconfig.json, in-memory file system, and more here. + // If you initialize with a tsconfig.json, then it will automatically populate the project + // with the associated source files. + // Read more: https://ts-morph.com/setup/ + skipAddingFilesFromTsConfig: true, + }); + + const sourceFiles = join(process.cwd(), outputPath); + project.addSourceFilesAtPaths(`${sourceFiles}/**/*`); + + const service = await getServices(project); const imports = await createImports({ generatedClientsPath: outputPath, service, serviceEndName, + project, }); const exports = createExports(service); diff --git a/src/createUseMutation.mts b/src/createUseMutation.mts index a2e41aa..a302536 100644 --- a/src/createUseMutation.mts +++ b/src/createUseMutation.mts @@ -6,6 +6,7 @@ import { TData, TError, capitalizeFirstLetter, + extractPropertiesFromObjectParam, getNameFromMethod, } from "./common.mjs"; import { addJSDocToNode } from "./util.mjs"; @@ -46,7 +47,7 @@ export const createUseMutation = ({ jsDoc = [], isDeprecated = false, }: MethodDescription) => { - const methodName = getNameFromMethod(method, node); + const methodName = getNameFromMethod(method); const awaitedResponseDataType = generateAwaitedReturnType({ className, methodName, @@ -69,18 +70,37 @@ export const createUseMutation = ({ ); const methodParameters = - method.parameters.length !== 0 + method.getParameters().length !== 0 ? ts.factory.createTypeLiteralNode( - method.parameters.map((param) => { - return ts.factory.createPropertySignature( - undefined, - ts.factory.createIdentifier(param.name.getText(node)), - param.questionToken ?? param.initializer - ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) - : param.questionToken, - param.type - ); - }) + method + .getParameters() + .map((param) => { + const paramNodes = extractPropertiesFromObjectParam(param); + return paramNodes.map((refParam) => + ts.factory.createPropertySignature( + undefined, + ts.factory.createIdentifier(refParam.name), + refParam.optional + ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) + : undefined, + // refParam.questionToken ?? refParam.initializer + // ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) + // : refParam.questionToken, + ts.factory.createTypeReferenceNode( + refParam.type.getText(param) + ) + ) + ); + }) + .flat() + // return ts.factory.createPropertySignature( + // undefined, + // ts.factory.createIdentifier(param.getName()), + // param.compilerNode.questionToken ?? param.compilerNode.initializer + // ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) + // : param.compilerNode.questionToken, + // param.compilerNode.type + // ); ) : ts.factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword); @@ -154,22 +174,29 @@ export const createUseMutation = ({ ts.factory.createArrowFunction( undefined, undefined, - method.parameters.length !== 0 + method.getParameters().length !== 0 ? [ ts.factory.createParameterDeclaration( undefined, undefined, ts.factory.createObjectBindingPattern( - method.parameters.map((param) => { - return ts.factory.createBindingElement( - undefined, - undefined, - ts.factory.createIdentifier( - param.name.getText(node) - ), - undefined - ); - }) + method + .getParameters() + .map((param) => { + const paramNodes = + extractPropertiesFromObjectParam(param); + return paramNodes.map((refParam) => + ts.factory.createBindingElement( + undefined, + undefined, + ts.factory.createIdentifier( + refParam.name + ), + undefined + ) + ); + }) + .flat() ), undefined, undefined, @@ -189,11 +216,26 @@ export const createUseMutation = ({ ts.factory.createIdentifier(methodName) ), undefined, - method.parameters.map((params) => - ts.factory.createIdentifier( - params.name.getText(node) - ) - ) + method.getParameters().length !== 0 + ? [ + ts.factory.createObjectLiteralExpression( + method + .getParameters() + .map((params) => { + const paramNodes = + extractPropertiesFromObjectParam( + params + ); + return paramNodes.map((refParam) => + ts.factory.createShorthandPropertyAssignment( + refParam.name + ) + ); + }) + .flat() + ), + ] + : [] ), ts.factory.createKeywordTypeNode( ts.SyntaxKind.UnknownKeyword diff --git a/src/createUseQuery.mts b/src/createUseQuery.mts index 17be417..2d7e4af 100644 --- a/src/createUseQuery.mts +++ b/src/createUseQuery.mts @@ -1,7 +1,9 @@ import ts from "typescript"; +import { MethodDeclaration } from "ts-morph"; import { BuildCommonTypeName, capitalizeFirstLetter, + extractPropertiesFromObjectParam, getNameFromMethod, queryKeyConstraint, queryKeyGenericType, @@ -70,11 +72,8 @@ export const createApiResponseType = ({ }; }; -export function getRequestParamFromMethod( - method: ts.MethodDeclaration, - node: ts.SourceFile -) { - if (!method.parameters.length) { +export function getRequestParamFromMethod(method: MethodDeclaration) { + if (!method.getParameters().length) { return null; } @@ -84,41 +83,42 @@ export function getRequestParamFromMethod( undefined, undefined, ts.factory.createObjectBindingPattern( - method.parameters.map((param) => { - const type = param.type; - if (!type) { - throw new Error("No type found"); - } - const subTypes = type?.getChildren(); - if (!subTypes) { - throw new Error("No subType found"); - } - console.log(param.type as ts.TypeNode); - // console.log(param.type?.getText(node)); - // console.log(subType.getText(node)); - subTypes.forEach((subType) => { - console.log(subType.kind); - }); - return ts.factory.createBindingElement( - undefined, - undefined, - ts.factory.createIdentifier(param.name.getText(node)), - undefined - ); - }) + method + .getParameters() + .map((param) => { + const paramNodes = extractPropertiesFromObjectParam(param); + return paramNodes.map((refParam) => + ts.factory.createBindingElement( + undefined, + undefined, + ts.factory.createIdentifier(refParam.name), + undefined + ) + ); + }) + .flat() ), undefined, ts.factory.createTypeLiteralNode( - method.parameters.map((param) => - ts.factory.createPropertySignature( - undefined, - ts.factory.createIdentifier(param.name.getText(node)), - param.questionToken ?? param.initializer - ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) - : param.questionToken, - param.type - ) - ) + method + .getParameters() + .map((param) => { + const paramNodes = extractPropertiesFromObjectParam(param); + return paramNodes.map((refParam) => { + return ts.factory.createPropertySignature( + undefined, + ts.factory.createIdentifier(refParam.name), + refParam.optional + ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) + : undefined, + // param.hasQuestionToken() ?? param.getInitializer()?.compilerNode + // ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) + // : param.getQuestionTokenNode()?.compilerNode, + ts.factory.createTypeReferenceNode(refParam.type.getText()) + ); + }); + }) + .flat() ) ); } @@ -199,27 +199,23 @@ export function createQueryKeyExport({ function hookNameFromMethod({ method, - node, className, }: { - method: ts.MethodDeclaration; - node: ts.SourceFile; + method: MethodDeclaration; className: string; }) { - const methodName = getNameFromMethod(method, node); + const methodName = getNameFromMethod(method); return `use${className}${capitalizeFirstLetter(methodName)}`; } function createQueryKeyFromMethod({ method, - node, className, }: { - method: ts.MethodDeclaration; - node: ts.SourceFile; + method: MethodDeclaration; className: string; }) { - const customHookName = hookNameFromMethod({ method, node, className }); + const customHookName = hookNameFromMethod({ method, className }); const queryKey = `${customHookName}Key`; return queryKey; } @@ -235,20 +231,18 @@ function createQueryHook({ responseDataType, requestParams, method, - node, className, }: { queryString: "useSuspenseQuery" | "useQuery"; suffix: string; responseDataType: ts.TypeParameterDeclaration; requestParams: ts.ParameterDeclaration[]; - method: ts.MethodDeclaration; - node: ts.SourceFile; + method: MethodDeclaration; className: string; }) { - const methodName = getNameFromMethod(method, node); - const customHookName = hookNameFromMethod({ method, node, className }); - const queryKey = createQueryKeyFromMethod({ method, node, className }); + const methodName = getNameFromMethod(method); + const customHookName = hookNameFromMethod({ method, className }); + const queryKey = createQueryKeyFromMethod({ method, className }); const hookExport = ts.factory.createVariableStatement( [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)], @@ -338,16 +332,23 @@ function createQueryHook({ ts.factory.createToken( ts.SyntaxKind.QuestionQuestionToken ), - method.parameters.length + method.getParameters().length ? ts.factory.createArrayLiteralExpression([ ts.factory.createObjectLiteralExpression( - method.parameters.map((param) => - ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier( - param.name.getText(node) + method + .getParameters() + .map((param) => + extractPropertiesFromObjectParam( + param + ).map((p) => + ts.factory.createShorthandPropertyAssignment( + ts.factory.createIdentifier( + p.name + ) + ) ) ) - ) + .flat() ), ]) : ts.factory.createArrayLiteralExpression([]) @@ -375,11 +376,24 @@ function createQueryHook({ ts.factory.createIdentifier(methodName) ), undefined, - method.parameters.map((param) => - ts.factory.createIdentifier( - param.name.getText(node) - ) - ) + method.getParameters().length + ? [ + ts.factory.createObjectLiteralExpression( + method + .getParameters() + .map((param) => + extractPropertiesFromObjectParam( + param + ).map((p) => + ts.factory.createShorthandPropertyAssignment( + ts.factory.createIdentifier(p.name) + ) + ) + ) + .flat() + ), + ] + : undefined ), ts.factory.createTypeReferenceNode(TData) ) @@ -407,15 +421,15 @@ export const createUseQuery = ({ jsDoc = [], isDeprecated: deprecated = false, }: MethodDescription) => { - const methodName = getNameFromMethod(method, node); - const queryKey = createQueryKeyFromMethod({ method, node, className }); + const methodName = getNameFromMethod(method); + const queryKey = createQueryKeyFromMethod({ method, className }); const { apiResponse: defaultApiResponse, responseDataType } = createApiResponseType({ className, methodName, }); - const requestParam = getRequestParamFromMethod(method, node); + const requestParam = getRequestParamFromMethod(method); const requestParams = requestParam ? [requestParam] : []; @@ -425,7 +439,6 @@ export const createUseQuery = ({ responseDataType, requestParams, method, - node, className, }); const suspenseQueryHook = createQueryHook({ @@ -434,7 +447,6 @@ export const createUseQuery = ({ responseDataType, requestParams, method, - node, className, }); diff --git a/src/generate.mts b/src/generate.mts index b713944..bde4d22 100644 --- a/src/generate.mts +++ b/src/generate.mts @@ -30,16 +30,20 @@ export async function generate(options: UserConfig, version: string) { }, options ); - await createClient({ + const config: UserConfig = { ...formattedOptions, output: openApiOutputPath, useOptions: true, - }); - const { postfixServices } = formattedOptions; + exportCore: true, + exportModels: true, + exportServices: true, + write: true, + }; + await createClient(config); const source = await createSource({ outputPath: openApiOutputPath, version, - serviceEndName: postfixServices!, + serviceEndName: "Service", // we are hard coding this because changing the service end name was depreciated in @hey-api/openapi-ts }); await print(source, formattedOptions); } diff --git a/src/service.mts b/src/service.mts index a648bc0..14239ed 100644 --- a/src/service.mts +++ b/src/service.mts @@ -1,39 +1,29 @@ -import { readFile } from "fs/promises"; -import { join } from "path"; -import ts, { JSDoc } from "typescript"; +import ts from "typescript"; +import { ClassDeclaration, Project, SourceFile } from "ts-morph"; import { MethodDescription } from "./common.mjs"; export type Service = { - node: ts.SourceFile; + node: SourceFile; klasses: Array<{ className: string; - klass: ts.ClassDeclaration; + klass: ClassDeclaration; methods: Array; }>; }; -export async function getServices( - generatedClientsPath: string -): Promise { - const pathToService = join(generatedClientsPath, "services.ts").replace( - /\\/g, - "/" - ); - const servicesPath = await readFile( - join(process.cwd(), pathToService), - "utf-8" - ); - - const node = ts.createSourceFile( - pathToService, // fileName - servicesPath, - ts.ScriptTarget.Latest // languageVersion - ); +export async function getServices(project: Project): Promise { + const node = project + .getSourceFiles() + .find((sourceFile) => sourceFile.getFilePath().includes("services.ts")); + + if (!node) { + throw new Error("No service node found"); + } const klasses = getClassesFromService(node); return { klasses: klasses.map(({ klass, className }) => ({ - className: className, + className, klass, methods: getMethodsFromService(node, klass), })), @@ -41,24 +31,18 @@ export async function getServices( } satisfies Service; } -function getClassesFromService(node: ts.SourceFile) { - const nodeChildren = node.getChildren(); - if (!nodeChildren.length) { - throw new Error("No children found"); - } - - const subChildren = nodeChildren.map((child) => child.getChildren()).flat(); +function getClassesFromService(node: SourceFile) { + const klasses = node.getClasses(); - const foundKlasses = subChildren.filter( - (child) => child.kind === ts.SyntaxKind.ClassDeclaration - ); - - if (!foundKlasses.length) { + if (!klasses.length) { throw new Error("No classes found"); } - const klasses = foundKlasses as ts.ClassDeclaration[]; + return klasses.map((klass) => { - const className = getClassNameFromClassNode(klass); + const className = klass.getName(); + if (!className) { + throw new Error("Class name not found"); + } return { className, klass, @@ -66,8 +50,8 @@ function getClassesFromService(node: ts.SourceFile) { }); } -function getClassNameFromClassNode(klass: ts.ClassDeclaration) { - const className = String(klass.name?.escapedText); +function getClassNameFromClassNode(klass: ClassDeclaration) { + const className = klass.getName(); if (!className) { throw new Error("Class name not found"); @@ -75,19 +59,14 @@ function getClassNameFromClassNode(klass: ts.ClassDeclaration) { return className; } -function getMethodsFromService( - node: ts.SourceFile, - klass: ts.ClassDeclaration -) { - const methods = klass.members.filter( - (node) => node.kind === ts.SyntaxKind.MethodDeclaration - ) as ts.MethodDeclaration[]; +function getMethodsFromService(node: SourceFile, klass: ClassDeclaration) { + const methods = klass.getMethods(); if (!methods.length) { throw new Error("No methods found"); } return methods.map((method) => { - const methodBlockNode = method - .getChildren(node) + const methodBlockNode = method.compilerNode + .getChildren(node.compilerNode) .find((child) => child.kind === ts.SyntaxKind.Block); if (!methodBlockNode) { @@ -110,15 +89,15 @@ function getMethodsFromService( callExpression.arguments[1] as ts.ObjectLiteralExpression ).properties as unknown as ts.PropertyAssignment[]; const httpMethodName = properties - .find((p) => p.name?.getText(node) === "method") - ?.initializer?.getText(node); + .find((p) => p.name?.getText(node.compilerNode) === "method") + ?.initializer?.getText(node.compilerNode); if (!httpMethodName) { throw new Error("httpMethodName not found"); } const getAllChildren = (tsNode: ts.Node): Array => { - const childItems = tsNode.getChildren(node); + const childItems = tsNode.getChildren(node.compilerNode); if (childItems.length) { const allChildren = childItems.map(getAllChildren); return [tsNode].concat(allChildren.flat()); @@ -126,10 +105,8 @@ function getMethodsFromService( return [tsNode]; }; - const children = getAllChildren(method); - const jsDoc = children - .filter((c) => c.kind === ts.SyntaxKind.JSDoc) - .map((c) => (c as JSDoc).comment); + const children = getAllChildren(method.compilerNode); + const jsDoc = method.getJsDocs().map((jsDoc) => jsDoc); const isDeprecated = children.some( (c) => c.kind === ts.SyntaxKind.JSDocDeprecatedTag ); diff --git a/src/util.mts b/src/util.mts index 8dd7f73..9de8417 100644 --- a/src/util.mts +++ b/src/util.mts @@ -1,10 +1,11 @@ -import ts from 'typescript'; +import ts from "typescript"; +import { JSDoc, SourceFile } from "ts-morph"; export function addJSDocToNode( node: T, - sourceFile: ts.SourceFile, + sourceFile: SourceFile, deprecated: boolean, - jsDoc: (string | ts.NodeArray | undefined)[] = [], + jsDoc: JSDoc[] = [] ): T { const deprecatedString = deprecated ? "@deprecated" : ""; @@ -39,6 +40,6 @@ export function addJSDocToNode( true ) : node; - + return nodeWithJSDoc; -} \ No newline at end of file +} From ba854a8a25daa1fce29428e0d948da219995e0b5 Mon Sep 17 00:00:00 2001 From: Landon Gavin Date: Mon, 8 Apr 2024 13:13:21 -0400 Subject: [PATCH 3/5] chore(engine): set node min version to support esm modules --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 7006003..cbc22cf 100644 --- a/package.json +++ b/package.json @@ -50,5 +50,8 @@ "glob": ">= 10", "ts-morph": ">= 22 < 23", "typescript": ">= 4.8.3" + }, + "engines": { + "node": ">=14" } } From 4893b2254c34e15422b126c691f52b805110d49d Mon Sep 17 00:00:00 2001 From: Landon Gavin Date: Mon, 8 Apr 2024 13:17:29 -0400 Subject: [PATCH 4/5] ci: change node test version to 20 Messed this value up in a merge --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b342969..5dc461c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 cache: "pnpm" - name: Install dependencies From 585b5332de4dc123fa05cb800b064a147a7ea037 Mon Sep 17 00:00:00 2001 From: Landon Gavin Date: Mon, 8 Apr 2024 13:45:43 -0400 Subject: [PATCH 5/5] fix: remove unused imports --- src/createImports.mts | 56 ++----------------------------------------- src/createSource.mts | 3 +-- 2 files changed, 3 insertions(+), 56 deletions(-) diff --git a/src/createImports.mts b/src/createImports.mts index af46878..a7559b0 100644 --- a/src/createImports.mts +++ b/src/createImports.mts @@ -1,18 +1,15 @@ import ts from "typescript"; -import { glob } from "glob"; -import { extname, basename, posix } from "path"; +import { posix } from "path"; import { Service } from "./service.mjs"; import { Project } from "ts-morph"; const { join } = posix; -export const createImports = async ({ - generatedClientsPath, +export const createImports = ({ service, serviceEndName, project, }: { - generatedClientsPath: string; service: Service; serviceEndName: string; project: Project; @@ -33,15 +30,6 @@ export const createImports = async ({ const modalNames = Array.from(modelsFile.getExportedDeclarations().keys()); - const modalsPath = join(generatedClientsPath, "models").replace(/\\/g, "/"); - const servicesPath = join(generatedClientsPath, "services").replace( - /\\/g, - "/" - ); - const [models, services] = await Promise.all([ - glob(join(modalsPath, "*.ts")), - glob(join(servicesPath, "*.ts")), - ]); return [ ts.factory.createImportDeclaration( undefined, @@ -89,46 +77,6 @@ export const createImports = async ({ ts.factory.createStringLiteral("@tanstack/react-query"), undefined ), - ...models.map((model) => { - const modelName = basename(model, extname(model)); - return ts.factory.createImportDeclaration( - undefined, - ts.factory.createImportClause( - false, - undefined, - ts.factory.createNamedImports([ - ts.factory.createImportSpecifier( - false, - undefined, - ts.factory.createIdentifier(modelName) - ), - ]) - ), - ts.factory.createStringLiteral(join("../requests/models/", modelName)), - undefined - ); - }), - ...services.map((service) => { - const serviceName = basename(service, extname(service)); - return ts.factory.createImportDeclaration( - undefined, - ts.factory.createImportClause( - false, - undefined, - ts.factory.createNamedImports([ - ts.factory.createImportSpecifier( - false, - undefined, - ts.factory.createIdentifier(serviceName) - ), - ]) - ), - ts.factory.createStringLiteral( - join("../requests/services", serviceName) - ), - undefined - ); - }), // import all class names from service file ...uniqueClassNames.map((className) => { return ts.factory.createImportDeclaration( diff --git a/src/createSource.mts b/src/createSource.mts index 3147e89..bea3f47 100644 --- a/src/createSource.mts +++ b/src/createSource.mts @@ -19,8 +19,7 @@ const createSourceFile = async (outputPath: string, serviceEndName: string) => { const service = await getServices(project); - const imports = await createImports({ - generatedClientsPath: outputPath, + const imports = createImports({ service, serviceEndName, project,