diff --git a/.changeset/famous-hotels-accept.md b/.changeset/famous-hotels-accept.md new file mode 100644 index 00000000..8c79aa42 --- /dev/null +++ b/.changeset/famous-hotels-accept.md @@ -0,0 +1,8 @@ +--- +"@promster/apollo": patch +"@promster/express": patch +"@promster/fastify": patch +"@promster/hapi": patch +--- + +Refactor to use biome over ESLint and prettier diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 3f6e97f0..00000000 --- a/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -coverage/ -dist/ -.eslintrc.cjs -packages/**/index.ts -**/ts-build-cache diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 248ecfbc..00000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,56 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - extends: ['xo', 'prettier', 'plugin:jest/recommended'], - env: { - es6: true, - jest: true, - }, - plugins: ['prettier', 'jest'], - rules: { - 'jest/no-disabled-tests': 'warn', - 'jest/no-focused-tests': 'error', - 'jest/no-identical-title': 'error', - 'jest/valid-expect': 'error', - 'prefer-object-spread': 'off', - 'max-nested-callbacks': ['error', 20], - 'no-unused-vars': ['warn'], - }, - overrides: [ - { - files: ['*.spec.js'], - rules: { - '@typescript-eslint/no-var-requires': 0, - '@typescript-eslint/no-unsafe-argument': 0, - }, - }, - { - files: ['*.ts'], - parserOptions: { - sourceType: 'module', - ecmaVersion: 2020, - project: ['./packages/*/tsconfig.json'], - }, - extends: ['xo-typescript', 'xo', 'prettier', 'plugin:jest/recommended'], - rules: { - '@typescript-eslint/no-unsafe-argument': 'warn', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/prefer-readonly-parameter-types': 'off', - '@typescript-eslint/no-unsafe-call': 0, - '@typescript-eslint/no-require-imports': 0, - '@typescript-eslint/no-unsafe-member-access': 0, - '@typescript-eslint/no-unsafe-assignment': 0, - '@typescript-eslint/no-unsafe-return': 0, - '@typescript-eslint/ban-ts-comment': 0, - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'warn', - '@typescript-eslint/naming-convention': 0, - '@typescript-eslint/no-redundant-type-constituents': 0, - 'prefer-object-spread': 'off', - 'no-unused-vars': ['warn'], - }, - }, - ], - globals: { - VERSION: true, - }, -}; diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ddbbdfb7..d1eef7d4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,10 +10,6 @@ jobs: install: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [20.x, 22.x] - steps: - name: Checkout uses: actions/checkout@v4 @@ -26,27 +22,28 @@ jobs: - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node-version }} + node-version-file: '.nvmrc' cache: pnpm - name: Install run: pnpm install - name: Lint - run: pnpm lint + run: pnpm biome check - name: Spell check uses: streetsidesoftware/cspell-action@main with: - files: '**/*.{md,ts}' + files: "**/*.{md,ts}" - name: Build run: pnpm build - - name: Test - if: startsWith(matrix.node-version , '22') - run: pnpm test:ci - - name: Test (with coverage) - if: startsWith(matrix.node-version, '20') run: pnpm test:ci:coverage + + - uses: codecov/codecov-action@v5 + with: + fail_ci_if_error: true + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true diff --git a/.jestrc.lint.json b/.jestrc.lint.json deleted file mode 100644 index 67e9e5db..00000000 --- a/.jestrc.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "runner": "jest-runner-eslint", - "displayName": "lint", - "testMatch": ["/packages/**/*.js", "/packages/**/*.ts"] -} diff --git a/.mise.toml b/.mise.toml index 9947b6be..6a0493c6 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,2 +1,2 @@ [tools] -node = "22.8" +node = "22" diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index cf9d226d..00000000 --- a/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -package.json -**/dist/** -pnpm-lock.yaml -pnpm-workspace.yaml diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index c6a1376d..00000000 --- a/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "trailingComma": "es5", - "singleQuote": true -} diff --git a/.vscode/settings.json b/.vscode/settings.json index f3c1c2b1..ba7e587f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,16 @@ { - "workbench.colorCustomizations": { - "tab.unfocusedActiveBorder": "#fff0" - }, - "gitdoc.enabled": false -} \ No newline at end of file + "workbench.colorCustomizations": { + "tab.unfocusedActiveBorder": "#fff0" + }, + "gitdoc.enabled": false, + "editor.defaultFormatter": "biomejs.biome", + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit" + }, + "[javascript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" + } +} diff --git a/biome.json b/biome.json new file mode 100644 index 00000000..ccf8ba1b --- /dev/null +++ b/biome.json @@ -0,0 +1,92 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "vcs": { + "clientKind": "git", + "enabled": true, + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": true + }, + "formatter": { + "enabled": true, + "formatWithErrors": false, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 80, + "ignore": [ + "**/package.json", + "**/dist/**", + "**/.changeset", + "**/CHANGELOG.md", + "**/pnpm-lock.yaml", + "**/pnpm-workspace.yaml" + ] + }, + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "performance": { + "noAccumulatingSpread": "off" + }, + "complexity": { + "noVoid": "error" + }, + "correctness": { + "noUndeclaredVariables": "error", + "noUnreachableSuper": "error", + "noUnusedVariables": "error", + "useArrayLiterals": "error", + "useExhaustiveDependencies": "warn" + }, + "style": { + "noNegationElse": "error", + "noRestrictedGlobals": { + "level": "error", + "options": { "deniedGlobals": ["event", "atob", "btoa"] } + }, + "useBlockStatements": "error", + "useCollapsedElseIf": "error", + "useConsistentArrayType": { + "level": "error", + "options": { "syntax": "shorthand" } + }, + "useForOf": "error", + "useFragmentSyntax": "error", + "useShorthandAssign": "error" + }, + "suspicious": { + "noEmptyBlockStatements": "error", + "noSkippedTests": "warn", + "noExplicitAny": "off" + } + }, + "ignore": ["**/node_modules/", "**/coverage/", "**/dist/"] + }, + "javascript": { + "formatter": { + "jsxQuoteStyle": "double", + "quoteProperties": "asNeeded", + "trailingCommas": "es5", + "semicolons": "always", + "arrowParentheses": "always", + "bracketSpacing": true, + "quoteStyle": "single" + }, + "globals": [ + "it", + "describe", + "expect", + "jest", + "before", + "beforeAll", + "beforeEach", + "after", + "afterAll", + "afterEach" + ] + } +} diff --git a/commitlint.config.js b/commitlint.config.js index 7fbc0edb..f45058fc 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,4 +1,3 @@ -/* eslint-disable */ module.exports = { extends: ['@commitlint/config-conventional'], parserPreset: { diff --git a/demo/apollo.js b/demo/apollo.js index 6def8d9a..0c520059 100644 --- a/demo/apollo.js +++ b/demo/apollo.js @@ -50,7 +50,7 @@ async function launchServer() { await server.listen().then(({ url }) => { console.log(`馃殌 Apollo Server ready at ${url}`); - console.log(`Prometheus metrics available on http://localhost:8080`); + console.log('Prometheus metrics available on http://localhost:8080'); signalIsUp(); }); diff --git a/demo/express.js b/demo/express.js index 2ef71421..9bdbeb73 100644 --- a/demo/express.js +++ b/demo/express.js @@ -14,7 +14,7 @@ async function launchServer() { detectKubernetes: false, }); - app.get('/', (req, res) => { + app.get('/', (_req, res) => { res.send('I am the server!'); }); @@ -25,7 +25,7 @@ async function launchServer() { signalIsUp(); }); - console.log(`Prometheus metrics available on http://localhost:8080`); + console.log('Prometheus metrics available on http://localhost:8080'); } launchServer().catch(console.log); diff --git a/jest-runner-eslint.config.js b/jest-runner-eslint.config.js deleted file mode 100644 index 88f79186..00000000 --- a/jest-runner-eslint.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - cliOptions: { - format: 'node_modules/eslint-formatter-pretty', - }, -}; diff --git a/lint-staged.config.js b/lint-staged.config.js index 2cd1cda1..6278bee7 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,4 +1,5 @@ module.exports = { - 'packages/**/*.{ts,js}': ['npm run fix:eslint', 'npm run format:js'], - '*.md': ['npm run format:md'], + '*': [ + 'biome check', // Format, sort imports, lint, and apply safe fixes + ], }; diff --git a/package.json b/package.json index a0a58678..76c2f39f 100644 --- a/package.json +++ b/package.json @@ -6,20 +6,18 @@ "auth": "npm_config_registry=https://registry.npmjs.org npm whoami", "build:watch": "preconstruct watch", "build": "preconstruct build", - "changeset:version-and-format": "changeset version && prettier --write --parser json '**/package.json' && pnpm install --no-frozen-lockfile", + "changeset:version-and-format": "changeset version && pnpm format '**/package.json' && pnpm install --no-frozen-lockfile", "changeset": "changeset", "clean": "manypkg exec rm -rf build dist tsconfig.tsbuildinfo ts-build-cache", - "develop": "jest --projects .jestrc.*.json --watch", - "fix:eslint": "eslint --fix --format=node_modules/eslint-formatter-pretty", - "format:js": "prettier --write '**/packages/**/*.{js,ts}'", - "format:md": "prettier --parser markdown --write '*.md'", - "format:yaml": "prettier --parser yaml --write '*.yaml'", - "format": "npm run format:md && npm run format:js && npm run format:yaml", - "lint": "jest --config .jestrc.lint.json", + "develop": "jest --projects .jestrc.test.json --watch", + "biome:check": "biome check --write", + "biome:fix": "biome lint --write", + "format": "biome format --write", + "lint": "biome lint", "prerelease": "cross-env NODE_ENV=production pnpm auth && pnpm build", "release": "changeset publish", "setup": "husky install && preconstruct dev && manypkg check && check-node-version --package --print", - "test:ci:coverage": "cross-env NODE_ENV=test npm test -- --no-watchman --coverage && codecov", + "test:ci:coverage": "cross-env NODE_ENV=test npm test -- --no-watchman --coverage", "test:ci": "cross-env NODE_ENV=test npm test -- --no-watchman", "test:coverage": "cross-env NODE_ENV=test npm test -- --coverage", "test:watch": "cross-env NODE_ENV=test npm test -- --watch", @@ -51,9 +49,9 @@ "packageManager": "pnpm@9.12.2", "dependencies": { "@babel/core": "7.25.2", - "@babel/eslint-parser": "7.25.1", "@babel/preset-env": "7.25.4", "@babel/preset-typescript": "7.24.7", + "@biomejs/biome": "1.9.4", "@changesets/changelog-github": "0.5.0", "@changesets/cli": "2.27.8", "@commitlint/cli": "19.5.0", @@ -63,24 +61,12 @@ "@tsconfig/node18": "18.2.4", "@types/node": "20.16.13", "@types/semver": "7.5.8", - "@typescript-eslint/eslint-plugin": "7.7.1", - "@typescript-eslint/parser": "7.7.1", "check-node-version": "4.2.1", - "codecov": "3.8.3", "cross-env": "7.0.3", - "eslint": "8.57.0", - "eslint-config-prettier": "9.1.0", - "eslint-config-xo": "0.44.0", - "eslint-config-xo-typescript": "4.0.0", - "eslint-formatter-pretty": "5.0.0", - "eslint-plugin-jest": "28.3.0", - "eslint-plugin-prettier": "5.1.3", "husky": "9.0.11", "jest": "29.7.0", - "jest-runner-eslint": "2.2.0", "jest-watch-typeahead": "2.2.2", "lint-staged": "15.2.10", - "prettier": "3.2.5", "rimraf": "5.0.10", "ts-jest": "29.1.5", "typescript": "5.6.2" diff --git a/packages/apollo/src/index.ts b/packages/apollo/src/index.ts index d7edcebb..59d30ce7 100644 --- a/packages/apollo/src/index.ts +++ b/packages/apollo/src/index.ts @@ -1,17 +1,17 @@ import { - type TPromsterOptions, - createPlugin, - signalIsUp, - signalIsNotUp, -} from './plugin'; -import { - getSummary, - getContentType, Prometheus, - defaultRegister, defaultNormalizers, + defaultRegister, + getContentType, + getSummary, timing, } from '@promster/metrics'; +import { + type TPromsterOptions, + createPlugin, + signalIsNotUp, + signalIsUp, +} from './plugin'; export { type TPromsterOptions, diff --git a/packages/apollo/src/plugin/index.ts b/packages/apollo/src/plugin/index.ts index 453adea1..948975dd 100644 --- a/packages/apollo/src/plugin/index.ts +++ b/packages/apollo/src/plugin/index.ts @@ -1,8 +1,8 @@ import { type TPromsterOptions, createPlugin, - signalIsUp, signalIsNotUp, + signalIsUp, } from './plugin'; export { type TPromsterOptions, createPlugin, signalIsUp, signalIsNotUp }; diff --git a/packages/apollo/src/plugin/plugin.spec.js b/packages/apollo/src/plugin/plugin.spec.js index b220c076..ca8e92e7 100644 --- a/packages/apollo/src/plugin/plugin.spec.js +++ b/packages/apollo/src/plugin/plugin.spec.js @@ -159,9 +159,6 @@ it('should expose garbage collection metrics', async () => { expect.objectContaining({ name: 'nodejs_eventloop_lag_seconds', }), - expect.objectContaining({ - name: 'nodejs_gc_runs_total', - }), expect.objectContaining({ name: 'nodejs_gc_duration_seconds', }), diff --git a/packages/apollo/src/plugin/plugin.ts b/packages/apollo/src/plugin/plugin.ts index 82a81843..c76b0ca5 100644 --- a/packages/apollo/src/plugin/plugin.ts +++ b/packages/apollo/src/plugin/plugin.ts @@ -1,27 +1,27 @@ -import { - type ApolloServerPlugin, - type BaseContext, - type GraphQLRequestContext, - type GraphQLRequest, +import type { + ApolloServerPlugin, + BaseContext, + GraphQLRequest, + GraphQLRequestContext, } from '@apollo/server'; -import { - type TOptionalPromsterOptions, - type TDefaultedPromsterOptions, - type TGcMetrics, - type TGraphQlMetrics, - type TLabelValues, +import type { TRequestRecorder } from '@promster/metrics'; +import type { + TDefaultedPromsterOptions, + TGcMetrics, + TGraphQlMetrics, + TLabelValues, + TOptionalPromsterOptions, } from '@promster/types'; -import { type TRequestRecorder } from '@promster/metrics'; -import merge from 'merge-options'; import { createGcMetrics, - createGraphQlMetrics, createGcObserver, + createGraphQlMetrics, defaultNormalizers, isRunningInKubernetes, timing, } from '@promster/metrics'; +import merge from 'merge-options'; let recordRequest: TRequestRecorder; let upMetric: TGcMetrics['up']; @@ -32,9 +32,9 @@ const signalIsUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(1); - }); + } }; const signalIsNotUp = () => { @@ -42,9 +42,9 @@ const signalIsNotUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(0); - }); + } }; type TSkipFunction = < @@ -95,7 +95,6 @@ const createPlugin = ( const labels = Object.assign( {}, { - // eslint-disable-next-line camelcase operation_name: requestContext.request.operationName, }, allDefaultedOptions.getLabelValues?.( @@ -143,15 +142,19 @@ const createPlugin = ( ); if (parseDurationSeconds !== undefined) { - graphQlMetrics.graphQlParseDuration?.forEach((metric) => { - metric.observe(labels, parseDurationSeconds); - }); + if (graphQlMetrics.graphQlParseDuration) { + for (const metric of graphQlMetrics.graphQlParseDuration) { + metric.observe(labels, parseDurationSeconds); + } + } } if (error) { - graphQlMetrics.graphQlErrorsTotal?.forEach((metric) => { - metric.inc(Object.assign({}, labels, { phase: 'parsing' })); - }); + if (graphQlMetrics.graphQlErrorsTotal) { + for (const metric of graphQlMetrics.graphQlErrorsTotal) { + metric.inc(Object.assign({}, labels, { phase: 'parsing' })); + } + } } }; }, @@ -168,15 +171,21 @@ const createPlugin = ( ); if (validationDurationSeconds !== undefined) { - graphQlMetrics.graphQlValidationDuration?.forEach((metric) => { - metric.observe(labels, validationDurationSeconds); - }); + if (graphQlMetrics.graphQlValidationDuration) { + for (const metric of graphQlMetrics.graphQlValidationDuration) { + metric.observe(labels, validationDurationSeconds); + } + } } if (error) { - graphQlMetrics.graphQlErrorsTotal?.forEach((metric) => { - metric.inc(Object.assign({}, labels, { phase: 'validation' })); - }); + if (graphQlMetrics.graphQlErrorsTotal) { + for (const metric of graphQlMetrics.graphQlErrorsTotal) { + metric.inc( + Object.assign({}, labels, { phase: 'validation' }) + ); + } + } } }; }, @@ -194,24 +203,25 @@ const createPlugin = ( executionRequestContext ); const labels = Object.assign({}, defaultLabels, { - // eslint-disable-next-line camelcase field_name: info.fieldName, }); if (fieldResolveDurationSeconds !== undefined) { - graphQlMetrics.graphQlResolveFieldDuration?.forEach( - (metric) => { + if (graphQlMetrics.graphQlResolveFieldDuration) { + for (const metric of graphQlMetrics.graphQlResolveFieldDuration) { metric.observe(labels, fieldResolveDurationSeconds); } - ); + } } if (error) { - graphQlMetrics.graphQlErrorsTotal?.forEach((metric) => { - metric.inc( - Object.assign({}, labels, { phase: 'execution' }) - ); - }); + if (graphQlMetrics.graphQlErrorsTotal) { + for (const metric of graphQlMetrics.graphQlErrorsTotal) { + metric.inc( + Object.assign({}, labels, { phase: 'execution' }) + ); + } + } } }; }, @@ -228,9 +238,11 @@ const createPlugin = ( ); if (requestDurationSeconds !== undefined) { - graphQlMetrics.graphQlRequestDuration?.forEach((metric) => { - metric.observe(labels, requestDurationSeconds); - }); + if (graphQlMetrics.graphQlRequestDuration) { + for (const metric of graphQlMetrics.graphQlRequestDuration) { + metric.observe(labels, requestDurationSeconds); + } + } } }, }; diff --git a/packages/express/src/index.ts b/packages/express/src/index.ts index 03b256c6..bcbc54be 100644 --- a/packages/express/src/index.ts +++ b/packages/express/src/index.ts @@ -1,18 +1,18 @@ +import { + Prometheus, + defaultNormalizers, + defaultRegister, + getContentType, + getSummary, + timing, +} from '@promster/metrics'; import { type TPromsterOptions, createMiddleware, getRequestRecorder, - signalIsUp, signalIsNotUp, + signalIsUp, } from './middleware'; -import { - getSummary, - getContentType, - Prometheus, - defaultRegister, - defaultNormalizers, - timing, -} from '@promster/metrics'; export { type TPromsterOptions, diff --git a/packages/express/src/middleware/index.ts b/packages/express/src/middleware/index.ts index 80c1a4f8..9ede830b 100644 --- a/packages/express/src/middleware/index.ts +++ b/packages/express/src/middleware/index.ts @@ -2,8 +2,8 @@ import { type TPromsterOptions, createMiddleware, getRequestRecorder, - signalIsUp, signalIsNotUp, + signalIsUp, } from './middleware'; export { diff --git a/packages/express/src/middleware/middleware.spec.js b/packages/express/src/middleware/middleware.spec.js index 87229b63..b408ac2f 100644 --- a/packages/express/src/middleware/middleware.spec.js +++ b/packages/express/src/middleware/middleware.spec.js @@ -21,7 +21,7 @@ async function startServer() { detectKubernetes: false, }); - app.get('/', (req, res) => { + app.get('/', (_req, res) => { res.send('I am the server!'); }); @@ -95,7 +95,6 @@ it('should expose garbage collection metrics', async () => { const rawMetrics = await response.text(); const parsedMetrics = parsePrometheusTextFormat(rawMetrics); - expect(parsedMetrics).toEqual( expect.arrayContaining([ expect.objectContaining({ @@ -116,9 +115,6 @@ it('should expose garbage collection metrics', async () => { expect.objectContaining({ name: 'nodejs_eventloop_lag_seconds', }), - expect.objectContaining({ - name: 'nodejs_gc_runs_total', - }), expect.objectContaining({ name: 'nodejs_gc_duration_seconds', }), diff --git a/packages/express/src/middleware/middleware.ts b/packages/express/src/middleware/middleware.ts index 5a0c7a2a..8a010f12 100644 --- a/packages/express/src/middleware/middleware.ts +++ b/packages/express/src/middleware/middleware.ts @@ -1,31 +1,25 @@ -import { - type TOptionalPromsterOptions, - type THttpMetrics, - type TGcMetrics, - type TDefaultedPromsterOptions, - type TLabelValues, +import type { TRequestRecorder } from '@promster/metrics'; +import type { + TDefaultedPromsterOptions, + TGcMetrics, + THttpMetrics, + TLabelValues, + TOptionalPromsterOptions, } from '@promster/types'; -import { type TRequestRecorder } from '@promster/metrics'; -import { - type Application, - type Request, - type Response, - type NextFunction, -} from 'express'; +import type { Application, NextFunction, Request, Response } from 'express'; -import merge from 'merge-options'; import { Prometheus, - createHttpMetrics, createGcMetrics, - createRequestRecorder, createGcObserver, + createHttpMetrics, + createRequestRecorder, defaultNormalizers, skipMetricsInEnvironment, timing, } from '@promster/metrics'; +import merge from 'merge-options'; -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface TApp extends Application { locals: Record; } @@ -36,7 +30,9 @@ type TLocaleTarget = { value: typeof Prometheus | TRequestRecorder; }; const exposeOnLocals = ({ app, key, value }: TLocaleTarget) => { - if (app?.locals) app.locals[key] = value; + if (app?.locals) { + app.locals[key] = value; + } }; const extractPath = (req: Request) => req.originalUrl || req.url; @@ -50,9 +46,9 @@ const signalIsUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(1); - }); + } }; const signalIsNotUp = () => { @@ -60,9 +56,9 @@ const signalIsNotUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(0); - }); + } }; type TSkipFunction = ( @@ -120,7 +116,6 @@ const createMiddleware = ( req: request, res: response, }), - // eslint-disable-next-line camelcase status_code: allDefaultedOptions.normalizeStatusCode( response.statusCode, { req: request, res: response } diff --git a/packages/fastify/src/index.ts b/packages/fastify/src/index.ts index 311bdfc7..0ff1147d 100644 --- a/packages/fastify/src/index.ts +++ b/packages/fastify/src/index.ts @@ -1,18 +1,18 @@ import { - type TPromsterOptions, - plugin, - getRequestRecorder, - signalIsUp, - signalIsNotUp, -} from './plugin'; -import { - getSummary, - getContentType, Prometheus, - defaultRegister, defaultNormalizers, + defaultRegister, + getContentType, + getSummary, timing, } from '@promster/metrics'; +import { + type TPromsterOptions, + getRequestRecorder, + plugin, + signalIsNotUp, + signalIsUp, +} from './plugin'; export { type TPromsterOptions, diff --git a/packages/fastify/src/plugin/index.ts b/packages/fastify/src/plugin/index.ts index c3dcb69c..9734e419 100644 --- a/packages/fastify/src/plugin/index.ts +++ b/packages/fastify/src/plugin/index.ts @@ -1,9 +1,9 @@ import { type TPromsterOptions, - plugin, getRequestRecorder, - signalIsUp, + plugin, signalIsNotUp, + signalIsUp, } from './plugin'; export { diff --git a/packages/fastify/src/plugin/plugin.spec.js b/packages/fastify/src/plugin/plugin.spec.js index 3b48b7e9..b5de5748 100644 --- a/packages/fastify/src/plugin/plugin.spec.js +++ b/packages/fastify/src/plugin/plugin.spec.js @@ -12,7 +12,6 @@ const metricsServerUrl = `http://localhost:${metricsPort}`; const appServerUrl = `http://localhost:${appPort}`; async function startServers() { - // eslint-disable-next-line new-cap const fastify = Fastify({ logger: false, }); @@ -24,7 +23,7 @@ async function startServers() { await fastify.register(plugin); - fastify.get('/', async (request, reply) => { + fastify.get('/', async (_request, reply) => { await reply.send({ status: 'ok' }); }); @@ -112,9 +111,6 @@ it('should expose garbage collection metrics', async () => { expect.objectContaining({ name: 'nodejs_eventloop_lag_seconds', }), - expect.objectContaining({ - name: 'nodejs_gc_runs_total', - }), expect.objectContaining({ name: 'nodejs_gc_duration_seconds', }), diff --git a/packages/fastify/src/plugin/plugin.ts b/packages/fastify/src/plugin/plugin.ts index e8e2c4a9..1621196b 100644 --- a/packages/fastify/src/plugin/plugin.ts +++ b/packages/fastify/src/plugin/plugin.ts @@ -1,28 +1,24 @@ -import { - type TOptionalPromsterOptions, - type THttpMetrics, - type TGcMetrics, - type TDefaultedPromsterOptions, - type TLabelValues, -} from '@promster/types'; -import { type TRequestRecorder, type TPromsterTiming } from '@promster/metrics'; -import { - type FastifyInstance, - type FastifyRequest, - type FastifyReply, -} from 'fastify'; -import fastifyPlugin from 'fastify-plugin'; -import merge from 'merge-options'; +import type { TPromsterTiming, TRequestRecorder } from '@promster/metrics'; import { Prometheus, - createHttpMetrics, createGcMetrics, - createRequestRecorder, createGcObserver, + createHttpMetrics, + createRequestRecorder, defaultNormalizers, skipMetricsInEnvironment, timing, } from '@promster/metrics'; +import type { + TDefaultedPromsterOptions, + TGcMetrics, + THttpMetrics, + TLabelValues, + TOptionalPromsterOptions, +} from '@promster/types'; +import type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify'; +import fastifyPlugin from 'fastify-plugin'; +import merge from 'merge-options'; // @ts-expect-error import pkg from '../../package.json'; @@ -38,9 +34,9 @@ const signalIsUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(1); - }); + } }; const signalIsNotUp = () => { @@ -48,9 +44,9 @@ const signalIsNotUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(0); - }); + } }; type TSkipFunction = ( @@ -95,7 +91,6 @@ const createPlugin = async ( fastify.decorate('Prometheus', Prometheus); fastify.decorate('recordRequest', recordRequest); - // eslint-disable-next-line @typescript-eslint/ban-types fastify.decorateRequest('__promsterTiming__', null); fastify.addHook('onRequest', async (request, _) => { @@ -111,7 +106,6 @@ const createPlugin = async ( req: request, res: reply, }), - // eslint-disable-next-line camelcase status_code: allDefaultedOptions.normalizeStatusCode(reply.statusCode, { req: request, res: reply, diff --git a/packages/hapi/src/index.ts b/packages/hapi/src/index.ts index 1ff48473..34e2ac4b 100644 --- a/packages/hapi/src/index.ts +++ b/packages/hapi/src/index.ts @@ -1,20 +1,20 @@ -import { type Server } from '@hapi/hapi'; +import type { Server } from '@hapi/hapi'; +import { + Prometheus, + defaultNormalizers, + defaultRegister, + getContentType, + getSummary, + timing, +} from '@promster/metrics'; import { type TPromsterOptions, createPlugin, getRequestRecorder, - signalIsUp, signalIsNotUp, + signalIsUp, } from './plugin'; -import { - getSummary, - getContentType, - Prometheus, - defaultRegister, - defaultNormalizers, - timing, -} from '@promster/metrics'; const instrument = async (server: Server, options: TPromsterOptions) => server.register(createPlugin({ options })); diff --git a/packages/hapi/src/plugin/index.ts b/packages/hapi/src/plugin/index.ts index 2de49150..1c0d0779 100644 --- a/packages/hapi/src/plugin/index.ts +++ b/packages/hapi/src/plugin/index.ts @@ -2,8 +2,8 @@ import { type TPromsterOptions, createPlugin, getRequestRecorder, - signalIsUp, signalIsNotUp, + signalIsUp, } from './plugin'; export { diff --git a/packages/hapi/src/plugin/plugin.spec.js b/packages/hapi/src/plugin/plugin.spec.js index 61395b65..26edf496 100644 --- a/packages/hapi/src/plugin/plugin.spec.js +++ b/packages/hapi/src/plugin/plugin.spec.js @@ -109,9 +109,6 @@ it('should expose garbage collection metrics', async () => { expect.objectContaining({ name: 'nodejs_eventloop_lag_seconds', }), - expect.objectContaining({ - name: 'nodejs_gc_runs_total', - }), expect.objectContaining({ name: 'nodejs_gc_duration_seconds', }), diff --git a/packages/hapi/src/plugin/plugin.ts b/packages/hapi/src/plugin/plugin.ts index 718ae37b..f558beee 100644 --- a/packages/hapi/src/plugin/plugin.ts +++ b/packages/hapi/src/plugin/plugin.ts @@ -1,35 +1,34 @@ -import { - type TOptionalPromsterOptions, - type TDefaultedPromsterOptions, - type THttpMetrics, - type TGcMetrics, - type TLabelValues, -} from '@promster/types'; -import { type TRequestRecorder, type TPromsterTiming } from '@promster/metrics'; -import { - type Plugin, - type Request, - type ResponseObject, - type ResponseToolkit, +import type { Boom } from '@hapi/boom'; +import type { + Plugin, + Request, + ResponseObject, + ResponseToolkit, } from '@hapi/hapi'; -import { type Boom } from '@hapi/boom'; +import type { TPromsterTiming, TRequestRecorder } from '@promster/metrics'; +import type { + TDefaultedPromsterOptions, + TGcMetrics, + THttpMetrics, + TLabelValues, + TOptionalPromsterOptions, +} from '@promster/types'; -import semver from 'semver'; -import merge from 'merge-options'; -// @ts-expect-error -import pkg from '../../package.json'; import { Prometheus, - createHttpMetrics, createGcMetrics, - createRequestRecorder, createGcObserver, + createHttpMetrics, + createRequestRecorder, defaultNormalizers, skipMetricsInEnvironment, timing, } from '@promster/metrics'; +import merge from 'merge-options'; +import semver from 'semver'; +// @ts-expect-error +import pkg from '../../package.json'; -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface TPromsterRequest extends Request { plugins: { promster: { @@ -66,9 +65,9 @@ const signalIsUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(1); - }); + } }; const signalIsNotUp = () => { @@ -76,9 +75,9 @@ const signalIsNotUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(0); - }); + } }; const getAreServerEventsSupported = (actualVersion: string) => @@ -167,7 +166,6 @@ const createPlugin = ( req: request, res: response, }), - // eslint-disable-next-line camelcase status_code: allDefaultedOptions.normalizeStatusCode( extractStatusCode(request), { @@ -202,7 +200,9 @@ const createPlugin = ( } // @ts-expect-error - this is the older Hapi version - if (doesResponseNeedInvocation) response.continue(); + if (doesResponseNeedInvocation) { + response.continue(); + } }; // NOTE: This version detection allows us to gracefully support both new and old Hapi APIs. diff --git a/packages/marblejs/src/index.ts b/packages/marblejs/src/index.ts index 6426a622..d57f2be8 100644 --- a/packages/marblejs/src/index.ts +++ b/packages/marblejs/src/index.ts @@ -1,21 +1,21 @@ +import { + Prometheus, + defaultNormalizers, + defaultRegister, + getContentType, + getSummary, + timing, +} from '@promster/metrics'; import { type TPromsterOptions, createMiddleware, getRequestRecorder, - signalIsUp, signalIsNotUp, + signalIsUp, } from './middleware'; -import { - getSummary, - getContentType, - Prometheus, - defaultRegister, - defaultNormalizers, - timing, -} from '@promster/metrics'; export * from '@promster/types'; -export { type TPromsterOptions }; +export type { TPromsterOptions }; export { createMiddleware, diff --git a/packages/marblejs/src/middleware/index.ts b/packages/marblejs/src/middleware/index.ts index 80c1a4f8..9ede830b 100644 --- a/packages/marblejs/src/middleware/index.ts +++ b/packages/marblejs/src/middleware/index.ts @@ -2,8 +2,8 @@ import { type TPromsterOptions, createMiddleware, getRequestRecorder, - signalIsUp, signalIsNotUp, + signalIsUp, } from './middleware'; export { diff --git a/packages/marblejs/src/middleware/middleware.spec.js b/packages/marblejs/src/middleware/middleware.spec.js index d6c35a81..305f8ce1 100644 --- a/packages/marblejs/src/middleware/middleware.spec.js +++ b/packages/marblejs/src/middleware/middleware.spec.js @@ -108,9 +108,6 @@ it('should expose garbage collection metrics', async () => { expect.objectContaining({ name: 'nodejs_eventloop_lag_seconds', }), - expect.objectContaining({ - name: 'nodejs_gc_runs_total', - }), expect.objectContaining({ name: 'nodejs_gc_duration_seconds', }), @@ -127,6 +124,7 @@ it('should expose garbage collection metrics', async () => { ); }); +// biome-ignore lint/suspicious/noSkippedTests: it.skip('should record http metrics', async () => { await fetch(appServerUrl); const response = await fetch(metricsServerUrl); diff --git a/packages/marblejs/src/middleware/middleware.ts b/packages/marblejs/src/middleware/middleware.ts index 0eb4b822..3cfbe616 100644 --- a/packages/marblejs/src/middleware/middleware.ts +++ b/packages/marblejs/src/middleware/middleware.ts @@ -1,24 +1,24 @@ +import type { HttpRequest, HttpResponse } from '@marblejs/http'; +import type { TPromsterTiming, TRequestRecorder } from '@promster/metrics'; import { - type TDefaultedPromsterOptions, - type TOptionalPromsterOptions, - type THttpMetrics, - type TGcMetrics, - type TLabelValues, -} from '@promster/types'; -import { type TRequestRecorder, type TPromsterTiming } from '@promster/metrics'; -import merge from 'merge-options'; -import { type HttpRequest, type HttpResponse } from '@marblejs/http'; -import { fromEvent, type Observable } from 'rxjs'; -import { tap, map, take, mapTo } from 'rxjs/operators'; -import { - createHttpMetrics, createGcMetrics, - createRequestRecorder, createGcObserver, + createHttpMetrics, + createRequestRecorder, defaultNormalizers, skipMetricsInEnvironment, timing, } from '@promster/metrics'; +import type { + TDefaultedPromsterOptions, + TGcMetrics, + THttpMetrics, + TLabelValues, + TOptionalPromsterOptions, +} from '@promster/types'; +import merge from 'merge-options'; +import { type Observable, fromEvent } from 'rxjs'; +import { map, mapTo, take, tap } from 'rxjs/operators'; const extractPath = (req: HttpRequest): string => req.originalUrl || req.url; @@ -31,9 +31,9 @@ const signalIsUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(1); - }); + } }; const signalIsNotUp = () => { @@ -41,9 +41,9 @@ const signalIsNotUp = () => { return; } - upMetric.forEach((upMetricType) => { + for (const upMetricType of upMetric) { upMetricType.set(0); - }); + } }; type TSkipFunction = ( @@ -78,7 +78,6 @@ const recordHandler = {}, { method: opts.normalizeMethod(req.method, { res, req }), - // eslint-disable-next-line camelcase status_code: opts.normalizeStatusCode(res.statusCode, { res, req }), path: opts.normalizePath(extractPath(req), { res, req }), }, diff --git a/packages/metrics/src/client/client.ts b/packages/metrics/src/client/client.ts index 2a553f24..676a8534 100644 --- a/packages/metrics/src/client/client.ts +++ b/packages/metrics/src/client/client.ts @@ -8,7 +8,6 @@ import { skipMetricsInEnvironment } from '../environment'; // We could create multiple registries with `new Prometheus.registry()`. const defaultRegister = Prometheus.register; -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface TClientOptions extends Prometheus.DefaultMetricsCollectorConfiguration { detectKubernetes?: boolean; diff --git a/packages/metrics/src/client/index.ts b/packages/metrics/src/client/index.ts index 72e2afde..39299437 100644 --- a/packages/metrics/src/client/index.ts +++ b/packages/metrics/src/client/index.ts @@ -1,3 +1,3 @@ -import { Prometheus, defaultRegister, configure } from './client'; +import { Prometheus, configure, defaultRegister } from './client'; export { Prometheus, defaultRegister, configure }; diff --git a/packages/metrics/src/create-gc-metrics/create-gc-metrics.ts b/packages/metrics/src/create-gc-metrics/create-gc-metrics.ts index 13580fe3..72852022 100644 --- a/packages/metrics/src/create-gc-metrics/create-gc-metrics.ts +++ b/packages/metrics/src/create-gc-metrics/create-gc-metrics.ts @@ -1,10 +1,7 @@ -import { - type TDefaultedPromsterOptions, - type TGcMetrics, -} from '@promster/types'; +import type { TDefaultedPromsterOptions, TGcMetrics } from '@promster/types'; import merge from 'merge-options'; -import { configure, Prometheus } from '../client'; +import { Prometheus, configure } from '../client'; const asArray = (maybeArray: Readonly) => Array.isArray(maybeArray) ? maybeArray : [maybeArray]; diff --git a/packages/metrics/src/create-gc-observer/create-gc-observer.ts b/packages/metrics/src/create-gc-observer/create-gc-observer.ts index 1461a06c..d538b5b0 100644 --- a/packages/metrics/src/create-gc-observer/create-gc-observer.ts +++ b/packages/metrics/src/create-gc-observer/create-gc-observer.ts @@ -1,7 +1,4 @@ -import { - type TOptionalPromsterOptions, - type TGcMetrics, -} from '@promster/types'; +import type { TGcMetrics, TOptionalPromsterOptions } from '@promster/types'; import once from 'lodash.once'; // @ts-expect-error @@ -13,7 +10,7 @@ const defaultOptions = { }; const createGcObserver = once( - (metrics: TGcMetrics, options: TOptionalPromsterOptions) => () => { + (_metrics: TGcMetrics, options: TOptionalPromsterOptions) => () => { const startGcStats = gcStats(defaultRegister, { prefix: options.metricPrefix, }); diff --git a/packages/metrics/src/create-graphql-metrics/create-graphql-metrics.ts b/packages/metrics/src/create-graphql-metrics/create-graphql-metrics.ts index 1dec275c..36feeb12 100644 --- a/packages/metrics/src/create-graphql-metrics/create-graphql-metrics.ts +++ b/packages/metrics/src/create-graphql-metrics/create-graphql-metrics.ts @@ -1,10 +1,10 @@ -import { - type TDefaultedPromsterOptions, - type TGraphQlMetrics, +import type { + TDefaultedPromsterOptions, + TGraphQlMetrics, } from '@promster/types'; import merge from 'merge-options'; -import { configure, Prometheus } from '../client'; +import { Prometheus, configure } from '../client'; const defaultGraphQlPercentiles = [0.5, 0.9, 0.95, 0.98, 0.99]; diff --git a/packages/metrics/src/create-http-metrics/create-http-metrics.ts b/packages/metrics/src/create-http-metrics/create-http-metrics.ts index 26f39ca2..a60a1075 100644 --- a/packages/metrics/src/create-http-metrics/create-http-metrics.ts +++ b/packages/metrics/src/create-http-metrics/create-http-metrics.ts @@ -1,10 +1,7 @@ -import { - type TDefaultedPromsterOptions, - type THttpMetrics, -} from '@promster/types'; +import type { TDefaultedPromsterOptions, THttpMetrics } from '@promster/types'; import merge from 'merge-options'; -import { configure, Prometheus } from '../client'; +import { Prometheus, configure } from '../client'; const defaultHttpRequestDurationPercentileInSeconds = [ 0.5, 0.9, 0.95, 0.98, 0.99, diff --git a/packages/metrics/src/create-request-recorder/create-request-recorder.ts b/packages/metrics/src/create-request-recorder/create-request-recorder.ts index f722d209..1308a6d9 100644 --- a/packages/metrics/src/create-request-recorder/create-request-recorder.ts +++ b/packages/metrics/src/create-request-recorder/create-request-recorder.ts @@ -1,15 +1,15 @@ -import { - type TOptionalPromsterOptions, - type TDefaultedPromsterOptions, - type TLabelValues, - type THttpMetrics, +import type { + TDefaultedPromsterOptions, + THttpMetrics, + TLabelValues, + TOptionalPromsterOptions, } from '@promster/types'; -import { type Timing } from '../timing'; +import type { Timing } from '../timing'; import merge from 'merge-options'; +import { endMeasurementFrom } from '../end-measurement-from'; import { skipMetricsInEnvironment } from '../environment'; import { sortLabels } from '../sort-labels'; -import { endMeasurementFrom } from '../end-measurement-from'; type TRecordingOptions = { labels: TLabelValues; @@ -54,52 +54,54 @@ const createRequestRecorder = ( const labels = sortLabels(recordingOptions.labels); if (!shouldSkipMetricsByEnvironment && durationS !== undefined) { - metrics.httpRequestDurationInSeconds?.forEach( - (httpRequestDurationInSecondsMetricType) => { + if (metrics.httpRequestDurationInSeconds) { + for (const httpRequestDurationInSecondsMetricType of metrics.httpRequestDurationInSeconds) { httpRequestDurationInSecondsMetricType.observe(labels, durationS); } - ); + } } if (!shouldSkipMetricsByEnvironment && durationS !== undefined) { - metrics.httpRequestDurationPerPercentileInSeconds?.forEach( - (httpRequestDurationPerPercentileInSecondsMetricType) => { + if (metrics.httpRequestDurationPerPercentileInSeconds) { + for (const httpRequestDurationPerPercentileInSecondsMetricType of metrics.httpRequestDurationPerPercentileInSeconds) { httpRequestDurationPerPercentileInSecondsMetricType.observe( labels, durationS ); } - ); + } } if (!shouldSkipMetricsByEnvironment && durationS !== undefined) { - metrics.httpRequestsTotal?.forEach((httpRequestsTotalMetricType) => { - httpRequestsTotalMetricType.inc(labels); - }); + if (metrics.httpRequestsTotal) { + for (const httpRequestsTotalMetricType of metrics.httpRequestsTotal) { + httpRequestsTotalMetricType.inc(labels); + } + } } if (recordingOptions.requestContentLength) { - metrics.httpRequestContentLengthInBytes?.forEach( - (httpRequestContentLengthInBytesMetricType) => { + if (metrics.httpRequestContentLengthInBytes) { + for (const httpRequestContentLengthInBytesMetricType of metrics.httpRequestContentLengthInBytes) { httpRequestContentLengthInBytesMetricType.observe( labels, // @ts-expect-error recordingOptions.requestContentLength ); } - ); + } } if (recordingOptions.responseContentLength) { - metrics.httpResponseContentLengthInBytes?.forEach( - (httpResponseContentLengthInBytesMetricType) => { + if (metrics.httpResponseContentLengthInBytes) { + for (const httpResponseContentLengthInBytesMetricType of metrics.httpResponseContentLengthInBytes) { httpResponseContentLengthInBytesMetricType.observe( labels, // @ts-expect-error recordingOptions.responseContentLength ); } - ); + } } }; }; diff --git a/packages/metrics/src/environment/skip-metrics-in-environment.ts b/packages/metrics/src/environment/skip-metrics-in-environment.ts index 394f548d..0d1c6bd1 100644 --- a/packages/metrics/src/environment/skip-metrics-in-environment.ts +++ b/packages/metrics/src/environment/skip-metrics-in-environment.ts @@ -1,4 +1,4 @@ -import { type TOptionalPromsterOptions } from '@promster/types'; +import type { TOptionalPromsterOptions } from '@promster/types'; import { isRunningInKubernetes } from './kubernetes'; type TSkipMetricsInEnvironmentOptions = { diff --git a/packages/metrics/src/index.ts b/packages/metrics/src/index.ts index b3724819..b398b13f 100644 --- a/packages/metrics/src/index.ts +++ b/packages/metrics/src/index.ts @@ -1,19 +1,19 @@ import { Prometheus, defaultRegister } from './client'; -import { createHttpMetrics } from './create-http-metrics'; -import { createGraphQlMetrics } from './create-graphql-metrics'; import { createGcMetrics } from './create-gc-metrics'; -import { getSummary, getContentType } from './summary'; -import { createRequestRecorder } from './create-request-recorder'; import { createGcObserver } from './create-gc-observer'; +import { createGraphQlMetrics } from './create-graphql-metrics'; +import { createHttpMetrics } from './create-http-metrics'; +import { createRequestRecorder } from './create-request-recorder'; +import { endMeasurementFrom } from './end-measurement-from'; +import { isRunningInKubernetes, skipMetricsInEnvironment } from './environment'; import { defaultNormalizers, - normalizeStatusCode, - normalizePath, normalizeMethod, + normalizePath, + normalizeStatusCode, } from './normalizers'; -import { isRunningInKubernetes, skipMetricsInEnvironment } from './environment'; -import { endMeasurementFrom } from './end-measurement-from'; import { sortLabels } from './sort-labels'; +import { getContentType, getSummary } from './summary'; import { timing } from './timing'; export type { TRequestRecorder } from './create-request-recorder'; diff --git a/packages/metrics/src/normalizers/index.ts b/packages/metrics/src/normalizers/index.ts index a38dd362..d6fcad99 100644 --- a/packages/metrics/src/normalizers/index.ts +++ b/packages/metrics/src/normalizers/index.ts @@ -1,6 +1,6 @@ -import { normalizeStatusCode } from './status-code'; -import { normalizePath } from './path'; import { normalizeMethod } from './method'; +import { normalizePath } from './path'; +import { normalizeStatusCode } from './status-code'; const defaultNormalizers = { normalizeStatusCode, diff --git a/packages/metrics/src/normalizers/path/path.ts b/packages/metrics/src/normalizers/path/path.ts index 4afd8f1a..9a5918f3 100644 --- a/packages/metrics/src/normalizers/path/path.ts +++ b/packages/metrics/src/normalizers/path/path.ts @@ -1,4 +1,4 @@ -import url from 'url'; +import url from 'node:url'; import UrlValueParser from 'url-value-parser'; const urlValueParser = new UrlValueParser(); @@ -6,7 +6,9 @@ const urlValueParser = new UrlValueParser(); const normalizePath = (path: string): string => { const parsedPathname = url.parse(path).pathname; - if (!parsedPathname) return ''; + if (!parsedPathname) { + return ''; + } return urlValueParser.replacePathValues(parsedPathname, '#val'); }; diff --git a/packages/metrics/src/sort-labels/sort-labels.ts b/packages/metrics/src/sort-labels/sort-labels.ts index 09ca8b07..1e3183a5 100644 --- a/packages/metrics/src/sort-labels/sort-labels.ts +++ b/packages/metrics/src/sort-labels/sort-labels.ts @@ -1,4 +1,4 @@ -import { type TLabelValues } from '@promster/types'; +import type { TLabelValues } from '@promster/types'; function sortLabels(unsortedLabels: TLabelValues): TLabelValues { return Object.keys(unsortedLabels) diff --git a/packages/metrics/src/summary/index.ts b/packages/metrics/src/summary/index.ts index faaadcde..214ce310 100644 --- a/packages/metrics/src/summary/index.ts +++ b/packages/metrics/src/summary/index.ts @@ -1,3 +1,3 @@ -import { getSummary, getContentType } from './summary'; +import { getContentType, getSummary } from './summary'; export { getSummary, getContentType }; diff --git a/packages/metrics/src/timing/timing.ts b/packages/metrics/src/timing/timing.ts index 515b0e1f..008ed06c 100644 --- a/packages/metrics/src/timing/timing.ts +++ b/packages/metrics/src/timing/timing.ts @@ -12,7 +12,9 @@ class Timing { const startTime = this.#startTime; const endTime = this.#endTime; - if (!endTime || !startTime) return { seconds: undefined }; + if (!endTime || !startTime) { + return { seconds: undefined }; + } return { seconds: Number(endTime - startTime) / Number(Timing.NS_PER_SEC) }; } diff --git a/packages/server/src/server/server.ts b/packages/server/src/server/server.ts index 54ea40c1..0998b3c3 100644 --- a/packages/server/src/server/server.ts +++ b/packages/server/src/server/server.ts @@ -1,12 +1,12 @@ import { - createServer as createHttpServer, type IncomingMessage, - type ServerResponse, type Server, -} from 'http'; + type ServerResponse, + createServer as createHttpServer, +} from 'node:http'; import { - getSummary, getContentType, + getSummary, skipMetricsInEnvironment, } from '@promster/metrics'; diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index e4f7cd8b..7d98abce 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,10 +1,5 @@ -import { type DeepRequired } from 'ts-essentials'; -import { - type Gauge, - type Counter, - type Summary, - type Histogram, -} from 'prom-client'; +import type { Counter, Gauge, Histogram, Summary } from 'prom-client'; +import type { DeepRequired } from 'ts-essentials'; export type TLabelValues = Record; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa67bd3e..8eede96a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,15 +11,15 @@ importers: '@babel/core': specifier: 7.25.2 version: 7.25.2 - '@babel/eslint-parser': - specifier: 7.25.1 - version: 7.25.1(@babel/core@7.25.2)(eslint@8.57.0) '@babel/preset-env': specifier: 7.25.4 version: 7.25.4(@babel/core@7.25.2) '@babel/preset-typescript': specifier: 7.24.7 version: 7.24.7(@babel/core@7.25.2) + '@biomejs/biome': + specifier: 1.9.4 + version: 1.9.4 '@changesets/changelog-github': specifier: 0.5.0 version: 0.5.0 @@ -47,60 +47,24 @@ importers: '@types/semver': specifier: 7.5.8 version: 7.5.8 - '@typescript-eslint/eslint-plugin': - specifier: 7.7.1 - version: 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/parser': - specifier: 7.7.1 - version: 7.7.1(eslint@8.57.0)(typescript@5.6.2) check-node-version: specifier: 4.2.1 version: 4.2.1 - codecov: - specifier: 3.8.3 - version: 3.8.3 cross-env: specifier: 7.0.3 version: 7.0.3 - eslint: - specifier: 8.57.0 - version: 8.57.0 - eslint-config-prettier: - specifier: 9.1.0 - version: 9.1.0(eslint@8.57.0) - eslint-config-xo: - specifier: 0.44.0 - version: 0.44.0(eslint@8.57.0) - eslint-config-xo-typescript: - specifier: 4.0.0 - version: 4.0.0(@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2))(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2) - eslint-formatter-pretty: - specifier: 5.0.0 - version: 5.0.0 - eslint-plugin-jest: - specifier: 28.3.0 - version: 28.3.0(@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(jest@29.7.0(@types/node@20.16.13))(typescript@5.6.2) - eslint-plugin-prettier: - specifier: 5.1.3 - version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) husky: specifier: 9.0.11 version: 9.0.11 jest: specifier: 29.7.0 version: 29.7.0(@types/node@20.16.13) - jest-runner-eslint: - specifier: 2.2.0 - version: 2.2.0(eslint@8.57.0)(jest@29.7.0(@types/node@20.16.13)) jest-watch-typeahead: specifier: 2.2.2 version: 2.2.2(jest@29.7.0(@types/node@20.16.13)) lint-staged: specifier: 15.2.10 version: 15.2.10 - prettier: - specifier: 3.2.5 - version: 3.2.5 rimraf: specifier: 5.0.10 version: 5.0.10 @@ -337,10 +301,6 @@ importers: packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -495,13 +455,6 @@ packages: resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.25.1': - resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.24.10': resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} engines: {node: '>=6.9.0'} @@ -1200,6 +1153,59 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@biomejs/biome@1.9.4': + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.4': + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.4': + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.4': + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.4': + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.4': + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.4': + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.4': + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.4': + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@changesets/apply-release-plan@7.0.5': resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} @@ -1330,24 +1336,6 @@ packages: resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} engines: {node: '>=v18'} - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@fastify/ajv-compiler@3.5.0': resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} @@ -1509,19 +1497,6 @@ packages: '@hapi/wreck@18.1.0': resolution: {integrity: sha512-0z6ZRCmFEfV/MQqkQomJ7sl/hyxvcZM7LtuVqN3vdAO4vM9eBbowl0kaqQj9EJJQab+3Uuh1GxbGIBFy4NfJ4w==} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1666,9 +1641,6 @@ packages: fp-ts: ^2.13.1 rxjs: ^7.5.7 - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1689,10 +1661,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -1797,10 +1765,6 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tootallnate/once@1.1.2': - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - '@tsconfig/node18@18.2.4': resolution: {integrity: sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==} @@ -1834,9 +1798,6 @@ packages: '@types/cors@2.8.12': resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} - '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} @@ -1943,94 +1904,6 @@ packages: '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - '@typescript-eslint/eslint-plugin@7.7.1': - resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@7.7.1': - resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/scope-manager@7.7.1': - resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/type-utils@7.7.1': - resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/types@7.7.1': - resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@7.7.1': - resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/utils@7.7.1': - resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/visitor-keys@7.7.1': - resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vue/compiler-core@3.4.23': resolution: {integrity: sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==} @@ -2064,11 +1937,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} @@ -2094,9 +1962,6 @@ packages: ajv: optional: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} @@ -2214,11 +2079,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - argv@0.0.2: - resolution: {integrity: sha512-dEamhpPEwRUBpLNHeuCm/v+g0anFByHahxodVO/BbAarHVBBg2MccCwf9K+o1Pof+2btdnkJelYVUWjW/VrATw==} - engines: {node: '>=0.6.10'} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - array-differ@3.0.0: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} @@ -2458,12 +2318,6 @@ packages: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - codecov@3.8.3: - resolution: {integrity: sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA==} - engines: {node: '>=4.0'} - deprecated: https://about.codecov.io/blog/codecov-uploader-deprecation-plan/ - hasBin: true - collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} @@ -2510,9 +2364,6 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -2578,18 +2429,6 @@ packages: typescript: optional: true - create-jest-runner@0.11.2: - resolution: {integrity: sha512-6lwspphs4M1PLKV9baBNxHQtWVBPZuDU8kAP4MyrVWa6aEpEcpi2HZeeA6WncwaqgsGNXpP0N2STS7XNM/nHKQ==} - hasBin: true - peerDependencies: - '@jest/test-result': ^28.0.0 - jest-runner: ^28.0.0 - peerDependenciesMeta: - '@jest/test-result': - optional: true - jest-runner: - optional: true - create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2632,15 +2471,6 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.6: resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} @@ -2666,9 +2496,6 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -2728,18 +2555,10 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} - dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -2823,112 +2642,11 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-config-xo-typescript@4.0.0: - resolution: {integrity: sha512-pmSWzVpvzEjZHG7S/rN34cFXAoe6YbvWFBQSitEXD5CcT2SULfykYl8hcYXss37r5N3SmJYAiO6VlcfkPiDRxg==} - engines: {node: '>=18'} - peerDependencies: - '@typescript-eslint/eslint-plugin': '>=7.0.2' - '@typescript-eslint/parser': '>=7.0.2' - eslint: '>=8.56.0' - typescript: '>=5.0.0' - - eslint-config-xo@0.44.0: - resolution: {integrity: sha512-YG4gdaor0mJJi8UBeRJqDPO42MedTWYMaUyucF5bhm2pi/HS98JIxfFQmTLuyj6hGpQlAazNfyVnn7JuDn+Sew==} - engines: {node: '>=18'} - peerDependencies: - eslint: '>=8.56.0' - - eslint-formatter-pretty@5.0.0: - resolution: {integrity: sha512-Uick451FoL22/wXqyScX3inW8ZlD/GQO7eFXj3bqb6N/ZtuuF00/CwSNIKLbFCJPrX5V4EdQBSgJ/UVnmLRnug==} - engines: {node: '>=14.16'} - - eslint-plugin-jest@28.3.0: - resolution: {integrity: sha512-5LjCSSno8E+IUCOX4hJiIb/upPIgpkaDEcaN/40gOcw26t/5UTLHFc4JdxKjOOvGTh0XdCu+fNr0fpOVNvcxMA==} - engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-prettier@5.1.3: - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-rule-docs@1.1.235: - resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==} - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - estree-walker@1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} @@ -3001,9 +2719,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -3014,9 +2729,6 @@ packages: fast-json-stringify@5.14.1: resolution: {integrity: sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw==} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} @@ -3027,9 +2739,6 @@ packages: fast-uri@2.3.0: resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} - fast-url-parser@1.1.3: - resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} - fastify-plugin@4.5.1: resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} @@ -3042,10 +2751,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-type@8.1.0: resolution: {integrity: sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==} engines: {node: '>=6'} @@ -3074,10 +2779,6 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - find-up@7.0.0: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} @@ -3086,13 +2787,6 @@ packages: resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} engines: {node: '>= 10.13.0'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} @@ -3192,10 +2886,6 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - glob@10.3.12: resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} engines: {node: '>=16 || 14 >=14.17'} @@ -3221,10 +2911,6 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -3242,9 +2928,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql-tag@2.12.6: resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} engines: {node: '>=10'} @@ -3295,10 +2978,6 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -3376,10 +3055,6 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - irregular-plurals@3.5.0: - resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} - engines: {node: '>=8'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -3433,10 +3108,6 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -3460,10 +3131,6 @@ packages: resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} engines: {node: '>=8'} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -3590,13 +3257,6 @@ packages: resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-runner-eslint@2.2.0: - resolution: {integrity: sha512-uR0kS/PCwCybIFh1yvbJSr3ajmusrueO8vnA4H3ItTpKCoYpQ9k2j2COrR1rdb4MnnbVBczrodCChrcJ/Hq3AQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - eslint: ^7 || ^8 - jest: ^27 || ^28 || ^29 - jest-runner@29.7.0: resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3631,10 +3291,6 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} - jest-worker@28.1.3: - resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-worker@29.7.0: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3685,15 +3341,9 @@ packages: json-schema-ref-resolver@1.0.1: resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -3720,10 +3370,6 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - light-my-request@5.13.0: resolution: {integrity: sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==} @@ -3747,10 +3393,6 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - locate-path@7.2.0: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3797,10 +3439,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -3943,10 +3581,6 @@ packages: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -4100,10 +3734,6 @@ packages: optional@0.1.4: resolution: {integrity: sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -4135,10 +3765,6 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - p-locate@6.0.0: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4266,32 +3892,15 @@ packages: please-upgrade-node@3.2.0: resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} - plur@4.0.0: - resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==} - engines: {node: '>=10'} - postcss@8.4.38: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true - prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4327,9 +3936,6 @@ packages: pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4664,9 +4270,6 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - stream-events@1.0.5: - resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} - string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4726,9 +4329,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - stubs@3.0.0: - resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4741,18 +4341,10 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} - engines: {node: ^14.18.0 || >=16.0.0} - tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} @@ -4760,10 +4352,6 @@ packages: tdigest@0.1.2: resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} - teeny-request@7.1.1: - resolution: {integrity: sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==} - engines: {node: '>=10'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -4781,15 +4369,9 @@ packages: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - throat@6.0.2: - resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -4822,12 +4404,6 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - ts-essentials@9.4.2: resolution: {integrity: sha512-mB/cDhOvD7pg3YCLk2rOtejHjjdSi9in/IBYE13S+8WA5FBSraYf4V/ws55uvs0IvQ/l0wBOlXy5yBNZ9Bl8ZQ==} peerDependencies: @@ -4863,18 +4439,10 @@ packages: tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -4936,9 +4504,6 @@ packages: resolution: {integrity: sha512-yIQdxJpgkPamPPAPuGdS7Q548rLhny42tg8d4vyTNzFqvOnwqrgHXvgehT09U7fwrzxi3RxCiXjoNUNnNOlQ8A==} engines: {node: '>=6.0.0'} - urlgrey@1.0.0: - resolution: {integrity: sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w==} - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -4950,10 +4515,6 @@ packages: resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} hasBin: true - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -5080,8 +4641,6 @@ packages: snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -5287,14 +4846,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.0)': - dependencies: - '@babel/core': 7.25.2 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - '@babel/generator@7.24.10': dependencies: '@babel/types': 7.25.6 @@ -6223,6 +5774,41 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@biomejs/biome@1.9.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': + optional: true + + '@biomejs/cli-darwin-x64@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64@1.9.4': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-x64@1.9.4': + optional: true + + '@biomejs/cli-win32-arm64@1.9.4': + optional: true + + '@biomejs/cli-win32-x64@1.9.4': + optional: true + '@changesets/apply-release-plan@7.0.5': dependencies: '@changesets/config': 3.0.3 @@ -6492,29 +6078,6 @@ snapshots: '@types/conventional-commits-parser': 5.0.0 chalk: 5.3.0 - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.10.0': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.6 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.0': {} - '@fastify/ajv-compiler@3.5.0': dependencies: ajv: 8.12.0 @@ -6767,18 +6330,6 @@ snapshots: '@hapi/bourne': 3.0.0 '@hapi/hoek': 11.0.4 - '@humanwhocodes/config-array@0.11.14': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -7074,10 +6625,6 @@ snapshots: rxjs: 7.8.1 uuid: 7.0.3 - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7095,8 +6642,6 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.1.1': {} - '@pnpm/config.env-replace@1.1.0': {} '@pnpm/network.ca-file@1.0.2': @@ -7253,8 +6798,6 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tootallnate/once@1.1.2': {} - '@tsconfig/node18@18.2.4': {} '@types/accepts@1.3.7': @@ -7302,11 +6845,6 @@ snapshots: '@types/cors@2.8.12': {} - '@types/eslint@8.56.10': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - '@types/estree@0.0.39': {} '@types/estree@1.0.5': {} @@ -7388,7 +6926,8 @@ snapshots: dependencies: undici-types: 6.19.6 - '@types/parse-json@4.0.2': {} + '@types/parse-json@4.0.2': + optional: true '@types/qs@6.9.15': {} @@ -7423,135 +6962,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2)': - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 7.7.1 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2)': - dependencies: - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 7.7.1 - debug: 4.3.4 - eslint: 8.57.0 - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/scope-manager@7.7.1': - dependencies: - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/visitor-keys': 7.7.1 - - '@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.6.2)': - dependencies: - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.6.2) - '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.6.2) - debug: 4.3.6 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/types@7.7.1': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.2)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@7.7.1(typescript@5.6.2)': - dependencies: - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/visitor-keys': 7.7.1 - debug: 4.3.6 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.6.2)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) - eslint: 8.57.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.6.2)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/types': 7.7.1 - '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.6.2) - eslint: 8.57.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@7.7.1': - dependencies: - '@typescript-eslint/types': 7.7.1 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - '@vue/compiler-core@3.4.23': dependencies: '@babel/parser': 7.24.8 @@ -7608,10 +7018,6 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.11.3): - dependencies: - acorn: 8.11.3 - acorn@8.11.3: {} agent-base@6.0.2: @@ -7619,6 +7025,7 @@ snapshots: debug: 4.3.6 transitivePeerDependencies: - supports-color + optional: true ajv-formats@2.1.1(ajv@8.12.0): optionalDependencies: @@ -7628,13 +7035,6 @@ snapshots: optionalDependencies: ajv: 8.12.0 - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 @@ -7789,8 +7189,6 @@ snapshots: argparse@2.0.1: {} - argv@0.0.2: {} - array-differ@3.0.0: optional: true @@ -8091,17 +7489,6 @@ snapshots: co@4.6.0: {} - codecov@3.8.3: - dependencies: - argv: 0.0.2 - ignore-walk: 3.0.4 - js-yaml: 3.14.1 - teeny-request: 7.1.1 - urlgrey: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - collect-v8-coverage@1.0.2: {} color-convert@1.9.3: @@ -8143,8 +7530,6 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 - confusing-browser-globals@1.0.11: {} - console-control-strings@1.1.0: optional: true @@ -8202,6 +7587,7 @@ snapshots: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 + optional: true cosmiconfig@9.0.0(typescript@5.6.2): dependencies: @@ -8212,12 +7598,6 @@ snapshots: optionalDependencies: typescript: 5.6.2 - create-jest-runner@0.11.2: - dependencies: - chalk: 4.1.2 - jest-worker: 28.1.3 - throat: 6.0.2 - create-jest@29.7.0(@types/node@20.16.13): dependencies: '@jest/types': 29.6.3 @@ -8265,10 +7645,6 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.3.6: dependencies: ms: 2.1.2 @@ -8281,8 +7657,6 @@ snapshots: deep-extend@0.6.0: {} - deep-is@0.1.4: {} - deepmerge@4.3.1: {} defer-to-connect@2.0.1: {} @@ -8350,18 +7724,10 @@ snapshots: dependencies: path-type: 4.0.0 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dot-prop@5.3.0: dependencies: is-obj: 2.0.0 - dot-prop@6.0.1: - dependencies: - is-obj: 2.0.0 - dotenv@8.6.0: {} dset@3.1.3: {} @@ -8416,135 +7782,8 @@ snapshots: escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@9.1.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - - eslint-config-xo-typescript@4.0.0(@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2))(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2): - dependencies: - '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.6.2) - eslint: 8.57.0 - typescript: 5.6.2 - - eslint-config-xo@0.44.0(eslint@8.57.0): - dependencies: - confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - - eslint-formatter-pretty@5.0.0: - dependencies: - '@types/eslint': 8.56.10 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - eslint-rule-docs: 1.1.235 - log-symbols: 4.1.0 - plur: 4.0.0 - string-width: 4.2.3 - supports-hyperlinks: 2.3.0 - - eslint-plugin-jest@28.3.0(@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(jest@29.7.0(@types/node@20.16.13))(typescript@5.6.2): - dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.6.2) - eslint: 8.57.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2) - jest: 29.7.0(@types/node@20.16.13) - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5): - dependencies: - eslint: 8.57.0 - prettier: 3.2.5 - prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 - optionalDependencies: - '@types/eslint': 8.56.10 - eslint-config-prettier: 9.1.0(eslint@8.57.0) - - eslint-rule-docs@1.1.235: {} - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@2.1.0: {} - - eslint-visitor-keys@3.4.3: {} - - eslint@8.57.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - estree-walker@1.0.1: {} estree-walker@2.0.2: {} @@ -8686,8 +7925,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8708,8 +7945,6 @@ snapshots: json-schema-ref-resolver: 1.0.1 rfdc: 1.3.1 - fast-levenshtein@2.0.6: {} - fast-querystring@1.1.2: dependencies: fast-decode-uri-component: 1.0.1 @@ -8718,10 +7953,6 @@ snapshots: fast-uri@2.3.0: {} - fast-url-parser@1.1.3: - dependencies: - punycode: 1.4.1 - fastify-plugin@4.5.1: {} fastify@4.28.1: @@ -8753,10 +7984,6 @@ snapshots: dependencies: bser: 2.1.1 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-type@8.1.0: {} fill-range@7.0.1: @@ -8802,11 +8029,6 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - find-up@7.0.0: dependencies: locate-path: 7.2.0 @@ -8821,14 +8043,6 @@ snapshots: resolve-dir: 1.0.1 optional: true - flat-cache@3.2.0: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - - flatted@3.3.1: {} - foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 @@ -8931,10 +8145,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - glob@10.3.12: dependencies: foreground-child: 3.1.1 @@ -8974,10 +8184,6 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globby@11.1.0: dependencies: array-union: 2.1.0 @@ -9009,8 +8215,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - graphql-tag@2.12.6(graphql@16.9.0): dependencies: graphql: 16.9.0 @@ -9054,14 +8258,6 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-agent@4.0.1: - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.6 - transitivePeerDependencies: - - supports-color - http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 @@ -9073,6 +8269,7 @@ snapshots: debug: 4.3.6 transitivePeerDependencies: - supports-color + optional: true human-id@1.0.2: {} @@ -9125,8 +8322,6 @@ snapshots: ipaddr.js@1.9.1: {} - irregular-plurals@3.5.0: {} - is-arrayish@0.2.1: {} is-core-module@2.13.1: @@ -9163,8 +8358,6 @@ snapshots: is-obj@2.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@2.1.0: {} is-reference@1.2.1: @@ -9183,8 +8376,6 @@ snapshots: dependencies: text-extensions: 2.4.0 - is-unicode-supported@0.1.0: {} - is-windows@1.0.2: {} isexe@2.0.0: {} @@ -9418,18 +8609,6 @@ snapshots: resolve.exports: 2.0.2 slash: 3.0.0 - jest-runner-eslint@2.2.0(eslint@8.57.0)(jest@29.7.0(@types/node@20.16.13)): - dependencies: - chalk: 4.1.2 - cosmiconfig: 7.1.0 - create-jest-runner: 0.11.2 - dot-prop: 6.0.1 - eslint: 8.57.0 - jest: 29.7.0(@types/node@20.16.13) - transitivePeerDependencies: - - '@jest/test-result' - - jest-runner - jest-runner@29.7.0: dependencies: '@jest/console': 29.7.0 @@ -9554,12 +8733,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 7.2.0 - jest-worker@28.1.3: - dependencies: - '@types/node': 20.16.13 - merge-stream: 2.0.0 - supports-color: 8.1.1 - jest-worker@29.7.0: dependencies: '@types/node': 20.16.13 @@ -9606,12 +8779,8 @@ snapshots: dependencies: fast-deep-equal: 3.1.3 - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - json5@2.2.3: {} jsonfile@4.0.0: @@ -9634,11 +8803,6 @@ snapshots: leven@3.1.0: {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - light-my-request@5.13.0: dependencies: cookie: 0.6.0 @@ -9677,10 +8841,6 @@ snapshots: dependencies: p-locate: 4.1.0 - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - locate-path@7.2.0: dependencies: p-locate: 6.0.0 @@ -9714,11 +8874,6 @@ snapshots: lodash@4.17.21: optional: true - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -9834,10 +8989,6 @@ snapshots: brace-expansion: 2.0.1 optional: true - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 @@ -9970,15 +9121,6 @@ snapshots: optional@0.1.4: {} - optionator@0.9.3: - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - os-tmpdir@1.0.2: {} outdent@0.5.0: {} @@ -10005,10 +9147,6 @@ snapshots: dependencies: p-limit: 2.3.0 - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-locate@6.0.0: dependencies: p-limit: 4.0.0 @@ -10122,10 +9260,6 @@ snapshots: semver-compare: 1.0.0 optional: true - plur@4.0.0: - dependencies: - irregular-plurals: 3.5.0 - postcss@8.4.38: dependencies: nanoid: 3.3.7 @@ -10133,16 +9267,8 @@ snapshots: source-map-js: 1.2.0 optional: true - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - prettier@2.8.8: {} - prettier@3.2.5: {} - pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 @@ -10182,8 +9308,6 @@ snapshots: pseudomap@1.0.2: {} - punycode@1.4.1: {} - punycode@2.3.1: {} pure-rand@6.1.0: {} @@ -10339,6 +9463,7 @@ snapshots: rimraf@3.0.2: dependencies: glob: 7.2.3 + optional: true rimraf@5.0.10: dependencies: @@ -10534,10 +9659,6 @@ snapshots: statuses@2.0.1: {} - stream-events@1.0.5: - dependencies: - stubs: 3.0.0 - string-argv@0.3.2: {} string-length@4.0.2: @@ -10592,8 +9713,6 @@ snapshots: strip-json-comments@3.1.1: {} - stubs@3.0.0: {} - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -10606,18 +9725,8 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-hyperlinks@2.3.0: - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - supports-preserve-symlinks-flag@1.0.0: {} - synckit@0.8.8: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.3 - tar@6.2.1: dependencies: chownr: 2.0.0 @@ -10632,17 +9741,6 @@ snapshots: dependencies: bintrees: 1.0.2 - teeny-request@7.1.1: - dependencies: - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - node-fetch: 2.7.0 - stream-events: 1.0.5 - uuid: 8.3.2 - transitivePeerDependencies: - - encoding - - supports-color - term-size@2.2.1: {} terser@5.30.3: @@ -10660,14 +9758,10 @@ snapshots: text-extensions@2.4.0: {} - text-table@0.2.0: {} - thread-stream@3.1.0: dependencies: real-require: 0.2.0 - throat@6.0.2: {} - through@2.3.8: {} tinyexec@0.3.0: {} @@ -10690,10 +9784,6 @@ snapshots: tr46@0.0.3: {} - ts-api-utils@1.3.0(typescript@5.6.2): - dependencies: - typescript: 5.6.2 - ts-essentials@9.4.2(typescript@5.6.2): optionalDependencies: typescript: 5.6.2 @@ -10718,14 +9808,8 @@ snapshots: tslib@2.6.3: {} - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-is@1.6.18: @@ -10774,10 +9858,6 @@ snapshots: url-value-parser@2.2.0: {} - urlgrey@1.0.0: - dependencies: - fast-url-parser: 1.1.3 - util-deprecate@1.0.2: optional: true @@ -10785,8 +9865,6 @@ snapshots: uuid@7.0.3: {} - uuid@8.3.2: {} - uuid@9.0.1: {} v8-compile-cache@2.4.0: {} @@ -10871,7 +9949,8 @@ snapshots: yallist@4.0.0: {} - yaml@1.10.2: {} + yaml@1.10.2: + optional: true yaml@2.5.0: {} diff --git a/readme.md b/readme.md index a00f043b..df3d8af4 100644 --- a/readme.md +++ b/readme.md @@ -15,10 +15,9 @@ 路 Marble.js 路 Fastify 路 Apollo - 路 Prettier 路 TypeScript 路 Jest - 路 ESLint + 路 Biome 路 Changesets 路 Prometheus 馃檹