diff --git a/.changeset/chilly-pianos-try.md b/.changeset/chilly-pianos-try.md new file mode 100644 index 000000000..b5534954a --- /dev/null +++ b/.changeset/chilly-pianos-try.md @@ -0,0 +1,5 @@ +--- +"@trigger.dev/eslint-plugin": patch +--- + +An eslint plugin that ensures uniqueness on task keys diff --git a/examples/nextjs-example/.eslintrc.json b/examples/nextjs-example/.eslintrc.json index bffb357a7..f881025da 100644 --- a/examples/nextjs-example/.eslintrc.json +++ b/examples/nextjs-example/.eslintrc.json @@ -1,3 +1,7 @@ { - "extends": "next/core-web-vitals" + "extends": ["next/core-web-vitals"], + "plugins": ["@trigger.dev"], + "rules": { + "@trigger.dev/no-duplicated-task-keys": 2 + } } diff --git a/examples/nextjs-example/package.json b/examples/nextjs-example/package.json index 5b3483032..d1d6cd7be 100644 --- a/examples/nextjs-example/package.json +++ b/examples/nextjs-example/package.json @@ -19,6 +19,7 @@ "@trigger.dev/sdk": "workspace:*", "@trigger.dev/slack": "workspace:*", "@trigger.dev/typeform": "workspace:*", + "@trigger.dev/eslint-plugin": "workspace:*", "@types/node": "18.15.13", "@types/react": "18.2.17", "@types/react-dom": "18.2.7", diff --git a/packages/eslint-plugin/.eslintrc.js b/packages/eslint-plugin/.eslintrc.js new file mode 100644 index 000000000..6d0053b05 --- /dev/null +++ b/packages/eslint-plugin/.eslintrc.js @@ -0,0 +1,23 @@ +"use strict"; + +module.exports = { + root: true, + extends: [ + "eslint:recommended", + "plugin:eslint-plugin/recommended", + "plugin:node/recommended", + ], + env: { + node: true, + }, + overrides: [ + { + files: ["tests/**/*.js"], + env: { mocha: true }, + }, + ], + parserOptions: { + sourceType: "module", + ecmaVersion: 2020, + }, +}; diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md new file mode 100644 index 000000000..400fccba5 --- /dev/null +++ b/packages/eslint-plugin/README.md @@ -0,0 +1,52 @@ +# @trigger.dev/eslint-plugin + +ESLint plugin with trigger.dev best practices + +## Installation + +You'll first need to install [ESLint](https://eslint.org/): + +```sh +npm i eslint --save-dev +``` + +Next, install `@trigger.dev/eslint-plugin`: + +```sh +npm install @trigger.dev/eslint-plugin --save-dev +``` + +## Usage + +Add `trigger-dev` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix: + +```json +{ + "plugins": [ + "trigger-dev" + ] +} +``` + + +Then configure the rules you want to use under the rules section. + +```json +{ + "rules": { + "trigger-dev/rule-name": 2 + } +} +``` + +## Rules + + + +| Name | Description | +| :--------------------------------------------------------------- | :----------------------------------------------- | +| [no-duplicated-task-keys](docs/rules/no-duplicated-task-keys.md) | Prevent duplicated task keys on trigger.dev jobs | + + + + diff --git a/packages/eslint-plugin/docs/rules/no-duplicated-task-keys.md b/packages/eslint-plugin/docs/rules/no-duplicated-task-keys.md new file mode 100644 index 000000000..d25098d99 --- /dev/null +++ b/packages/eslint-plugin/docs/rules/no-duplicated-task-keys.md @@ -0,0 +1,37 @@ +# Prevent duplicated task keys on trigger.dev jobs (`trigger-dev/no-duplicated-task-keys`) + + + +Please describe the origin of the rule here. + +## Rule Details + +This rule aims to... + +Examples of **incorrect** code for this rule: + +```js + +// fill me in + +``` + +Examples of **correct** code for this rule: + +```js + +// fill me in + +``` + +### Options + +If there are any options, describe them here. Otherwise, delete this section. + +## When Not To Use It + +Give a short description of when it would be appropriate to turn off this rule. + +## Further Reading + +If there are other links that describe the issue this rule addresses, please include them here in a bulleted list. diff --git a/packages/eslint-plugin/lib/index.js b/packages/eslint-plugin/lib/index.js new file mode 100644 index 000000000..5f0edc1ae --- /dev/null +++ b/packages/eslint-plugin/lib/index.js @@ -0,0 +1,22 @@ +/** + * @fileoverview ESLint plugin with trigger.dev best practices + * @author + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const requireIndex = require("requireindex"); + +//------------------------------------------------------------------------------ +// Plugin Definition +//------------------------------------------------------------------------------ + + +// import all rules in lib/rules +module.exports.rules = requireIndex(__dirname + "/rules"); + + + diff --git a/packages/eslint-plugin/lib/rules/no-duplicated-task-keys.js b/packages/eslint-plugin/lib/rules/no-duplicated-task-keys.js new file mode 100644 index 000000000..12bb642fe --- /dev/null +++ b/packages/eslint-plugin/lib/rules/no-duplicated-task-keys.js @@ -0,0 +1,110 @@ +/** + * @fileoverview Prevent duplicated task keys on trigger.dev jobs + * @author + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +/** @type {import('eslint').Rule.RuleModule} */ +module.exports = { + meta: { + type: 'problem', // `problem`, `suggestion`, or `layout` + docs: { + description: "Prevent duplicated task keys on trigger.dev jobs", + recommended: true, + url: null, // URL to the documentation page for this rule + }, + fixable: null, // Or `code` or `whitespace` + schema: [], // Add a schema if the rule has options + messages: { + duplicatedTaskKey: "Task key '{{taskKey}}' is duplicated" + } + }, + + create(context) { + const getArguments = (node) => node.arguments || node.argument.arguments; + + const getKey = (node) => { + const args = getArguments(node); + + const key = args.find((arg) => arg.type === 'Literal'); + + if (!key) return; + + return key.value; + } + + const getTaskName = (expression) => { + const callee = expression.callee || expression.argument.callee; + + const property = callee.property; + + // We need property to be an Identifier, otherwise it's not a task + if (property.type !== 'Identifier') return; + + // for io.slack.postMessage, postMessage + return property.name; + } + + const groupExpressionsByTask = (ExpressionStatements, map = new Map()) => ExpressionStatements.reduce((acc, { expression }) => { + const taskName = getTaskName(expression); + const taskKey = getKey(expression); + + if (acc.has(taskName)) { + acc.get(taskName).push(taskKey); + } else { + acc.set(taskName, [taskKey]); + } + + return acc; + }, map); + + const groupVariableDeclarationsByTask = VariableDeclarations => VariableDeclarations.reduce((acc, { declarations }) => { + declarations.forEach((declaration) => { + if (!['AwaitExpression', 'CallExpression'].includes(declaration.init.type)) return; + + const taskName = getTaskName(declaration.init); + + const taskKey = getKey(declaration.init); + + if (acc.has(taskName)) { + acc.get(taskName).push(taskKey); + } else { + acc.set(taskName, [taskKey]); + } + }); + + return acc; + }, new Map()); + + return { + "CallExpression[callee.property.name='defineJob'] ObjectExpression BlockStatement": (node) => { + const VariableDeclarations = node.body.filter((arg) => arg.type === 'VariableDeclaration'); + + const grouped = groupVariableDeclarationsByTask(VariableDeclarations); + + const ExpressionStatements = node.body.filter((arg) => arg.type === 'ExpressionStatement'); + + // it'll be a map of taskName => [key1, key2, ...] + const groupedByTask = groupExpressionsByTask(ExpressionStatements, grouped); + + groupedByTask.forEach((keys) => { + const duplicated = keys.find((key, index) => keys.indexOf(key) !== index); + + if (duplicated) { + context.report({ + node, + messageId: 'duplicatedTaskKey', + data: { + taskKey: duplicated + }, + }); + } + }) + } + } + } +}; diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json new file mode 100644 index 000000000..e6e71019b --- /dev/null +++ b/packages/eslint-plugin/package.json @@ -0,0 +1,38 @@ +{ + "name": "@trigger.dev/eslint-plugin", + "version": "2.0.9", + "description": "ESLint plugin with trigger.dev best practices", + "keywords": [ + "eslint", + "eslintplugin", + "eslint-plugin" + ], + "author": "", + "main": "./lib/index.js", + "exports": "./lib/index.js", + "scripts": { + "lint": "npm-run-all \"lint:*\"", + "lint:eslint-docs": "npm-run-all \"update:eslint-docs -- --check\"", + "lint:js": "eslint .", + "test": "mocha tests --recursive", + "update:eslint-docs": "eslint-doc-generator" + }, + "dependencies": { + "requireindex": "^1.2.0" + }, + "devDependencies": { + "eslint": "^8.19.0", + "eslint-doc-generator": "^1.0.0", + "eslint-plugin-eslint-plugin": "^5.0.0", + "eslint-plugin-node": "^11.1.0", + "mocha": "^10.0.0", + "npm-run-all": "^4.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.0.0 || >= 18.0.0" + }, + "peerDependencies": { + "eslint": ">=7" + }, + "license": "ISC" +} diff --git a/packages/eslint-plugin/tests/lib/rules/no-duplicated-task-keys.js b/packages/eslint-plugin/tests/lib/rules/no-duplicated-task-keys.js new file mode 100644 index 000000000..2a5905d41 --- /dev/null +++ b/packages/eslint-plugin/tests/lib/rules/no-duplicated-task-keys.js @@ -0,0 +1,245 @@ +/** + * @fileoverview Prevent duplicated task keys on trigger.dev jobs + * @author + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const rule = require("../../../lib/rules/no-duplicated-task-keys"), + RuleTester = require("eslint").RuleTester; + + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +const ruleTester = new RuleTester({ + parserOptions: { + sourceType: "module", + ecmaVersion: 2020, + } +}); +ruleTester.run("no-duplicated-task-keys", rule, { + valid: [ + { + code: `client.defineJob({ + run: async (payload, io, ctx) => { + await io.runTask("task", { name: "My Task" }, async () => {}); + } + })` + }, + { + code: `client.defineJob({ + run: async (payload, io, ctx) => { + await io.stripe.createCharge("charge", {}) + } + })` + }, + { + code: `client.defineJob({ + run: async (payload, io, ctx) => { + await io.supabase.createProject("create-project", {}) + } + })` + }, + { + code: `client.defineJob({ + run: async (payload, io, ctx) => { + await io.typeform.listForms("list-forms"); + } + })` + }, + ], + + invalid: [ + { + code: `client.defineJob({ + run: async (payload, io, ctx) => { + await io.runTask("duplicated-task", { name: "My Task" }, async () => { + return await longRunningCode(payload.userId); + }); + + await io.runTask("duplicated-task", { name: "My Task" }, async () => { + return await longRunningCode(payload.userId); + }); + } + })`, + errors: [{ message: "Task key 'duplicated-task' is duplicated" }] + }, + { + code: `client.defineJob({ + run: async (payload, io, ctx) => { + await io.stripe.createCharge("duplicated-charge", { + amount: 100, + currency: "usd", + source: payload.source, + customer: payload.customerId, + }); + await io.stripe.createCharge("duplicated-charge", { + amount: 100, + currency: "usd", + source: payload.source, + customer: payload.customerId, + }); + } + })`, + errors: [{ message: "Task key 'duplicated-charge' is duplicated" }] + }, + { + code: `client.defineJob({ + run: async (payload, io, ctx) => { + await io.supabase.createProject("create-project", { + name: payload.name, + organization_id: payload.organization_id, + plan: payload.plan, + region: payload.region, + kps_enabled: true, + db_pass: payload.password, + }) + await io.supabase.createProject("create-project", { + name: payload.name, + organization_id: payload.organization_id, + plan: payload.plan, + region: payload.region, + kps_enabled: true, + db_pass: payload.password, + }) + } + });`, + errors: [{ message: "Task key 'create-project' is duplicated" }] + }, + { + code: `client.defineJob({ + run: async (payload, io, ctx) => { + await io.typeform.listForms("list-forms"); + + await io.typeform.listForms("list-forms"); + } + })`, + errors: [{ message: "Task key 'list-forms' is duplicated" }] + }, + { + code: `client.defineJob({ + id: "github-integration-on-issue-opened", + name: "GitHub Integration - On Issue Opened", + version: "0.1.0", + integrations: { github: githubApiKey }, + trigger: githubApiKey.triggers.repo({ + event: events.onIssueOpened, + owner: "triggerdotdev", + repo: "empty", + }), + run: async (payload, io, ctx) => { + await io.github.addIssueAssignees("add assignee", { + owner: payload.repository.owner.login, + repo: payload.repository.name, + issueNumber: payload.issue.number, + assignees: ["matt-aitken"], + }); + + await io.github.addIssueAssignees("add assignee", { + owner: payload.repository.owner.login, + repo: payload.repository.name, + issueNumber: payload.issue.number, + assignees: ["matt-aitken"], + }); + + await io.github.addIssueLabels("add label", { + owner: payload.repository.owner.login, + repo: payload.repository.name, + issueNumber: payload.issue.number, + labels: ["bug"], + }); + + return { payload, ctx }; + }, + })`, + errors: [ + { message: "Task key 'add assignee' is duplicated" }, + ] + }, + { + code: `client.defineJob({ + id: "react-hook", + name: "React Hook test", + version: "0.0.1", + trigger: eventTrigger({ + name: "react-hook", + }), + integrations: { + openai, + }, + run: async (_payload, io) => { + await io.wait("Wait 2 seconds", 2); + await io.wait("Wait 1 second", 1); + await io.wait("Wait 1 second", 1); + + await io.openai.backgroundCreateChatCompletion("Tell me a joke", { + model: "gpt-3.5-turbo-16k", + messages: [ + { + role: "user", + content: 'Tell me a joke please', + }, + ], + }); + const result = await io.openai.backgroundCreateChatCompletion("Tell me a joke", { + model: "gpt-3.5-turbo-16k", + messages: [ + { + role: "user", + content: 'Tell me a joke please', + }, + ], + }); + + return { + summary: result?.choices[0]?.message?.content, + }; + }, + });`, + errors: [ + { message: "Task key 'Tell me a joke' is duplicated" }, + { message: "Task key 'Wait 1 second' is duplicated" }, + ] + }, + { + code: `client.defineJob({ + id: "github-integration-get-tag", + name: "GitHub Integration - Get Tag", + version: "0.1.0", + integrations: { github }, + trigger: githubApiKey.triggers.repo({ + event: events.onNewBranchOrTag, + owner: "triggerdotdev", + repo: "empty", + }), + run: async (payload, io, ctx) => { + await io.logger.info("This is a simple log info message"); + if (payload.ref_type === "tag") { + const tag = io.github.getTag("Get Tag", { + owner: payload.repository.owner.login, + repo: payload.repository.name, + tagSHA: payload.ref, + }); + io.github.getTag("Get Tag", { + owner: payload.repository.owner.login, + repo: payload.repository.name, + tagSHA: payload.ref, + }); + await io.logger.info("Tag ", tag); + await io.logger.info("Tag ", tag); + } + return { payload, ctx }; + }, + });`, + errors: [ + { message: "Task key 'Get Tag' is duplicated" }, + { message: "Task key 'Tag ' is duplicated" }, + ] + } + ] +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ea6b69a0..44a942a33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -441,41 +441,6 @@ importers: '@trigger.dev/cli': link:../../packages/cli concurrently: 8.2.0 - examples/my-app: - specifiers: - '@trigger.dev/cli': workspace:* - '@trigger.dev/nextjs': ^2.0.9 - '@trigger.dev/sdk': ^2.0.9 - '@types/node': 20.5.0 - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 - autoprefixer: 10.4.15 - eslint: 8.47.0 - eslint-config-next: 13.4.18 - next: 13.4.18 - postcss: 8.4.28 - react: 18.2.0 - react-dom: 18.2.0 - tailwindcss: 3.3.3 - typescript: 5.1.6 - dependencies: - '@trigger.dev/nextjs': 2.0.9_wymt6ek52xutjtoyagql6cnu24 - '@trigger.dev/sdk': 2.0.9 - '@types/node': 20.5.0 - '@types/react': 18.2.20 - '@types/react-dom': 18.2.7 - autoprefixer: 10.4.15_postcss@8.4.28 - eslint: 8.47.0 - eslint-config-next: 13.4.18_qj3u6ezxe2airdzjq3nyoxe24m - next: 13.4.18_biqbaboplfbrettd7655fr4n2y - postcss: 8.4.28 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - tailwindcss: 3.3.3 - typescript: 5.1.6 - devDependencies: - '@trigger.dev/cli': link:../../packages/cli - examples/nextjs-12: specifiers: '@trigger.dev/cli': workspace:* @@ -500,6 +465,7 @@ importers: examples/nextjs-example: specifiers: '@trigger.dev/cli': workspace:* + '@trigger.dev/eslint-plugin': workspace:* '@trigger.dev/github': workspace:* '@trigger.dev/nextjs': workspace:* '@trigger.dev/openai': workspace:* @@ -528,6 +494,7 @@ importers: typescript: 5.0.4 zod: 3.21.4 dependencies: + '@trigger.dev/eslint-plugin': link:../../packages/eslint-plugin '@trigger.dev/github': link:../../integrations/github '@trigger.dev/nextjs': link:../../packages/nextjs '@trigger.dev/openai': link:../../integrations/openai @@ -995,6 +962,25 @@ importers: '@types/react': 18.2.17 typescript: 4.9.5 + packages/eslint-plugin: + specifiers: + eslint: ^8.19.0 + eslint-doc-generator: ^1.0.0 + eslint-plugin-eslint-plugin: ^5.0.0 + eslint-plugin-node: ^11.1.0 + mocha: ^10.0.0 + npm-run-all: ^4.1.5 + requireindex: ^1.2.0 + dependencies: + requireindex: 1.2.0 + devDependencies: + eslint: 8.47.0 + eslint-doc-generator: 1.4.3_eslint@8.47.0 + eslint-plugin-eslint-plugin: 5.1.1_eslint@8.47.0 + eslint-plugin-node: 11.1.0_eslint@8.47.0 + mocha: 10.2.0 + npm-run-all: 4.1.5 + packages/express: specifiers: '@remix-run/web-fetch': ^4.3.5 @@ -5079,7 +5065,7 @@ packages: dependencies: eslint: 8.47.0 eslint-visitor-keys: 3.4.3 - dev: false + dev: true /@eslint-community/regexpp/4.5.1: resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} @@ -5088,7 +5074,7 @@ packages: /@eslint-community/regexpp/4.6.2: resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: false + dev: true /@eslint/eslintrc/1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} @@ -5138,7 +5124,7 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: false + dev: true /@eslint/js/8.42.0: resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} @@ -5152,7 +5138,7 @@ packages: /@eslint/js/8.47.0: resolution: {integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false + dev: true /@fal-works/esbuild-plugin-global-externals/2.1.2: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} @@ -5892,10 +5878,6 @@ packages: resolution: {integrity: sha512-RmHanbV21saP/6OEPBJ7yJMuys68cIf8OBBWd7+uj40LdpmswVAwe1uzeuFyUsd6SfeITWT3XnQfn6wULeKwDQ==} dev: false - /@next/env/13.4.18: - resolution: {integrity: sha512-ZUG5Y/KSSerggdeD2LIYgiYziKTuSE9oE2RnW8bhNw6WunA8MrVfrWaCDTYSx/UG8qzPpSF+BiZNiHUiALxCdA==} - dev: false - /@next/eslint-plugin-next/12.3.4: resolution: {integrity: sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==} dependencies: @@ -5914,12 +5896,6 @@ packages: glob: 7.1.7 dev: false - /@next/eslint-plugin-next/13.4.18: - resolution: {integrity: sha512-GlOmUjZYYTjKl782mKk5a0bYEmKaouGaxPhi6t9yDILqrppU7JTIyONzLKQPszRXDCVZge0NFd4gwRs1ARZsMg==} - dependencies: - glob: 7.1.7 - dev: false - /@next/eslint-plugin-next/13.4.6: resolution: {integrity: sha512-bPigeu0RI7bgy1ucBA2Yqcfg539y0Lzo38P2hIkrRB1GNvFSbYg6RTu8n6tGqPVrH3TTlPTNKLXG01wc+5NuwQ==} dependencies: @@ -5979,15 +5955,6 @@ packages: dev: false optional: true - /@next/swc-darwin-arm64/13.4.18: - resolution: {integrity: sha512-d/73jvZe7dNTjLugDsIIy2AdQrwE2dFC9/QRr7yHmFm8mS5EiIHeDKzaqIsv9+JXKD9ZB1i/c0x7+F0PlKo1vQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-x64/12.3.4: resolution: {integrity: sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ==} engines: {node: '>= 10'} @@ -6023,15 +5990,6 @@ packages: dev: false optional: true - /@next/swc-darwin-x64/13.4.18: - resolution: {integrity: sha512-PwfvxgxG5rvUJppF02IdVAVx4HTtbZrS/Nz9qHfYfeFOQ9a+PijL8Xr9BJ21jiIS+dPQjwzvpsOdsC+DOrlzhg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-freebsd-x64/12.3.4: resolution: {integrity: sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ==} engines: {node: '>= 10'} @@ -6085,15 +6043,6 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu/13.4.18: - resolution: {integrity: sha512-Nayn6yFeox9wKaRTLaWRvO3DjB8xEM3BnXu7QnQeZb0AgD484XmdxK13TYZW4jdNy3VJ5OyYIpL4mhkgWEVq/A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-musl/12.3.4: resolution: {integrity: sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ==} engines: {node: '>= 10'} @@ -6129,15 +6078,6 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl/13.4.18: - resolution: {integrity: sha512-sQzJ5DFPvGlKjI97R17v2RxKJYYzHw4lJZ4xhK6wvyYJYYcn9JfIMyKCvLtfLgpU1tOUcbkmx7i8XC28sB1BsQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-gnu/12.3.4: resolution: {integrity: sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag==} engines: {node: '>= 10'} @@ -6173,15 +6113,6 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu/13.4.18: - resolution: {integrity: sha512-zqCLvGdz+T0V+set8zRHbkl3PQq0quUp5Dtuj1yGw0N9htp3beL1RVyhfSusbgxT82TRTXJe94IREgM8iYq6wg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-musl/12.3.4: resolution: {integrity: sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg==} engines: {node: '>= 10'} @@ -6217,15 +6148,6 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl/13.4.18: - resolution: {integrity: sha512-V/+dWy32eo3iiWkro+0M4/vNp1anGrVzNp90teVKG5tl5t5qNGc/qWOgmgTG8JhowdJAxj7+fp+WltrcezqsDA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-arm64-msvc/12.3.4: resolution: {integrity: sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ==} engines: {node: '>= 10'} @@ -6261,15 +6183,6 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc/13.4.18: - resolution: {integrity: sha512-anytZjyD1tAgfA/crOrVcUlm0yrSNKYKpg53NQ+Y83nAungrghBthZZiA1/QvmIs1Igu0Rqw/O6hqCOH63o8pw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-ia32-msvc/12.3.4: resolution: {integrity: sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ==} engines: {node: '>= 10'} @@ -6305,15 +6218,6 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc/13.4.18: - resolution: {integrity: sha512-lgsZDjbU0FQQH2pDSYeKIbVX9g8dqA7fUtgcAcwbj4eEuVW/K41rKFQceMM1kt0ktVUZ4uF2qOHsgebOWpDJIw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-x64-msvc/12.3.4: resolution: {integrity: sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg==} engines: {node: '>= 10'} @@ -6349,15 +6253,6 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc/13.4.18: - resolution: {integrity: sha512-cS72bVNqICglP/uEzqNy26lfRH30zf4AbqnnhPhe+UxRg6d+OTtRQpFX7C4xtBP09FKA+MSSflNVkrn2ZfaWrA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: @@ -10763,15 +10658,6 @@ packages: zod-error: 1.5.0 dev: false - /@trigger.dev/core/2.0.9: - resolution: {integrity: sha512-VRDEYicVEQ7T50xCW+SmTv9BfSc8vKiHHguZ/ghMGa0vVN1iLTFUrPrcMx9PZ5JryzRMtgEuffWMdrKpG/EzOQ==} - engines: {node: '>=16.8.0'} - dependencies: - ulid: 2.3.0 - zod: 3.21.4 - zod-error: 1.5.0 - dev: false - /@trigger.dev/nextjs/1.0.0_fy3ffmrhk4zoekjz4cwhclpq64: resolution: {integrity: sha512-Dt32BaAKYNJqYbPcpdzUOfkgpDRIftyd4oj2lBFilIHZUCJpfG1MdYbr4YWFhNE5Z04Pj0I+uN8kaxTkTZp+Ig==} engines: {node: '>=16.8.0'} @@ -10786,20 +10672,6 @@ packages: - supports-color dev: false - /@trigger.dev/nextjs/2.0.9_wymt6ek52xutjtoyagql6cnu24: - resolution: {integrity: sha512-wVz7Kimw2oqBKATvGiEg9oSh1wllTKhbWrofwBa6kFTEH6s9aYxNV0Q2afx5gHET+v7oFCEMOM9/S9kwA78Qcg==} - engines: {node: '>=16.8.0'} - peerDependencies: - '@trigger.dev/sdk': ^2.0.9 - next: '>=12.0.0 <14.0.0' - dependencies: - '@trigger.dev/sdk': 2.0.9 - debug: 4.3.4 - next: 13.4.18_biqbaboplfbrettd7655fr4n2y - transitivePeerDependencies: - - supports-color - dev: false - /@trigger.dev/sdk/2.0.7: resolution: {integrity: sha512-40wpHx38opv2roJDz7CP4ZJYp6nMYJWLgehVjCqcvQWagcE00D6mTu3TZyFwBU8C/fy0QmdnnLehhruZMnpGpA==} engines: {node: '>=16.8.0'} @@ -10827,33 +10699,6 @@ packages: - utf-8-validate dev: false - /@trigger.dev/sdk/2.0.9: - resolution: {integrity: sha512-f6UwXwio4pcpObGGBcdy+Ugsm3HNCWainDFL2HnpUldMRqaerHt/vgkfQfJ6JeG0BnNmK/zAEhW5Mba4j6FFgA==} - engines: {node: '>=16.8.0'} - dependencies: - '@trigger.dev/core': 2.0.9 - chalk: 5.2.0 - cronstrue: 2.21.0 - debug: 4.3.4 - evt: 2.4.13 - get-caller-file: 2.0.5 - git-remote-origin-url: 4.0.0 - git-repo-info: 2.1.1 - node-fetch: 2.6.12 - slug: 6.1.0 - terminal-link: 3.0.0 - ulid: 2.3.0 - uuid: 9.0.0 - ws: 8.12.0 - zod: 3.21.4 - zod-error: 1.5.0 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: false - /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} @@ -11705,26 +11550,6 @@ packages: - supports-color dev: false - /@typescript-eslint/parser/5.59.6_qj3u6ezxe2airdzjq3nyoxe24m: - resolution: {integrity: sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.59.6 - '@typescript-eslint/types': 5.59.6 - '@typescript-eslint/typescript-estree': 5.59.6_typescript@5.1.6 - debug: 4.3.4 - eslint: 8.47.0 - typescript: 5.1.6 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/scope-manager/5.59.6: resolution: {integrity: sha512-gLbY3Le9Dxcb8KdpF0+SJr6EQ+hFGYFl6tVY8VxLPFDfUZC7BHFw+Vq7bM5lE9DwWPfx4vMWWTLGXgpc0mAYyQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -11839,6 +11664,26 @@ packages: - supports-color dev: false + /@typescript-eslint/utils/5.59.6_eslint@8.47.0: + resolution: {integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.47.0 + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.59.6 + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/typescript-estree': 5.59.6 + eslint: 8.47.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/utils/5.59.6_iukboom6ndih5an6iafl45j2fe: resolution: {integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -12317,6 +12162,11 @@ packages: resolution: {integrity: sha512-bF6xLaZBLpOQzgYUtYEhJx090nPSZk1BQ/q2oyBK9aMMcJHzx9uXGCjI2Y+LebsN4Jwoykr0V9whbPiogdyHoQ==} dev: false + /ansi-colors/4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: true + /ansi-colors/4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -12673,22 +12523,6 @@ packages: postcss-value-parser: 4.2.0 dev: false - /autoprefixer/10.4.15_postcss@8.4.28: - resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.21.10 - caniuse-lite: 1.0.30001521 - fraction.js: 4.2.0 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.28 - postcss-value-parser: 4.2.0 - dev: false - /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -13047,6 +12881,10 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true + /boolean/3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + dev: true + /bottleneck/2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} dev: false @@ -13130,6 +12968,10 @@ packages: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} dev: true + /browser-stdout/1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: true + /browserify-zlib/0.1.4: resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} dependencies: @@ -13145,6 +12987,7 @@ packages: electron-to-chromium: 1.4.495 node-releases: 2.0.13 update-browserslist-db: 1.0.11_browserslist@4.21.10 + dev: true /browserslist/4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} @@ -13761,6 +13604,11 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: true + /commander/10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -14245,6 +14093,19 @@ packages: dependencies: ms: 2.1.2 + /debug/4.3.4_supports-color@8.1.1: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + dev: true + /decamelize-keys/1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} @@ -14258,6 +14119,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /decamelize/4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: true + /decode-named-character-reference/1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: @@ -14510,6 +14376,11 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + /diff/5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: true + /diff/5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} @@ -14609,6 +14480,13 @@ packages: tslib: 2.5.0 dev: true + /dot-prop/7.2.0: + resolution: {integrity: sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + type-fest: 2.19.0 + dev: true + /dotenv-expand/10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} @@ -14677,6 +14555,7 @@ packages: /electron-to-chromium/1.4.495: resolution: {integrity: sha512-mwknuemBZnoOCths4GtpU/SDuVMp3uQHKa2UNJT9/aVD6WVRjGpXOxRGX7lm6ILIenTdGXPSTCTDaWos5tEU8Q==} + dev: true /emittery/0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -15396,31 +15275,6 @@ packages: - supports-color dev: false - /eslint-config-next/13.4.18_qj3u6ezxe2airdzjq3nyoxe24m: - resolution: {integrity: sha512-G15CYbsIHwV6Fzoly5SXo/Mj3pNqNkOzbf+wQcPod3LgVNviWVYlb9czjdiREXHq2VF6oV79Kv0Wunguj6RMEw==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@next/eslint-plugin-next': 13.4.18 - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.59.6_qj3u6ezxe2airdzjq3nyoxe24m - eslint: 8.47.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5_ms75x23u6teenmhnospuu6z2pm - eslint-plugin-import: 2.27.5_gl42cwmwde2bgag5w7p3v4v7ba - eslint-plugin-jsx-a11y: 6.7.1_eslint@8.47.0 - eslint-plugin-react: 7.32.2_eslint@8.47.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.47.0 - typescript: 5.1.6 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - dev: false - /eslint-config-next/13.4.6_binxsscxvozjxebftqdoazsxm4: resolution: {integrity: sha512-nlv4FYish1RYYHILbQwM5/rD37cOvEqtMfDjtQCYbXdE2O3MggqHu2q6IDeLE2Z6u8ZJyNPgWOA6OimWcxj3qw==} peerDependencies: @@ -15488,6 +15342,31 @@ packages: eslint-plugin-turbo: 1.10.12_eslint@8.31.0 dev: true + /eslint-doc-generator/1.4.3_eslint@8.47.0: + resolution: {integrity: sha512-cn9KXE7xuKlxKi/9VbirR3cbz7W1geRObwWzZjJAnpTeNBoqA8Rj+lD8/HHHJ7PnOdaTrRyhhoYdCtxqq3U7Bw==} + engines: {node: ^14.18.0 || ^16.0.0 || >=18.0.0} + hasBin: true + peerDependencies: + eslint: '>= 7' + dependencies: + '@typescript-eslint/utils': 5.59.6_eslint@8.47.0 + ajv: 8.12.0 + boolean: 3.2.0 + commander: 10.0.1 + cosmiconfig: 8.1.3 + deepmerge: 4.2.2 + dot-prop: 7.2.0 + eslint: 8.47.0 + jest-diff: 29.6.2 + json-schema-traverse: 1.0.0 + markdown-table: 3.0.3 + no-case: 3.0.4 + type-fest: 3.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /eslint-import-resolver-node/0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: @@ -15539,30 +15418,6 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript/3.5.5_ms75x23u6teenmhnospuu6z2pm: - resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.13.0 - eslint: 8.47.0 - eslint-module-utils: 2.7.4_j3kplqwrilsxe5qxrkx6wov6mi - eslint-plugin-import: 2.27.5_gl42cwmwde2bgag5w7p3v4v7ba - get-tsconfig: 4.5.0 - globby: 13.1.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - synckit: 0.8.5 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: false - /eslint-import-resolver-typescript/3.5.5_p5geytdocx6mbqwwlptzjkv4li: resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -15671,36 +15526,6 @@ packages: - supports-color dev: true - /eslint-module-utils/2.7.4_j3kplqwrilsxe5qxrkx6wov6mi: - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.6_qj3u6ezxe2airdzjq3nyoxe24m - debug: 3.2.7 - eslint: 8.47.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5_ms75x23u6teenmhnospuu6z2pm - transitivePeerDependencies: - - supports-color - dev: false - /eslint-module-utils/2.7.4_mcdyrqs6peaairrn7md524c74a: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} @@ -15752,7 +15577,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.6_binxsscxvozjxebftqdoazsxm4 + '@typescript-eslint/parser': 5.59.6_eslint@8.42.0 debug: 3.2.7 eslint: 8.42.0 eslint-import-resolver-node: 0.3.7 @@ -15772,6 +15597,28 @@ packages: regexpp: 3.2.0 dev: true + /eslint-plugin-es/3.0.1_eslint@8.47.0: + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + eslint: 8.47.0 + eslint-utils: 2.1.0 + regexpp: 3.2.0 + dev: true + + /eslint-plugin-eslint-plugin/5.1.1_eslint@8.47.0: + resolution: {integrity: sha512-4MGDsG505Ot2TSDSYxFL0cpDo4Y+t6hKB8cfZw9Jx484VjXWDfiYC/A6cccWFtWoOOC0j+wGgQIIb11cdIAMBg==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.47.0 + eslint-utils: 3.0.0_eslint@8.47.0 + estraverse: 5.3.0 + dev: true + /eslint-plugin-import/2.27.5_4nmwrqeucdooykidvg7oplsu44: resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} @@ -15815,7 +15662,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.6_binxsscxvozjxebftqdoazsxm4 + '@typescript-eslint/parser': 5.59.6_eslint@8.42.0 array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -15838,39 +15685,6 @@ packages: - supports-color dev: true - /eslint-plugin-import/2.27.5_gl42cwmwde2bgag5w7p3v4v7ba: - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.6_qj3u6ezxe2airdzjq3nyoxe24m - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.47.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4_j3kplqwrilsxe5qxrkx6wov6mi - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: false - /eslint-plugin-import/2.27.5_titmrsdujnhsc3m2skivuhiz64: resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} @@ -16070,31 +15884,6 @@ packages: semver: 6.3.0 dev: false - /eslint-plugin-jsx-a11y/6.7.1_eslint@8.47.0: - resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.22.5 - aria-query: 5.1.3 - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - ast-types-flow: 0.0.7 - axe-core: 4.6.2 - axobject-query: 3.1.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.47.0 - has: 1.0.3 - jsx-ast-utils: 3.3.3 - language-tags: 1.0.5 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - semver: 6.3.0 - dev: false - /eslint-plugin-node/11.1.0_eslint@8.31.0: resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} @@ -16110,6 +15899,21 @@ packages: semver: 6.3.0 dev: true + /eslint-plugin-node/11.1.0_eslint@8.47.0: + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + dependencies: + eslint: 8.47.0 + eslint-plugin-es: 3.0.1_eslint@8.47.0 + eslint-utils: 2.1.0 + ignore: 5.2.4 + minimatch: 3.1.2 + resolve: 1.22.2 + semver: 6.3.0 + dev: true + /eslint-plugin-react-hooks/4.6.0_eslint@8.31.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} @@ -16137,15 +15941,6 @@ packages: eslint: 8.44.0 dev: true - /eslint-plugin-react-hooks/4.6.0_eslint@8.47.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.47.0 - dev: false - /eslint-plugin-react-hooks/5.0.0-canary-7118f5dd7-20230705_eslint@8.45.0: resolution: {integrity: sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==} engines: {node: '>=10'} @@ -16274,30 +16069,6 @@ packages: string.prototype.matchall: 4.0.8 dev: false - /eslint-plugin-react/7.32.2_eslint@8.47.0: - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 - doctrine: 2.1.0 - eslint: 8.47.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 - prop-types: 15.8.1 - resolve: 2.0.0-next.4 - semver: 6.3.0 - string.prototype.matchall: 4.0.8 - dev: false - /eslint-plugin-testing-library/5.11.0_iukboom6ndih5an6iafl45j2fe: resolution: {integrity: sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} @@ -16349,7 +16120,7 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: false + dev: true /eslint-utils/2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} @@ -16368,6 +16139,16 @@ packages: eslint-visitor-keys: 2.1.0 dev: true + /eslint-utils/3.0.0_eslint@8.47.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.47.0 + eslint-visitor-keys: 2.1.0 + dev: true + /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} @@ -16630,7 +16411,7 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: false + dev: true /espree/9.4.1: resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} @@ -16638,7 +16419,7 @@ packages: dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2_acorn@8.10.0 - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 dev: true /espree/9.6.0: @@ -17213,6 +16994,11 @@ packages: flatted: 3.2.7 rimraf: 3.0.2 + /flat/5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} @@ -17669,6 +17455,17 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -20058,6 +19855,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /markdown-table/3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: true + /markdown-to-jsx/7.2.0_react@18.2.0: resolution: {integrity: sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==} engines: {node: '>= 10'} @@ -20629,6 +20430,13 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch/5.0.1: + resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch/5.1.2: resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} engines: {node: '>=10'} @@ -20735,6 +20543,34 @@ packages: ufo: 1.1.0 dev: true + /mocha/10.2.0: + resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4_supports-color@8.1.1 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + /module-details-from-path/1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} dev: false @@ -20844,6 +20680,12 @@ packages: big-integer: 1.6.51 dev: false + /nanoid/3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -21124,46 +20966,6 @@ packages: - babel-plugin-macros dev: false - /next/13.4.18_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-V/IIFA/znYYnOFlZQegrlhlWRpyIuCLXLGuH6pzCjwyxThNBZl4ItqoE3ffUyYY9f0X6XIQ2dX6UUBpNVSKZ8A==} - engines: {node: '>=16.8.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true - dependencies: - '@next/env': 13.4.18 - '@swc/helpers': 0.5.1 - busboy: 1.6.0 - caniuse-lite: 1.0.30001521 - postcss: 8.4.14 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - styled-jsx: 5.1.1_react@18.2.0 - watchpack: 2.4.0 - zod: 3.21.4 - optionalDependencies: - '@next/swc-darwin-arm64': 13.4.18 - '@next/swc-darwin-x64': 13.4.18 - '@next/swc-linux-arm64-gnu': 13.4.18 - '@next/swc-linux-arm64-musl': 13.4.18 - '@next/swc-linux-x64-gnu': 13.4.18 - '@next/swc-linux-x64-musl': 13.4.18 - '@next/swc-win32-arm64-msvc': 13.4.18 - '@next/swc-win32-ia32-msvc': 13.4.18 - '@next/swc-win32-x64-msvc': 13.4.18 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - /ngrok/5.0.0-beta.2: resolution: {integrity: sha512-UzsyGiJ4yTTQLCQD11k1DQaMwq2/SsztBg2b34zAqcyjS25qjDpogMKPaCKHwe/APRTHeel3iDXcVctk5CNaCQ==} engines: {node: '>=14.2'} @@ -21285,6 +21087,7 @@ packages: /node-releases/2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true /nodemon/3.0.1: resolution: {integrity: sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==} @@ -23594,7 +23397,6 @@ packages: /requireindex/1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} - dev: true /resend/0.9.1: resolution: {integrity: sha512-kgQIlw7eOXsiro3B4Wq7JXIMAZEB/vNYF6wfZhGd25e/dMhPX9WQuFTppZTH8muhka8o621pmH35KGMQR6H/6g==} @@ -23935,6 +23737,12 @@ packages: transitivePeerDependencies: - supports-color + /serialize-javascript/6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true + /serialize-javascript/6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: @@ -26070,6 +25878,7 @@ packages: browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /update-browserslist-db/1.0.11_browserslist@4.21.4: resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} @@ -26766,6 +26575,10 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true + /workerpool/6.2.1: + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + dev: true + /wrap-ansi/6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -26927,6 +26740,11 @@ packages: decamelize: 1.2.0 dev: false + /yargs-parser/20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: true + /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -26935,6 +26753,16 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + /yargs-unparser/2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: true + /yargs/15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'}