├── .gitignore
├── LICENSE
├── README.md
├── package.json
├── packages
└── remix-to-react-router
│ ├── .codemodrc.json
│ ├── .gitignore
│ ├── README.md
│ ├── __testfixtures__
│ ├── entry.client.remix.tsx
│ ├── entry.client.rr7.tsx
│ ├── entry.server.remix.tsx
│ ├── entry.server.rr7.tsx
│ ├── imports.remix.tsx
│ ├── imports.rr7.tsx
│ ├── nochange.tsx
│ ├── package.nochange.json
│ ├── package.remix.json
│ ├── package.rr7.json
│ ├── server.remix.ts
│ ├── server.rr7.ts
│ ├── testing.remix.tsx
│ ├── testing.rr7.tsx
│ ├── tsconfig.remix.json
│ ├── tsconfig.rr7.json
│ ├── vite.config.remix.ts
│ └── vite.config.rr7.ts
│ ├── package.json
│ ├── src
│ ├── config.ts
│ ├── index.ts
│ ├── transformers
│ │ ├── function-params.ts
│ │ ├── imports.ts
│ │ ├── package-json.ts
│ │ ├── rename-remix.ts
│ │ ├── rename-server-build.ts
│ │ └── tsconfig.ts
│ ├── types.ts
│ └── utils
│ │ ├── dependencies.ts
│ │ ├── line-terminator.ts
│ │ └── quote-style.ts
│ ├── test
│ └── transformers.ts
│ ├── tsconfig.json
│ └── vitest.config.ts
├── pnpm-lock.yaml
└── pnpm-workspace.yaml
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .DS_Store
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2024
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-router-codemods
2 |
3 | This repo provides codemods for migrating from Remix to React Router v7.
4 |
5 | See the README at [remix-to-react-router/README.md](./packages/remix-to-react-router/README.md) for details.
6 |
7 | ## Example
8 |
9 | Please see the commit [here](https://github.com/jrestall/epic-stack/commit/3fac92aed4c4a987b5b00e33257d3a3d9bc61372) that uses the `epic-stack` as an example of the changes the codemod `remix/2/react-router/upgrade` will make.
10 |
11 | ## Running
12 |
13 | 1. Install Codemod: https://docs.codemod.com/deploying-codemods/cli#installation
14 | 2. Run `codemod remix/2/react-router/upgrade` on the path you want to modify.
15 |
16 | ## Publishing
17 |
18 | ```bash
19 | cd packages/remix-to-react-router
20 | codemod login
21 | codemod publish
22 | ```
23 |
24 | ## License
25 |
26 | This project is licensed under the [MIT License](LICENSE).
27 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-router-codemods",
3 | "version": "1.0.0",
4 | "private": true,
5 | "description": "Codemods for migrating from Remix to React Router v7",
6 | "scripts": {
7 | "test": "vitest"
8 | },
9 | "keywords": [
10 | "codemod",
11 | "remix",
12 | "react-router",
13 | "migration"
14 | ],
15 | "author": "James Restall",
16 | "license": "MIT",
17 | "devDependencies": {
18 | "@types/jscodeshift": "^0.11.10",
19 | "@vitest/coverage-v8": "^2.1.4",
20 | "codemod": "^0.14.1",
21 | "jscodeshift": "^0.15.1",
22 | "ts-node": "^10.9.1",
23 | "typescript": "^5.6.3",
24 | "vitest": "^2.1.4"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/.codemodrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://codemod-utils.s3.us-west-1.amazonaws.com/configuration_schema.json",
3 | "name": "remix/2/react-router/upgrade",
4 | "description": "Migrates Remix to React Router v7",
5 | "version": "1.2.0",
6 | "engine": "jscodeshift",
7 | "private": false,
8 | "include": [
9 | "**/*.js",
10 | "**/*.cjs",
11 | "**/*.mjs",
12 | "**/*.ts",
13 | "**/*.jsx",
14 | "**/*.tsx",
15 | "**/package.json",
16 | "**/vite.config.ts",
17 | "**/tsconfig.json",
18 | "**/tsconfig.base.json"
19 | ],
20 | "applicability": {
21 | "from": [
22 | [
23 | "@remix-run/react",
24 | ">=",
25 | "2.0.0"
26 | ]
27 | ]
28 | },
29 | "arguments": [],
30 | "meta": {
31 | "tags": [
32 | "migration",
33 | "remix",
34 | "react-router",
35 | "v7"
36 | ],
37 | "git": "https://github.com/jrestall/react-router-codemods/tree/main/packages/remix-to-react-router"
38 | }
39 | }
--------------------------------------------------------------------------------
/packages/remix-to-react-router/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/packages/remix-to-react-router/README.md:
--------------------------------------------------------------------------------
1 | # Remix to React Router
2 |
3 | This codemod automates most of the manual steps outlined in the Remix to React Router upgrade guide.
4 |
5 | https://github.com/remix-run/react-router/blob/dev/docs/upgrading/remix.md
6 |
7 | - It updates your dependencies from the @remix-run/* packages to react-router and @react-router/* packages in package.json.
8 | - It updates both static and dynamic imports from @remix-run/* and react-router-dom to react-router.
9 | - It handles moving removed imports from the host specific packages like @remix-run/architect, @remix-run/cloudflare etc and moving them to react-router.
10 | - It updates any vi.mock module calls to the correct package name.
11 | - It updates the scripts in your package.json if you are using the basic scripts from the Remix templates, otherwise it won't change the scripts.
12 | - It updates the import and renames the plugin in your vite.config.ts.
13 | - If you have an entry.server.tsx and/or an entry.client.tsx file in your application, it will update the main components and imports in these files, including renaming remixContext to reactRouterContext.
14 | - It renames your server file's server build import from virtual:remix/server-build to virtual:react-router/server-build.
15 | - It updates package names in compilerOptions.types in tsconfig.json files.
16 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/entry.client.remix.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | /**
4 | * By default, Remix will handle hydrating your app on the client for you.
5 | * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
6 | * For more information, see https://remix.run/file-conventions/entry.client
7 | */
8 |
9 | import { RemixBrowser } from "@remix-run/react";
10 | import { startTransition, StrictMode } from "react";
11 | import { hydrateRoot } from "react-dom/client";
12 |
13 | startTransition(() => {
14 | hydrateRoot(
15 | document,
16 |
17 |
18 |
19 | );
20 | });
21 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/entry.client.rr7.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | /**
4 | * By default, Remix will handle hydrating your app on the client for you.
5 | * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
6 | * For more information, see https://remix.run/file-conventions/entry.client
7 | */
8 |
9 | import { HydratedRouter } from "react-router/dom";
10 | import { startTransition, StrictMode } from "react";
11 | import { hydrateRoot } from "react-dom/client";
12 |
13 | startTransition(() => {
14 | hydrateRoot(
15 | document,
16 |
17 |
18 |
19 | );
20 | });
21 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/entry.server.remix.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | /**
4 | * By default, Remix will handle generating the HTTP Response for you.
5 | * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
6 | * For more information, see https://remix.run/file-conventions/entry.server
7 | */
8 |
9 | import { PassThrough } from 'node:stream';
10 |
11 | import type { AppLoadContext, EntryContext } from '@remix-run/node';
12 | import { createReadableStreamFromReadable } from '@remix-run/node';
13 | import { RemixServer } from '@remix-run/react';
14 | import { isbot } from 'isbot';
15 | import { renderToPipeableStream } from 'react-dom/server';
16 |
17 | const ABORT_DELAY = 5_000;
18 |
19 | export default function handleRequest(
20 | request: Request,
21 | responseStatusCode: number,
22 | responseHeaders: Headers,
23 | remixContext: EntryContext,
24 | // This is ignored so we can keep it in the template for visibility. Feel
25 | // free to delete this parameter in your app if you're not using it!
26 | // eslint-disable-next-line @typescript-eslint/no-unused-vars
27 | loadContext: AppLoadContext
28 | ) {
29 | return isbot(request.headers.get('user-agent') || '')
30 | ? handleBotRequest(
31 | request,
32 | responseStatusCode,
33 | responseHeaders,
34 | remixContext
35 | )
36 | : handleBrowserRequest(
37 | request,
38 | responseStatusCode,
39 | responseHeaders,
40 | remixContext
41 | );
42 | }
43 |
44 | function handleBotRequest(
45 | request: Request,
46 | responseStatusCode: number,
47 | responseHeaders: Headers,
48 | remixContext: EntryContext
49 | ) {
50 | return new Promise((resolve, reject) => {
51 | let shellRendered = false;
52 | const { pipe, abort } = renderToPipeableStream(
53 | ,
58 | {
59 | onAllReady() {
60 | shellRendered = true;
61 | const body = new PassThrough();
62 | const stream = createReadableStreamFromReadable(body);
63 |
64 | responseHeaders.set('Content-Type', 'text/html');
65 |
66 | resolve(
67 | new Response(stream, {
68 | headers: responseHeaders,
69 | status: responseStatusCode,
70 | })
71 | );
72 |
73 | pipe(body);
74 | },
75 | onShellError(error: unknown) {
76 | reject(error);
77 | },
78 | onError(error: unknown) {
79 | responseStatusCode = 500;
80 | // Log streaming rendering errors from inside the shell. Don't log
81 | // errors encountered during initial shell rendering since they'll
82 | // reject and get logged in handleDocumentRequest.
83 | if (shellRendered) {
84 | console.error(error);
85 | }
86 | },
87 | }
88 | );
89 |
90 | setTimeout(abort, ABORT_DELAY);
91 | });
92 | }
93 |
94 | function handleBrowserRequest(
95 | request: Request,
96 | responseStatusCode: number,
97 | responseHeaders: Headers,
98 | remixContext: EntryContext
99 | ) {
100 | return new Promise((resolve, reject) => {
101 | let shellRendered = false;
102 | const { pipe, abort } = renderToPipeableStream(
103 | ,
108 | {
109 | onShellReady() {
110 | shellRendered = true;
111 | const body = new PassThrough();
112 | const stream = createReadableStreamFromReadable(body);
113 |
114 | responseHeaders.set('Content-Type', 'text/html');
115 |
116 | resolve(
117 | new Response(stream, {
118 | headers: responseHeaders,
119 | status: responseStatusCode,
120 | })
121 | );
122 |
123 | pipe(body);
124 | },
125 | onShellError(error: unknown) {
126 | reject(error);
127 | },
128 | onError(error: unknown) {
129 | responseStatusCode = 500;
130 | // Log streaming rendering errors from inside the shell. Don't log
131 | // errors encountered during initial shell rendering since they'll
132 | // reject and get logged in handleDocumentRequest.
133 | if (shellRendered) {
134 | console.error(error);
135 | }
136 | },
137 | }
138 | );
139 |
140 | setTimeout(abort, ABORT_DELAY);
141 | });
142 | }
143 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/entry.server.rr7.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | /**
4 | * By default, Remix will handle generating the HTTP Response for you.
5 | * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
6 | * For more information, see https://remix.run/file-conventions/entry.server
7 | */
8 |
9 | import { PassThrough } from 'node:stream';
10 |
11 | import type { AppLoadContext, EntryContext } from 'react-router';
12 | import { createReadableStreamFromReadable } from '@react-router/node';
13 | import { ServerRouter } from 'react-router';
14 | import { isbot } from 'isbot';
15 | import { renderToPipeableStream } from 'react-dom/server';
16 |
17 | const ABORT_DELAY = 5_000;
18 |
19 | export default function handleRequest(
20 | request: Request,
21 | responseStatusCode: number,
22 | responseHeaders: Headers,
23 | reactRouterContext: EntryContext,
24 | // This is ignored so we can keep it in the template for visibility. Feel
25 | // free to delete this parameter in your app if you're not using it!
26 | // eslint-disable-next-line @typescript-eslint/no-unused-vars
27 | loadContext: AppLoadContext
28 | ) {
29 | return isbot(request.headers.get('user-agent') || '')
30 | ? handleBotRequest(
31 | request,
32 | responseStatusCode,
33 | responseHeaders,
34 | reactRouterContext
35 | )
36 | : handleBrowserRequest(
37 | request,
38 | responseStatusCode,
39 | responseHeaders,
40 | reactRouterContext
41 | );
42 | }
43 |
44 | function handleBotRequest(
45 | request: Request,
46 | responseStatusCode: number,
47 | responseHeaders: Headers,
48 | reactRouterContext: EntryContext
49 | ) {
50 | return new Promise((resolve, reject) => {
51 | let shellRendered = false;
52 | const { pipe, abort } = renderToPipeableStream(
53 | ,
58 | {
59 | onAllReady() {
60 | shellRendered = true;
61 | const body = new PassThrough();
62 | const stream = createReadableStreamFromReadable(body);
63 |
64 | responseHeaders.set('Content-Type', 'text/html');
65 |
66 | resolve(
67 | new Response(stream, {
68 | headers: responseHeaders,
69 | status: responseStatusCode,
70 | })
71 | );
72 |
73 | pipe(body);
74 | },
75 | onShellError(error: unknown) {
76 | reject(error);
77 | },
78 | onError(error: unknown) {
79 | responseStatusCode = 500;
80 | // Log streaming rendering errors from inside the shell. Don't log
81 | // errors encountered during initial shell rendering since they'll
82 | // reject and get logged in handleDocumentRequest.
83 | if (shellRendered) {
84 | console.error(error);
85 | }
86 | },
87 | }
88 | );
89 |
90 | setTimeout(abort, ABORT_DELAY);
91 | });
92 | }
93 |
94 | function handleBrowserRequest(
95 | request: Request,
96 | responseStatusCode: number,
97 | responseHeaders: Headers,
98 | reactRouterContext: EntryContext
99 | ) {
100 | return new Promise((resolve, reject) => {
101 | let shellRendered = false;
102 | const { pipe, abort } = renderToPipeableStream(
103 | ,
108 | {
109 | onShellReady() {
110 | shellRendered = true;
111 | const body = new PassThrough();
112 | const stream = createReadableStreamFromReadable(body);
113 |
114 | responseHeaders.set('Content-Type', 'text/html');
115 |
116 | resolve(
117 | new Response(stream, {
118 | headers: responseHeaders,
119 | status: responseStatusCode,
120 | })
121 | );
122 |
123 | pipe(body);
124 | },
125 | onShellError(error: unknown) {
126 | reject(error);
127 | },
128 | onError(error: unknown) {
129 | responseStatusCode = 500;
130 | // Log streaming rendering errors from inside the shell. Don't log
131 | // errors encountered during initial shell rendering since they'll
132 | // reject and get logged in handleDocumentRequest.
133 | if (shellRendered) {
134 | console.error(error);
135 | }
136 | },
137 | }
138 | );
139 |
140 | setTimeout(abort, ABORT_DELAY);
141 | });
142 | }
143 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/imports.remix.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | import { redirect } from '@remix-run/node';
4 | import type { AppLoadContext, EntryContext } from '@remix-run/cloudflare';
5 | import {
6 | createSession,
7 | createFileSessionStorage,
8 | createCookieSessionStorage,
9 | createRequestHandler as nodeCreateRequestHandler,
10 | type ActionFunctionArgs,
11 | writeReadableStreamToWritable,
12 | } from '@remix-run/node';
13 | import {
14 | json,
15 | type LoaderFunctionArgs,
16 | type HeadersFunction,
17 | type LinksFunction,
18 | type MetaFunction,
19 | } from '@remix-run/node';
20 | import { getDomainUrl } from '#app/utils/misc.tsx';
21 | import {
22 | Form,
23 | Link,
24 | Links,
25 | Meta,
26 | Outlet,
27 | Scripts,
28 | ScrollRestoration,
29 | useLoaderData,
30 | useMatches,
31 | useSubmit,
32 | } from '@remix-run/react';
33 | import { createRequestHandler } from '@remix-run/express';
34 | import { createRemixStub } from '@remix-run/testing';
35 | import { createRemixStub as aliasedRenamedImport } from '@remix-run/testing';
36 | import { useLocation, useNavigate, Route, Switch } from 'react-router-dom';
37 | import { flatRoutes } from "@remix-run/fs-routes";
38 | import type { RouteConfig } from "@remix-run/route-config";
39 | import { remixRoutesOptionAdapter } from '@remix-run/routes-option-adapter';
40 | const { createRoutesFromFolders } = require("@remix-run/v1-route-convention");
41 | import createRoutesFromFolders2 from "@remix-run/v1-route-convention";
42 |
43 | export const routes: RouteConfig = flatRoutes();
44 |
45 | export function loader() {
46 | createRemixStub();
47 | aliasedRenamedImport();
48 | return json({ message: 'hello' });
49 | }
50 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/imports.rr7.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | import { redirect } from 'react-router';
4 |
5 | import type { AppLoadContext, EntryContext } from 'react-router';
6 |
7 | import {
8 | createSession,
9 | createCookieSessionStorage,
10 | createRequestHandler as nodeCreateRequestHandler,
11 | type ActionFunctionArgs,
12 | } from 'react-router';
13 |
14 | import { createFileSessionStorage, writeReadableStreamToWritable } from '@react-router/node';
15 |
16 | import {
17 | json,
18 | type LoaderFunctionArgs,
19 | type HeadersFunction,
20 | type LinksFunction,
21 | type MetaFunction,
22 | } from 'react-router';
23 |
24 | import { getDomainUrl } from '#app/utils/misc.tsx';
25 |
26 | import {
27 | Form,
28 | Link,
29 | Links,
30 | Meta,
31 | Outlet,
32 | Scripts,
33 | ScrollRestoration,
34 | useLoaderData,
35 | useMatches,
36 | useSubmit,
37 | } from 'react-router';
38 |
39 | import { createRequestHandler } from '@react-router/express';
40 | import { createRoutesStub } from 'react-router';
41 | import { createRoutesStub as aliasedRenamedImport } from 'react-router';
42 | import { useLocation, useNavigate, Route, Switch } from 'react-router';
43 | import { flatRoutes } from '@react-router/fs-routes';
44 | import type { RouteConfig } from '@react-router/dev/routes';
45 | import { remixRoutesOptionAdapter } from '@react-router/remix-routes-option-adapter';
46 | const { createRoutesFromFolders } = require("@remix-run/v1-route-convention");
47 | import createRoutesFromFolders2 from "@remix-run/v1-route-convention";
48 |
49 | export const routes: RouteConfig = flatRoutes();
50 |
51 | export function loader() {
52 | createRoutesStub();
53 | aliasedRenamedImport();
54 | return json({ message: 'hello' });
55 | }
56 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/nochange.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 | // Taken from https://github.com/epicweb-dev/epic-stack/blob/main/tests/setup/custom-matchers.ts
3 | // Copyright (c) Kent C. Dodds
4 |
5 | import * as setCookieParser from 'set-cookie-parser'
6 | import { expect } from 'vitest'
7 | import { sessionKey } from '#app/utils/auth.server.ts'
8 | import { prisma } from '#app/utils/db.server.ts'
9 | import { authSessionStorage } from '#app/utils/session.server.ts'
10 | import {
11 | type ToastInput,
12 | toastSessionStorage,
13 | toastKey,
14 | } from '#app/utils/toast.server.ts'
15 | import { convertSetCookieToCookie } from '#tests/utils.ts'
16 |
17 | import '@testing-library/jest-dom/vitest'
18 |
19 | expect.extend({
20 | toHaveRedirect(response: unknown, redirectTo?: string) {
21 | if (!(response instanceof Response)) {
22 | throw new Error('toHaveRedirect must be called with a Response')
23 | }
24 | const location = response.headers.get('location')
25 | const redirectToSupplied = redirectTo !== undefined
26 | if (redirectToSupplied !== Boolean(location)) {
27 | return {
28 | pass: Boolean(location),
29 | message: () =>
30 | `Expected response to ${this.isNot ? 'not ' : ''}redirect${
31 | redirectToSupplied
32 | ? ` to ${this.utils.printExpected(redirectTo)}`
33 | : ''
34 | } but got ${
35 | location ? 'no redirect' : this.utils.printReceived(location)
36 | }`,
37 | }
38 | }
39 | const isRedirectStatusCode = response.status >= 300 && response.status < 400
40 | if (!isRedirectStatusCode) {
41 | return {
42 | pass: false,
43 | message: () =>
44 | `Expected redirect to ${
45 | this.isNot ? 'not ' : ''
46 | }be ${this.utils.printExpected(
47 | '>= 300 && < 400',
48 | )} but got ${this.utils.printReceived(response.status)}`,
49 | }
50 | }
51 |
52 | function toUrl(s?: string | null) {
53 | s ??= ''
54 | return s.startsWith('http')
55 | ? new URL(s)
56 | : new URL(s, 'https://example.com')
57 | }
58 |
59 | function urlsMatch(u1: URL, u2: URL) {
60 | const u1SP = new URL(u1).searchParams
61 | u1SP.sort()
62 | const u2SP = new URL(u2).searchParams
63 | u2SP.sort()
64 | return (
65 | u1.origin === u2.origin &&
66 | u1.pathname === u2.pathname &&
67 | u1SP.toString() === u2SP.toString() &&
68 | u1.hash === u2.hash
69 | )
70 | }
71 |
72 | return {
73 | pass:
74 | location == redirectTo || urlsMatch(toUrl(location), toUrl(redirectTo)),
75 | message: () =>
76 | `Expected response to ${
77 | this.isNot ? 'not ' : ''
78 | }redirect to ${this.utils.printExpected(
79 | redirectTo,
80 | )} but got ${this.utils.printReceived(location)}`,
81 | }
82 | },
83 | async toHaveSessionForUser(response: Response, userId: string) {
84 | const setCookies = response.headers.getSetCookie()
85 | const sessionSetCookie = setCookies.find(
86 | (c) => setCookieParser.parseString(c).name === 'en_session',
87 | )
88 |
89 | if (!sessionSetCookie) {
90 | return {
91 | pass: false,
92 | message: () =>
93 | `The en_session set-cookie header was${
94 | this.isNot ? '' : ' not'
95 | } defined`,
96 | }
97 | }
98 |
99 | const authSession = await authSessionStorage.getSession(
100 | convertSetCookieToCookie(sessionSetCookie),
101 | )
102 | const sessionValue = authSession.get(sessionKey)
103 |
104 | if (!sessionValue) {
105 | return {
106 | pass: false,
107 | message: () => `A session was${this.isNot ? '' : ' not'} set in cookie`,
108 | }
109 | }
110 |
111 | const session = await prisma.session.findUnique({
112 | select: { id: true },
113 | where: { userId, id: sessionValue },
114 | })
115 |
116 | return {
117 | pass: Boolean(session),
118 | message: () =>
119 | `A session was${
120 | this.isNot ? ' not' : ''
121 | } created in the database for ${userId}`,
122 | }
123 | },
124 | async toSendToast(response: Response, toast: ToastInput) {
125 | const setCookies = response.headers.getSetCookie()
126 | const toastSetCookie = setCookies.find(
127 | (c) => setCookieParser.parseString(c).name === 'en_toast',
128 | )
129 |
130 | if (!toastSetCookie) {
131 | return {
132 | pass: false,
133 | message: () =>
134 | `en_toast set-cookie header was${this.isNot ? '' : ' not'} defined`,
135 | }
136 | }
137 |
138 | const toastSession = await toastSessionStorage.getSession(
139 | convertSetCookieToCookie(toastSetCookie),
140 | )
141 | const toastValue = toastSession.get(toastKey)
142 |
143 | if (!toastValue) {
144 | return {
145 | pass: false,
146 | message: () => `toast was${this.isNot ? '' : ' not'} set in session`,
147 | }
148 | }
149 |
150 | const pass = this.equals(toastValue, toast)
151 |
152 | const diff = pass ? null : `\n${this.utils.diff(toastValue, toast)}`
153 |
154 | return {
155 | pass,
156 | message: () =>
157 | `toast in the response ${
158 | this.isNot ? 'does not match' : 'matches'
159 | } the expected toast${diff}`,
160 | }
161 | },
162 | })
163 |
164 | interface CustomMatchers {
165 | toHaveRedirect(redirectTo: string | null): R
166 | toHaveSessionForUser(userId: string): Promise
167 | toSendToast(toast: ToastInput): Promise
168 | }
169 |
170 | declare module 'vitest' {
171 | interface Assertion extends CustomMatchers {}
172 | interface AsymmetricMatchersContaining extends CustomMatchers {}
173 | }
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/package.nochange.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "sideEffects": false,
4 | "type": "module",
5 | "scripts": {
6 | "test": "vitest"
7 | },
8 | "dependencies": {
9 | "isbot": "^4.1.0",
10 | "react": "^18.2.0",
11 | "react-dom": "^18.2.0"
12 | },
13 | "devDependencies": {
14 | "@remix-run/eslint-config": "*",
15 | "@types/react": "^18.2.20",
16 | "@types/react-dom": "^18.2.7",
17 | "@typescript-eslint/eslint-plugin": "^6.7.4",
18 | "@typescript-eslint/parser": "^6.7.4",
19 | "autoprefixer": "^10.4.19",
20 | "eslint": "^8.38.0",
21 | "eslint-import-resolver-typescript": "^3.6.1",
22 | "eslint-plugin-import": "^2.28.1",
23 | "eslint-plugin-jsx-a11y": "^6.7.1",
24 | "eslint-plugin-react": "^7.33.2",
25 | "eslint-plugin-react-hooks": "^4.6.0",
26 | "postcss": "^8.4.38",
27 | "tailwindcss": "^3.4.4",
28 | "typescript": "^5.1.6",
29 | "vite": "^5.1.0",
30 | "vite-tsconfig-paths": "^4.2.1"
31 | },
32 | "engines": {
33 | "node": ">=20.0.0"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/package.remix.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "sideEffects": false,
4 | "type": "module",
5 | "scripts": {
6 | "build": "remix vite:build",
7 | "dev": "remix vite:dev",
8 | "lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .",
9 | "start": "remix-serve ./build/server/index.js",
10 | "typecheck": "tsc"
11 | },
12 | "dependencies": {
13 | "@remix-run/node": "*",
14 | "@remix-run/react": "^2.14.0",
15 | "@remix-run/serve": "workspace:*",
16 | "@remix-run/express": "^2.14.0",
17 | "@remix-run/router": "^2.14.0",
18 | "isbot": "^4.1.0",
19 | "react": "^18.2.0",
20 | "react-dom": "^18.2.0",
21 | "react-router-dom": "^6.2.1"
22 | },
23 | "devDependencies": {
24 | "@remix-run/eslint-config": "*",
25 | "@remix-run/dev": "*",
26 | "@remix-run/fs-routes": "^2.14.0",
27 | "@remix-run/route-config": "^2.14.0",
28 | "@remix-run/routes-option-adapter": "2.14.0",
29 | "@types/react": "^18.2.20",
30 | "@types/react-dom": "^18.2.7",
31 | "@typescript-eslint/eslint-plugin": "^6.7.4",
32 | "@typescript-eslint/parser": "^6.7.4",
33 | "autoprefixer": "^10.4.19",
34 | "eslint": "^8.38.0",
35 | "eslint-import-resolver-typescript": "^3.6.1",
36 | "eslint-plugin-import": "^2.28.1",
37 | "eslint-plugin-jsx-a11y": "^6.7.1",
38 | "eslint-plugin-react": "^7.33.2",
39 | "eslint-plugin-react-hooks": "^4.6.0",
40 | "postcss": "^8.4.38",
41 | "tailwindcss": "^3.4.4",
42 | "typescript": "^5.1.6",
43 | "vite": "^5.1.0",
44 | "vite-tsconfig-paths": "^4.2.1"
45 | },
46 | "engines": {
47 | "node": ">=20.0.0"
48 | }
49 | }
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/package.rr7.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "sideEffects": false,
4 | "type": "module",
5 | "scripts": {
6 | "build": "react-router build",
7 | "dev": "react-router dev",
8 | "lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .",
9 | "start": "react-router-serve ./build/server/index.js",
10 | "typecheck": "react-router typegen && tsc"
11 | },
12 | "dependencies": {
13 | "@react-router/express": "^7.0.0",
14 | "@react-router/node": "*",
15 | "@react-router/serve": "workspace:*",
16 | "isbot": "^4.1.0",
17 | "react": "^18.2.0",
18 | "react-dom": "^18.2.0",
19 | "react-router": "^7.0.0"
20 | },
21 | "devDependencies": {
22 | "@react-router/dev": "*",
23 | "@react-router/fs-routes": "^7.0.0",
24 | "@react-router/remix-routes-option-adapter": "^7.0.0",
25 | "@remix-run/eslint-config": "*",
26 | "@types/react": "^18.2.20",
27 | "@types/react-dom": "^18.2.7",
28 | "@typescript-eslint/eslint-plugin": "^6.7.4",
29 | "@typescript-eslint/parser": "^6.7.4",
30 | "autoprefixer": "^10.4.19",
31 | "eslint": "^8.38.0",
32 | "eslint-import-resolver-typescript": "^3.6.1",
33 | "eslint-plugin-import": "^2.28.1",
34 | "eslint-plugin-jsx-a11y": "^6.7.1",
35 | "eslint-plugin-react": "^7.33.2",
36 | "eslint-plugin-react-hooks": "^4.6.0",
37 | "postcss": "^8.4.38",
38 | "tailwindcss": "^3.4.4",
39 | "typescript": "^5.1.6",
40 | "vite": "^5.1.0",
41 | "vite-tsconfig-paths": "^4.2.1"
42 | },
43 | "engines": {
44 | "node": ">=20.0.0"
45 | }
46 | }
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/server.remix.ts:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | import { createRequestHandler } from '@remix-run/express';
4 | import express from 'express';
5 |
6 | const viteDevServer =
7 | process.env.NODE_ENV === 'production'
8 | ? undefined
9 | : await import('vite').then((vite) =>
10 | vite.createServer({
11 | server: { middlewareMode: true },
12 | })
13 | );
14 |
15 | const app = express();
16 |
17 | // handle asset requests
18 | if (viteDevServer) {
19 | app.use(viteDevServer.middlewares);
20 | } else {
21 | app.use(
22 | '/assets',
23 | express.static('build/client/assets', {
24 | immutable: true,
25 | maxAge: '1y',
26 | })
27 | );
28 | }
29 | app.use(express.static('build/client', { maxAge: '1h' }));
30 |
31 | // handle SSR requests
32 | app.all(
33 | '*',
34 | createRequestHandler({
35 | build: viteDevServer
36 | ? () => viteDevServer.ssrLoadModule('virtual:remix/server-build')
37 | : await import('./build/server/index.js'),
38 | })
39 | );
40 |
41 | const port = 3000;
42 | app.listen(port, () => console.log('http://localhost:' + port));
43 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/server.rr7.ts:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | import { createRequestHandler } from '@react-router/express';
4 | import express from 'express';
5 |
6 | const viteDevServer =
7 | process.env.NODE_ENV === 'production'
8 | ? undefined
9 | : await import('vite').then((vite) =>
10 | vite.createServer({
11 | server: { middlewareMode: true },
12 | })
13 | );
14 |
15 | const app = express();
16 |
17 | // handle asset requests
18 | if (viteDevServer) {
19 | app.use(viteDevServer.middlewares);
20 | } else {
21 | app.use(
22 | '/assets',
23 | express.static('build/client/assets', {
24 | immutable: true,
25 | maxAge: '1y',
26 | })
27 | );
28 | }
29 | app.use(express.static('build/client', { maxAge: '1h' }));
30 |
31 | // handle SSR requests
32 | app.all(
33 | '*',
34 | createRequestHandler({
35 | build: viteDevServer
36 | ? () => viteDevServer.ssrLoadModule('virtual:react-router/server-build')
37 | : await import('./build/server/index.js'),
38 | })
39 | );
40 |
41 | const port = 3000;
42 | app.listen(port, () => console.log('http://localhost:' + port));
43 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/testing.remix.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | // Taken from epic-stack (c) Kent C. Dodds
4 | // https://github.com/epicweb-dev/epic-stack/blob/6c7eb1d529a15e0d32c49b310e8b0a7711aa01f9/app/routes/users%2B/%24username.test.tsx
5 |
6 | /**
7 | * @vitest-environment jsdom
8 | */
9 | import { faker } from '@faker-js/faker';
10 | import { createRemixStub } from '@remix-run/testing';
11 | import { render, screen } from '@testing-library/react';
12 | import setCookieParser from 'set-cookie-parser';
13 | import { test } from 'vitest';
14 | import { loader as rootLoader } from '#app/root.tsx';
15 | import {
16 | getSessionExpirationDate,
17 | sessionKey,
18 | } from '#app/utils/auth.server.ts';
19 | import { prisma } from '#app/utils/db.server.ts';
20 | import { authSessionStorage } from '#app/utils/session.server.ts';
21 | import { createUser, getUserImages } from '#tests/db-utils.ts';
22 | import { default as UsernameRoute, loader } from './$username.tsx';
23 | import { vi } from 'vitest';
24 | import type * as remix from '@remix-run/react';
25 |
26 | test('The user profile when not logged in as self', async () => {
27 | vi.mock('@remix-run/react', async () => {
28 | const remixActual = await import('@remix-run/react');
29 | return remixActual;
30 | });
31 | vi.mock('@remix-run/node', async () => {
32 | const remixActual = await import('@remix-run/node');
33 | return remixActual;
34 | });
35 | const userImages = await getUserImages();
36 | const userImage =
37 | userImages[faker.number.int({ min: 0, max: userImages.length - 1 })];
38 | const user = await prisma.user.create({
39 | select: { id: true, username: true, name: true },
40 | data: { ...createUser(), image: { create: userImage } },
41 | });
42 | const App = createRemixStub([
43 | {
44 | path: '/users/:username',
45 | Component: UsernameRoute,
46 | loader,
47 | },
48 | ]);
49 |
50 | const routeUrl = `/users/${user.username}`;
51 | render();
52 |
53 | await screen.findByRole('heading', { level: 1, name: user.name! });
54 | await screen.findByRole('img', { name: user.name! });
55 | await screen.findByRole('link', { name: `${user.name}'s notes` });
56 | });
57 |
58 | test('The user profile when logged in as self', async () => {
59 | const userImages = await getUserImages();
60 | const userImage =
61 | userImages[faker.number.int({ min: 0, max: userImages.length - 1 })];
62 | const user = await prisma.user.create({
63 | select: { id: true, username: true, name: true },
64 | data: { ...createUser(), image: { create: userImage } },
65 | });
66 | const session = await prisma.session.create({
67 | select: { id: true },
68 | data: {
69 | expirationDate: getSessionExpirationDate(),
70 | userId: user.id,
71 | },
72 | });
73 |
74 | const authSession = await authSessionStorage.getSession();
75 | authSession.set(sessionKey, session.id);
76 | const setCookieHeader = await authSessionStorage.commitSession(authSession);
77 | const parsedCookie = setCookieParser.parseString(setCookieHeader);
78 | const cookieHeader = new URLSearchParams({
79 | [parsedCookie.name]: parsedCookie.value,
80 | }).toString();
81 |
82 | const App = createRemixStub([
83 | {
84 | id: 'root',
85 | path: '/',
86 | loader: async (args) => {
87 | // add the cookie header to the request
88 | args.request.headers.set('cookie', cookieHeader);
89 | return rootLoader(args);
90 | },
91 | children: [
92 | {
93 | path: 'users/:username',
94 | Component: UsernameRoute,
95 | loader: async (args) => {
96 | // add the cookie header to the request
97 | args.request.headers.set('cookie', cookieHeader);
98 | return loader(args);
99 | },
100 | },
101 | ],
102 | },
103 | ]);
104 |
105 | const routeUrl = `/users/${user.username}`;
106 | await render();
107 |
108 | await screen.findByRole('heading', { level: 1, name: user.name! });
109 | await screen.findByRole('img', { name: user.name! });
110 | await screen.findByRole('button', { name: /logout/i });
111 | await screen.findByRole('link', { name: /my notes/i });
112 | await screen.findByRole('link', { name: /edit profile/i });
113 | });
114 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/testing.rr7.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | // Taken from epic-stack (c) Kent C. Dodds
4 | // https://github.com/epicweb-dev/epic-stack/blob/6c7eb1d529a15e0d32c49b310e8b0a7711aa01f9/app/routes/users%2B/%24username.test.tsx
5 |
6 | /**
7 | * @vitest-environment jsdom
8 | */
9 | import { faker } from '@faker-js/faker';
10 | import { createRoutesStub } from 'react-router';
11 | import { render, screen } from '@testing-library/react';
12 | import setCookieParser from 'set-cookie-parser';
13 | import { test } from 'vitest';
14 | import { loader as rootLoader } from '#app/root.tsx';
15 | import {
16 | getSessionExpirationDate,
17 | sessionKey,
18 | } from '#app/utils/auth.server.ts';
19 | import { prisma } from '#app/utils/db.server.ts';
20 | import { authSessionStorage } from '#app/utils/session.server.ts';
21 | import { createUser, getUserImages } from '#tests/db-utils.ts';
22 | import { default as UsernameRoute, loader } from './$username.tsx';
23 | import { vi } from 'vitest';
24 | import type * as remix from 'react-router';
25 |
26 | test('The user profile when not logged in as self', async () => {
27 | vi.mock('react-router', async () => {
28 | const remixActual = await import('react-router');
29 | return remixActual;
30 | });
31 | vi.mock('@react-router/node', async () => {
32 | const remixActual = await import('@react-router/node');
33 | return remixActual;
34 | });
35 | const userImages = await getUserImages();
36 | const userImage =
37 | userImages[faker.number.int({ min: 0, max: userImages.length - 1 })];
38 | const user = await prisma.user.create({
39 | select: { id: true, username: true, name: true },
40 | data: { ...createUser(), image: { create: userImage } },
41 | });
42 | const App = createRoutesStub([
43 | {
44 | path: '/users/:username',
45 | Component: UsernameRoute,
46 | loader,
47 | },
48 | ]);
49 |
50 | const routeUrl = `/users/${user.username}`;
51 | render();
52 |
53 | await screen.findByRole('heading', { level: 1, name: user.name! });
54 | await screen.findByRole('img', { name: user.name! });
55 | await screen.findByRole('link', { name: `${user.name}'s notes` });
56 | });
57 |
58 | test('The user profile when logged in as self', async () => {
59 | const userImages = await getUserImages();
60 | const userImage =
61 | userImages[faker.number.int({ min: 0, max: userImages.length - 1 })];
62 | const user = await prisma.user.create({
63 | select: { id: true, username: true, name: true },
64 | data: { ...createUser(), image: { create: userImage } },
65 | });
66 | const session = await prisma.session.create({
67 | select: { id: true },
68 | data: {
69 | expirationDate: getSessionExpirationDate(),
70 | userId: user.id,
71 | },
72 | });
73 |
74 | const authSession = await authSessionStorage.getSession();
75 | authSession.set(sessionKey, session.id);
76 | const setCookieHeader = await authSessionStorage.commitSession(authSession);
77 | const parsedCookie = setCookieParser.parseString(setCookieHeader);
78 | const cookieHeader = new URLSearchParams({
79 | [parsedCookie.name]: parsedCookie.value,
80 | }).toString();
81 |
82 | const App = createRoutesStub([
83 | {
84 | id: 'root',
85 | path: '/',
86 | loader: async (args) => {
87 | // add the cookie header to the request
88 | args.request.headers.set('cookie', cookieHeader);
89 | return rootLoader(args);
90 | },
91 | children: [
92 | {
93 | path: 'users/:username',
94 | Component: UsernameRoute,
95 | loader: async (args) => {
96 | // add the cookie header to the request
97 | args.request.headers.set('cookie', cookieHeader);
98 | return loader(args);
99 | },
100 | },
101 | ],
102 | },
103 | ]);
104 |
105 | const routeUrl = `/users/${user.username}`;
106 | await render();
107 |
108 | await screen.findByRole('heading', { level: 1, name: user.name! });
109 | await screen.findByRole('img', { name: user.name! });
110 | await screen.findByRole('button', { name: /logout/i });
111 | await screen.findByRole('link', { name: /my notes/i });
112 | await screen.findByRole('link', { name: /edit profile/i });
113 | });
114 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/tsconfig.remix.json:
--------------------------------------------------------------------------------
1 | {
2 | "include": [
3 | "**/*.ts",
4 | "**/*.tsx",
5 | "**/.server/**/*.ts",
6 | "**/.server/**/*.tsx",
7 | "**/.client/**/*.ts",
8 | "**/.client/**/*.tsx"
9 | ],
10 | "compilerOptions": {
11 | "lib": ["DOM", "DOM.Iterable", "ES2022"],
12 | "types": ["@remix-run/node", "vite/client"],
13 | "isolatedModules": true,
14 | "esModuleInterop": true,
15 | "jsx": "react-jsx",
16 | "module": "ESNext",
17 | "moduleResolution": "Bundler",
18 | "resolveJsonModule": true,
19 | "target": "ES2022",
20 | "strict": true,
21 | "allowJs": true,
22 | "skipLibCheck": true,
23 | "forceConsistentCasingInFileNames": true,
24 | "baseUrl": ".",
25 | "paths": {
26 | "~/*": ["./app/*"]
27 | },
28 | "noEmit": true
29 | }
30 | }
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/tsconfig.rr7.json:
--------------------------------------------------------------------------------
1 | {
2 | "include": [
3 | "**/*.ts",
4 | "**/*.tsx",
5 | "**/.server/**/*.ts",
6 | "**/.server/**/*.tsx",
7 | "**/.client/**/*.ts",
8 | "**/.client/**/*.tsx"
9 | ],
10 | "compilerOptions": {
11 | "lib": [
12 | "DOM",
13 | "DOM.Iterable",
14 | "ES2022"
15 | ],
16 | "types": [
17 | "@react-router/node",
18 | "vite/client"
19 | ],
20 | "isolatedModules": true,
21 | "esModuleInterop": true,
22 | "jsx": "react-jsx",
23 | "module": "ESNext",
24 | "moduleResolution": "Bundler",
25 | "resolveJsonModule": true,
26 | "target": "ES2022",
27 | "strict": true,
28 | "allowJs": true,
29 | "skipLibCheck": true,
30 | "forceConsistentCasingInFileNames": true,
31 | "baseUrl": ".",
32 | "paths": {
33 | "~/*": [
34 | "./app/*"
35 | ]
36 | },
37 | "noEmit": true
38 | }
39 | }
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/vite.config.remix.ts:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | import { vitePlugin as remix } from '@remix-run/dev';
4 | import { vitePlugin } from '@remix-run/dev';
5 | import { defineConfig } from 'vite';
6 | import tsconfigPaths from 'vite-tsconfig-paths';
7 |
8 | const myRemix = remix({});
9 |
10 | export default defineConfig({
11 | plugins: [remix(), vitePlugin(), myRemix, tsconfigPaths()],
12 | });
13 |
14 | export default defineConfig({
15 | plugins: [
16 | remix({
17 | future: {
18 | v3_fetcherPersist: true,
19 | v3_relativeSplatPath: true,
20 | v3_throwAbortReason: true,
21 | v3_singleFetch: true,
22 | v3_lazyRouteDiscovery: true,
23 | },
24 | }),
25 | tsconfigPaths(),
26 | ],
27 | });
28 |
29 | export default defineConfig({
30 | plugins: [
31 | remix({
32 | future: {
33 | v3_fetcherPersist: true,
34 | v3_relativeSplatPath: true,
35 | v3_throwAbortReason: true,
36 | v3_singleFetch: true,
37 | v3_lazyRouteDiscovery: true,
38 | },
39 | basename: '/test'
40 | }),
41 | tsconfigPaths(),
42 | ],
43 | });
44 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/__testfixtures__/vite.config.rr7.ts:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | import { reactRouter } from '@react-router/dev/vite';
4 | import { reactRouter } from '@react-router/dev/vite';
5 | import { defineConfig } from 'vite';
6 | import tsconfigPaths from 'vite-tsconfig-paths';
7 |
8 | const myRemix = reactRouter({});
9 |
10 | export default defineConfig({
11 | plugins: [reactRouter(), reactRouter(), myRemix, tsconfigPaths()],
12 | });
13 |
14 | export default defineConfig({
15 | plugins: [
16 | reactRouter({
17 | future: {
18 | v3_fetcherPersist: true,
19 | v3_relativeSplatPath: true,
20 | v3_throwAbortReason: true,
21 | v3_singleFetch: true,
22 | v3_lazyRouteDiscovery: true,
23 | },
24 | }),
25 | tsconfigPaths(),
26 | ],
27 | });
28 |
29 | export default defineConfig({
30 | plugins: [
31 | reactRouter({
32 | future: {
33 | v3_fetcherPersist: true,
34 | v3_relativeSplatPath: true,
35 | v3_throwAbortReason: true,
36 | v3_singleFetch: true,
37 | v3_lazyRouteDiscovery: true,
38 | },
39 | basename: '/test'
40 | }),
41 | tsconfigPaths(),
42 | ],
43 | });
44 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "remix-imports-to-react-router",
3 | "license": "MIT",
4 | "devDependencies": {
5 | "@codemod.com/codemod-utils": "1.0.0",
6 | "@types/jscodeshift": "catalog:",
7 | "@types/node": "22.9.0",
8 | "esbuild": "^0.24.0",
9 | "jscodeshift": "catalog:",
10 | "typescript": "^5.6.3",
11 | "vitest": "^2.1.4"
12 | },
13 | "main": "./dist/index.cjs",
14 | "scripts": {
15 | "test": "vitest run",
16 | "test:watch": "vitest watch",
17 | "build": "esbuild src/index.ts --outdir=dist --format=cjs --bundle --out-extension:.js=.cjs",
18 | "publish": "codemod login && codemod publish"
19 | },
20 | "files": [
21 | "README.md",
22 | ".codemodrc.json",
23 | "/dist/index.cjs"
24 | ],
25 | "type": "module",
26 | "dependencies": {
27 | "json5": "^2.2.3"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/config.ts:
--------------------------------------------------------------------------------
1 | import type { PackageChange } from './types.js';
2 |
3 | export const PACKAGE_CHANGES: Record = {
4 | '^@remix-run/react$': {
5 | source: 'react-router',
6 | imports: {
7 | RemixBrowser: {
8 | name: 'HydratedRouter',
9 | source: 'react-router/dom',
10 | },
11 | RemixServer: { name: 'ServerRouter' },
12 | },
13 | packageRemoved: true,
14 | },
15 | '^@remix-run/testing$': {
16 | source: 'react-router',
17 | imports: {
18 | createRemixStub: { name: 'createRoutesStub' },
19 | },
20 | packageRemoved: true,
21 | },
22 | '^@remix-run/server-runtime$': {
23 | source: 'react-router',
24 | packageRemoved: true,
25 | },
26 | '^@remix-run/router$': {
27 | source: 'react-router',
28 | packageRemoved: true,
29 | },
30 | '^@remix-run/dev$': {
31 | source: '@react-router/dev',
32 | imports: {
33 | vitePlugin: {
34 | name: 'reactRouter',
35 | source: '@react-router/dev/vite',
36 | removeAlias: true,
37 | },
38 | },
39 | },
40 | '^@remix-run/route-config$': {
41 | source: '@react-router/dev/routes',
42 | packageRemoved: true,
43 | },
44 | '^@remix-run/routes-option-adapter$': {
45 | source: '@react-router/remix-routes-option-adapter',
46 | },
47 | '^@remix-run/cloudflare$': {
48 | source: 'react-router',
49 | imports: {
50 | createWorkersKVSessionStorage: { source: '@react-router/cloudflare' },
51 | createPagesFunctionHandlerParams: { source: '@react-router/cloudflare' },
52 | GetLoadContextFunction: { source: '@react-router/cloudflare' },
53 | RequestHandler: { source: '@react-router/cloudflare' },
54 | createPagesFunctionHandler: { source: '@react-router/cloudflare' },
55 | createRequestHandler: { source: '@react-router/cloudflare' },
56 | },
57 | packageSource: '@react-router/cloudflare',
58 | },
59 | '^@remix-run/node$': {
60 | source: 'react-router',
61 | imports: {
62 | createFileSessionStorage: { source: '@react-router/node' },
63 | createReadableStreamFromReadable: { source: '@react-router/node' },
64 | readableStreamToString: { source: '@react-router/node' },
65 | writeAsyncIterableToWritable: { source: '@react-router/node' },
66 | writeReadableStreamToWritable: { source: '@react-router/node' },
67 | },
68 | packageSource: '@react-router/node',
69 | },
70 | '^@remix-run/architect$': {
71 | source: 'react-router',
72 | imports: {
73 | createFileSessionStorage: { source: '@react-router/architect' },
74 | createArcTableSessionStorage: { source: '@react-router/architect' },
75 | GetLoadContextFunction: { source: '@react-router/architect' },
76 | RequestHandler: { source: '@react-router/architect' },
77 | createRequestHandler: { source: '@react-router/architect' },
78 | },
79 | packageSource: '@react-router/architect',
80 | },
81 | '^@remix-run/(?!eslint-config|v1-route-convention)(.*)$': {
82 | source: '@react-router/$1',
83 | },
84 | '^react-router-dom$': {
85 | source: 'react-router',
86 | packageRemoved: true,
87 | },
88 | };
89 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/index.ts:
--------------------------------------------------------------------------------
1 | import type { API, FileInfo, JSCodeshift } from 'jscodeshift';
2 | import detectLineTerminator from './utils/line-terminator.js';
3 | import detectQuoteStyle from './utils/quote-style.js';
4 | import { transformPackageJson } from './transformers/package-json.js';
5 | import { transformImports } from './transformers/imports.js';
6 | import { transformRemixNames } from './transformers/rename-remix.js';
7 | import { transformRenameServerBuild } from './transformers/rename-server-build.js';
8 | import { transformTsconfig } from './transformers/tsconfig.js';
9 | import { transformFunctionParams } from './transformers/function-params.js';
10 |
11 | export default function transformer(file: FileInfo, api: API) {
12 | // Automates the manual steps from the Remix to React Router upgrade guide
13 | // https://github.com/remix-run/react-router/blob/dev/docs/upgrading/remix.md
14 |
15 | // Step 2 - Update dependencies in package.json
16 | // Step 3 - Change scripts in package.json
17 | if (file.path.endsWith('package.json')) {
18 | return transformPackageJson(file);
19 | }
20 |
21 | // Step X - Update compilerOptions.types in tsconfig.json
22 | if (
23 | file.path.endsWith('tsconfig.json') ||
24 | file.path.endsWith('tsconfig.base.json')
25 | ) {
26 | return transformTsconfig(file);
27 | }
28 |
29 | const j: JSCodeshift = api.jscodeshift;
30 | const root = j(file.source);
31 |
32 | // Try to detect the original quoting and line terminator before changes are made
33 | const quote = detectQuoteStyle(j, root) || 'single';
34 | const lineTerminator = detectLineTerminator(file.source);
35 |
36 | // Step 2 - Update dependencies in code
37 | // Step 4 - Rename plugin in vite.config
38 | // Step 6 - Rename components in entry files
39 | let dirtyFlag = transformImports(j, root);
40 |
41 | // Step X - Update vi.mock("@remix-run/react", () => ...) and import("@remix-run/react")
42 | dirtyFlag = transformFunctionParams(j, root) || dirtyFlag;
43 |
44 | // Step X - Rename virtual:remix/server-build in server files
45 | dirtyFlag = transformRenameServerBuild(j, root) || dirtyFlag;
46 |
47 | // Step X - Rename instances of remix to reactRouter in server entry files
48 | if (file.path.endsWith('entry.server.tsx')) {
49 | dirtyFlag = transformRemixNames(j, root) || dirtyFlag;
50 | }
51 |
52 | return dirtyFlag ? root.toSource({ quote, lineTerminator }) : undefined;
53 | }
54 |
55 | export const parser = 'tsx';
56 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/transformers/function-params.ts:
--------------------------------------------------------------------------------
1 | import type {
2 | JSCodeshift,
3 | Collection,
4 | ASTPath,
5 | CallExpression,
6 | } from 'jscodeshift';
7 | import { PACKAGE_CHANGES } from '../config.js';
8 |
9 | export function transformFunctionParams(
10 | j: JSCodeshift,
11 | root: Collection
12 | ): boolean {
13 | let dirtyFlag = false;
14 |
15 | // Helper function to replace package names
16 | const replacePackageName = (name: string): string => {
17 | for (const [pattern, { source, packageSource }] of Object.entries(
18 | PACKAGE_CHANGES
19 | )) {
20 | const regex = new RegExp(pattern);
21 | if (regex.test(name)) {
22 | dirtyFlag = true;
23 | return name.replace(regex, packageSource || source);
24 | }
25 | }
26 | return name;
27 | };
28 |
29 | // Transform the first string arg of specified functions
30 | const transformFunction = (path: ASTPath) => {
31 | const arg = path.node.arguments[0];
32 | if (arg && arg.type === 'StringLiteral') {
33 | arg.value = replacePackageName(arg.value);
34 | }
35 | };
36 |
37 | // Transform vi.mock calls
38 | root
39 | .find(j.CallExpression, {
40 | callee: { object: { name: 'vi' }, property: { name: 'mock' } },
41 | })
42 | .forEach(transformFunction);
43 |
44 | // Transform dynamic imports
45 | root
46 | .find(j.CallExpression, { callee: { type: 'Import' } })
47 | .forEach(transformFunction);
48 |
49 | return dirtyFlag;
50 | }
51 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/transformers/imports.ts:
--------------------------------------------------------------------------------
1 | import type { Collection, ImportDeclaration, JSCodeshift } from 'jscodeshift';
2 | import { PACKAGE_CHANGES } from '../config.js';
3 |
4 | export function transformImports(
5 | j: JSCodeshift,
6 | root: Collection
7 | ): boolean {
8 | let dirtyFlag = false;
9 |
10 | root.find(j.ImportDeclaration).forEach((path) => {
11 | const importDeclaration = path.node;
12 | const importPackage = importDeclaration.source.value;
13 |
14 | // Check if the import package matches any pattern in the PACKAGE_CHANGES
15 | for (const [pattern, { source, imports }] of Object.entries(
16 | PACKAGE_CHANGES
17 | )) {
18 | const regex = new RegExp(pattern);
19 | if (typeof importPackage === 'string' && regex.test(importPackage)) {
20 | const newpackage = importPackage.replace(regex, source);
21 | const newImports: Record = {};
22 |
23 | // Iterate over each specifier in the import declaration
24 | if (importDeclaration.specifiers) {
25 | importDeclaration.specifiers.forEach((specifier) => {
26 | if (
27 | imports &&
28 | j.ImportSpecifier.check(specifier) &&
29 | imports[specifier.imported.name]
30 | ) {
31 | const oldName = specifier.imported.name;
32 | const newImport = imports[oldName];
33 | const newName = newImport?.name || oldName;
34 | const newSource = newImport?.source || newpackage;
35 |
36 | // Create a new import declaration if it doesn't exist
37 | if (!newImports[newSource]) {
38 | newImports[newSource] = j.importDeclaration(
39 | [],
40 | j.stringLiteral(newSource)
41 | );
42 | }
43 |
44 | // Add the specifier to the new import declaration
45 | const newSpecifier = j.importSpecifier(
46 | j.identifier(newName),
47 | !newImport?.removeAlias &&
48 | specifier.local &&
49 | specifier.local.name &&
50 | specifier.local?.name !== specifier.imported.name
51 | ? j.identifier(specifier.local.name)
52 | : null
53 | );
54 |
55 | newImports[newSource].specifiers?.push(newSpecifier);
56 |
57 | // Update all occurrences of the old specifier in the code
58 | // keeping any existing aliases unless explicitly removed
59 | if (newName && oldName !== newName) {
60 | const hasAlias =
61 | specifier.local?.name &&
62 | specifier.local?.name !== specifier.imported.name;
63 | const aliasedOldName = hasAlias
64 | ? specifier.local?.name
65 | : oldName;
66 | const updatedName =
67 | (hasAlias &&
68 | !newImport?.removeAlias &&
69 | specifier.local?.name) ||
70 | newName;
71 | root
72 | .find(j.Identifier, { name: aliasedOldName })
73 | .forEach((idPath) => {
74 | idPath.node.name = updatedName;
75 | });
76 | }
77 |
78 | dirtyFlag = true;
79 | } else {
80 | // Create a new import declaration if it doesn't exist
81 | if (!newImports[newpackage]) {
82 | newImports[newpackage] = j.importDeclaration(
83 | [],
84 | j.stringLiteral(newpackage)
85 | );
86 | }
87 |
88 | // Add the specifier to the new import declaration
89 | newImports[newpackage].specifiers?.push(specifier);
90 | newImports[newpackage].importKind = importDeclaration.importKind;
91 |
92 | dirtyFlag = true;
93 | }
94 | });
95 | }
96 |
97 | // Preserve comments from the original import declaration
98 | const comments = importDeclaration.comments;
99 |
100 | // Replace the original import declaration with the new ones
101 | const newImportDeclarations = Object.values(newImports);
102 | if (
103 | comments &&
104 | newImportDeclarations.length > 0 &&
105 | newImportDeclarations[0]
106 | ) {
107 | newImportDeclarations[0].comments = comments;
108 | }
109 |
110 | path.replace(...newImportDeclarations);
111 |
112 | break;
113 | }
114 | }
115 | });
116 |
117 | return dirtyFlag;
118 | }
119 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/transformers/package-json.ts:
--------------------------------------------------------------------------------
1 | import type { FileInfo } from 'jscodeshift';
2 | import { PACKAGE_CHANGES } from '../config.js';
3 | import { updateDependencies, sortDependencies } from '../utils/dependencies.js';
4 |
5 | const SCRIPT_CHANGES: Record = {
6 | dev: 'react-router dev',
7 | build: 'react-router build',
8 | start: 'react-router-serve ./build/server/index.js',
9 | typecheck: 'react-router typegen && tsc',
10 | };
11 |
12 | const OLD_SCRIPTS: Record = {
13 | dev: 'remix vite:dev',
14 | build: 'remix vite:build',
15 | start: 'remix-serve ./build/server/index.js',
16 | typecheck: 'tsc',
17 | };
18 |
19 | export function transformPackageJson(file: FileInfo): string | undefined {
20 | let dirtyFlag = false;
21 |
22 | const packageJson = JSON.parse(file.source);
23 |
24 | // Step 2 - Update dependencies in package.json
25 | for (const [pattern, change] of Object.entries(PACKAGE_CHANGES)) {
26 | const regex = new RegExp(pattern);
27 |
28 | const dependencies = packageJson.dependencies;
29 | dirtyFlag = updateDependencies(dependencies, regex, change) || dirtyFlag;
30 |
31 | const devDependencies = packageJson.devDependencies;
32 | dirtyFlag = updateDependencies(devDependencies, regex, change) || dirtyFlag;
33 | }
34 |
35 | // Add "react-router" dependency if it doesn't exist and we've updated a remix dependency
36 | if (dirtyFlag && !packageJson.dependencies['react-router']) {
37 | packageJson.dependencies['react-router'] = '^7.0.0';
38 | dirtyFlag = true;
39 | }
40 |
41 | // Step 3 - Change scripts in package.json
42 | if (packageJson.scripts) {
43 | for (const [script, newCommand] of Object.entries(SCRIPT_CHANGES)) {
44 | if (packageJson.scripts[script] === OLD_SCRIPTS[script]) {
45 | // When updating any typecheck script, make sure the package.json also has an
46 | // updated react-router "build" script so we don't modify non-remix package.json files.
47 | if (
48 | script === 'typecheck' &&
49 | packageJson.scripts['build'] !== SCRIPT_CHANGES['build']
50 | ) {
51 | continue;
52 | }
53 | packageJson.scripts[script] = newCommand;
54 | dirtyFlag = true;
55 | }
56 | }
57 | }
58 |
59 | // Before returning the updated package.json, sort the dependencies and devDependencies.
60 | packageJson.dependencies = sortDependencies(packageJson.dependencies);
61 | packageJson.devDependencies = sortDependencies(packageJson.devDependencies);
62 |
63 | return dirtyFlag ? JSON.stringify(packageJson, null, 2) : undefined;
64 | }
65 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/transformers/rename-remix.ts:
--------------------------------------------------------------------------------
1 | import type { Collection, JSCodeshift } from 'jscodeshift';
2 |
3 | export function transformRemixNames(j: JSCodeshift, root: Collection) {
4 | let dirtyFlag = false;
5 | root.find(j.Identifier, { name: 'remixContext' }).forEach((path) => {
6 | path.node.name = 'reactRouterContext';
7 | dirtyFlag = true;
8 | });
9 |
10 | return dirtyFlag;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/transformers/rename-server-build.ts:
--------------------------------------------------------------------------------
1 | import type { Collection, JSCodeshift } from 'jscodeshift';
2 |
3 | export function transformRenameServerBuild(
4 | j: JSCodeshift,
5 | root: Collection
6 | ) {
7 | let dirtyFlag = false;
8 |
9 | // Change the string "virtual:remix/server-build" to "virtual:react-router/server-build"
10 | root
11 | .find(j.StringLiteral, { value: 'virtual:remix/server-build' })
12 | .forEach((path) => {
13 | path.node.value = 'virtual:react-router/server-build';
14 | dirtyFlag = true;
15 | });
16 |
17 | return dirtyFlag;
18 | }
19 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/transformers/tsconfig.ts:
--------------------------------------------------------------------------------
1 | import type { FileInfo } from 'jscodeshift';
2 | import { PACKAGE_CHANGES } from '../config.js';
3 |
4 | export function transformTsconfig(file: FileInfo): string | undefined {
5 | let dirtyFlag = false;
6 |
7 | const tsconfigJson = JSON.parse(file.source);
8 |
9 | // Convert all compilerOptions.types string array values in tsconfig.json to new package names
10 | if (tsconfigJson.compilerOptions?.types) {
11 | tsconfigJson.compilerOptions.types = tsconfigJson.compilerOptions.types.map(
12 | (type: string) => {
13 | for (const [pattern, { source, packageSource }] of Object.entries(
14 | PACKAGE_CHANGES
15 | )) {
16 | const regex = new RegExp(pattern);
17 | if (regex.test(type)) {
18 | dirtyFlag = true;
19 | return type.replace(regex, packageSource || source);
20 | }
21 | }
22 | return type;
23 | }
24 | );
25 | }
26 |
27 | return dirtyFlag ? JSON.stringify(tsconfigJson, null, 2) : undefined;
28 | }
29 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/types.ts:
--------------------------------------------------------------------------------
1 | export type PackageChange = {
2 | source: string;
3 | imports?: Record<
4 | string,
5 | { name?: string; source?: string; removeAlias?: true }
6 | >;
7 | packageSource?: string;
8 | packageRemoved?: boolean;
9 | };
10 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/utils/dependencies.ts:
--------------------------------------------------------------------------------
1 | import { PackageChange } from '../types.js';
2 |
3 | export function sortDependencies(
4 | dependencies: Record
5 | ): Record {
6 | if (!dependencies) return dependencies;
7 | return Object.fromEntries(Object.entries(dependencies || {}).sort());
8 | }
9 |
10 | export function updateDependencies(
11 | dependencies: Record,
12 | regex: RegExp,
13 | packageChange: PackageChange
14 | ): boolean {
15 | let dirtyFlag = false;
16 | if (!dependencies) return dirtyFlag;
17 | for (const [oldPackage, version] of Object.entries(dependencies)) {
18 | if (regex.test(oldPackage)) {
19 | if (!packageChange.packageRemoved) {
20 | const newPackageName = oldPackage.replace(
21 | regex,
22 | packageChange.packageSource || packageChange.source
23 | );
24 | // Set the version to ^7.0.0 if the current version is semver compatible
25 | if (/^\^?\d+\.\d+\.\d+/.test(version)) {
26 | dependencies[newPackageName] = '^7.0.0';
27 | } else {
28 | dependencies[newPackageName] = version;
29 | }
30 | }
31 |
32 | delete dependencies[oldPackage];
33 | dirtyFlag = true;
34 | }
35 | }
36 | return dirtyFlag;
37 | }
38 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/utils/line-terminator.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * By default, Recast uses the line terminator of the OS the code runs on.
3 | * This is often not desired, so we instead try to detect it from the input.
4 | * If there is at least one Windows-style linebreak (CRLF) in the input, use that.
5 | * In all other cases, use Unix-style (LF).
6 | * @return '\n' or '\r\n'
7 | */
8 | export default function detectLineTerminator(source: string) {
9 | return source && source.includes('\r\n') ? '\r\n' : '\n';
10 | }
11 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/src/utils/quote-style.ts:
--------------------------------------------------------------------------------
1 | import type { Collection, JSCodeshift } from 'jscodeshift';
2 |
3 | /**
4 | * As Recast is not preserving original quoting, we try to detect it.
5 | * See https://github.com/benjamn/recast/issues/171
6 | * and https://github.com/facebook/jscodeshift/issues/143
7 | * @return 'double', 'single' or null
8 | */
9 | export default function detectQuoteStyle(j: JSCodeshift, ast: Collection) {
10 | let doubles = 0;
11 | let singles = 0;
12 |
13 | ast.find(j.ImportDeclaration).forEach((p) => {
14 | // The raw value is from the original babel source
15 | // @ts-expect-error
16 | const quote = p.value.source?.extra?.raw[0];
17 | if (quote === '"') {
18 | doubles += 1;
19 | }
20 | if (quote === "'") {
21 | singles += 1;
22 | }
23 | });
24 |
25 | if (doubles === singles) {
26 | return null;
27 | }
28 | return doubles > singles ? 'double' : 'single';
29 | }
30 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/test/transformers.ts:
--------------------------------------------------------------------------------
1 | import { describe, it } from 'vitest';
2 | import jscodeshift, { type API } from 'jscodeshift';
3 | import transform from '../src/index.js';
4 | import assert from 'node:assert';
5 | import { readFile } from 'node:fs/promises';
6 | import { join } from 'node:path';
7 |
8 | function buildApi(parser: string | undefined): API {
9 | return {
10 | j: parser ? jscodeshift.withParser(parser) : jscodeshift,
11 | jscodeshift: parser ? jscodeshift.withParser(parser) : jscodeshift,
12 | stats: () => {
13 | console.error(
14 | 'The stats function was called, which is not supported on purpose'
15 | );
16 | },
17 | report: () => {
18 | console.error(
19 | 'The report function was called, which is not supported on purpose'
20 | );
21 | },
22 | };
23 | }
24 |
25 | async function readTestFile(filePath: string): Promise {
26 | return await readFile(
27 | join(__dirname, '..', '__testfixtures__', filePath),
28 | 'utf-8'
29 | );
30 | }
31 |
32 | async function testTransformation(
33 | inputFile: string,
34 | outputFile: string | undefined,
35 | filePath: string = 'test.tsx'
36 | ) {
37 | const INPUT = await readTestFile(inputFile);
38 | const OUTPUT = outputFile ? await readTestFile(outputFile) : undefined;
39 |
40 | const actualOutput = transform(
41 | {
42 | path: filePath,
43 | source: INPUT,
44 | },
45 | buildApi('tsx')
46 | );
47 |
48 | assert.deepEqual(actualOutput, OUTPUT);
49 | }
50 |
51 | describe('remix-to-react-router', () => {
52 | it('migrates package.json dependencies and scripts', async () => {
53 | await testTransformation(
54 | 'package.remix.json',
55 | 'package.rr7.json',
56 | 'package.json'
57 | );
58 | });
59 |
60 | it('migrates entry.client.tsx', async () => {
61 | await testTransformation(
62 | 'entry.client.remix.tsx',
63 | 'entry.client.rr7.tsx',
64 | 'entry.client.tsx'
65 | );
66 | });
67 |
68 | it('migrates entry.server.tsx', async () => {
69 | await testTransformation(
70 | 'entry.server.remix.tsx',
71 | 'entry.server.rr7.tsx',
72 | 'entry.server.tsx'
73 | );
74 | });
75 |
76 | it('migrates @remix-run/testing', async () => {
77 | await testTransformation(
78 | 'testing.remix.tsx',
79 | 'testing.rr7.tsx',
80 | '$username.test.tsx'
81 | );
82 | });
83 |
84 | it('migrates vite.config.ts', async () => {
85 | await testTransformation(
86 | 'vite.config.remix.ts',
87 | 'vite.config.rr7.ts',
88 | 'vite.config.ts'
89 | );
90 | });
91 |
92 | it('migrates changed imports', async () => {
93 | await testTransformation('imports.remix.tsx', 'imports.rr7.tsx');
94 | });
95 |
96 | it('migrates virtual:remix/server-build in server', async () => {
97 | await testTransformation('server.remix.ts', 'server.rr7.ts');
98 | });
99 |
100 | it('only modifies package.json that had remix packages', async () => {
101 | await testTransformation(
102 | 'package.nochange.json',
103 | undefined,
104 | 'package.json'
105 | );
106 | });
107 |
108 | it('updates package names in tsconfig types', async () => {
109 | await testTransformation(
110 | 'tsconfig.remix.json',
111 | 'tsconfig.rr7.json',
112 | 'tsconfig.json'
113 | );
114 | });
115 |
116 | it("doesn't modify files without remix", async () => {
117 | await testTransformation('nochange.tsx', undefined);
118 | });
119 | });
120 |
--------------------------------------------------------------------------------
/packages/remix-to-react-router/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "NodeNext",
4 | "target": "ESNext",
5 | "moduleResolution": "NodeNext",
6 | "lib": [
7 | "ESNext",
8 | "DOM"
9 | ],
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "resolveJsonModule": true,
13 | "allowSyntheticDefaultImports": true,
14 | "isolatedModules": true,
15 | "jsx": "react-jsx",
16 | "useDefineForClassFields": true,
17 | "noFallthroughCasesInSwitch": true,
18 | "noUnusedLocals": false,
19 | "noUnusedParameters": false,
20 | "preserveWatchOutput": true,
21 | "strict": true,
22 | "strictNullChecks": true,
23 | "incremental": true,
24 | "noUncheckedIndexedAccess": true,
25 | "noPropertyAccessFromIndexSignature": false,
26 | "allowJs": true,
27 | },
28 | "include": [
29 | "./src/**/*.ts",
30 | "./src/**/*.js",
31 | "./test/**/*.ts",
32 | "./test/**/*.js"
33 | ],
34 | "exclude": ["node_modules", "./dist/**/*"],
35 | "ts-node": {
36 | "transpileOnly": true
37 | }
38 | }
--------------------------------------------------------------------------------
/packages/remix-to-react-router/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { configDefaults, defineConfig } from 'vitest/config';
2 |
3 | export default defineConfig({
4 | test: {
5 | include: [...configDefaults.include, '**/test/*.ts'],
6 | },
7 | });
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | catalogs:
8 | default:
9 | '@types/jscodeshift':
10 | specifier: ^0.11.10
11 | version: 0.11.11
12 | jscodeshift:
13 | specifier: ^17.1.1
14 | version: 17.1.1
15 |
16 | importers:
17 |
18 | .:
19 | devDependencies:
20 | '@types/jscodeshift':
21 | specifier: ^0.11.10
22 | version: 0.11.11
23 | '@vitest/coverage-v8':
24 | specifier: ^2.1.4
25 | version: 2.1.4(vitest@2.1.4(@types/node@22.9.0))
26 | codemod:
27 | specifier: ^0.14.1
28 | version: 0.14.1
29 | jscodeshift:
30 | specifier: ^0.15.1
31 | version: 0.15.2
32 | ts-node:
33 | specifier: ^10.9.1
34 | version: 10.9.2(@types/node@22.9.0)(typescript@5.6.3)
35 | typescript:
36 | specifier: ^5.6.3
37 | version: 5.6.3
38 | vitest:
39 | specifier: ^2.1.4
40 | version: 2.1.4(@types/node@22.9.0)
41 |
42 | packages/remix-to-react-router:
43 | dependencies:
44 | json5:
45 | specifier: ^2.2.3
46 | version: 2.2.3
47 | devDependencies:
48 | '@codemod.com/codemod-utils':
49 | specifier: 1.0.0
50 | version: 1.0.0
51 | '@types/jscodeshift':
52 | specifier: 'catalog:'
53 | version: 0.11.11
54 | '@types/node':
55 | specifier: 22.9.0
56 | version: 22.9.0
57 | esbuild:
58 | specifier: ^0.24.0
59 | version: 0.24.0
60 | jscodeshift:
61 | specifier: 'catalog:'
62 | version: 17.1.1
63 | typescript:
64 | specifier: ^5.6.3
65 | version: 5.6.3
66 | vitest:
67 | specifier: ^2.1.4
68 | version: 2.1.4(@types/node@22.9.0)
69 |
70 | packages:
71 |
72 | '@ampproject/remapping@2.3.0':
73 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
74 | engines: {node: '>=6.0.0'}
75 |
76 | '@ast-grep/cli-darwin-arm64@0.25.7':
77 | resolution: {integrity: sha512-dkj8hy32mWuQwCJUEpnKwTS8tLE+e7dhvu6is+v5Q6AumOVlcL6PJWQsyaA4vedDm6XOGK9+WnyFpCnV3b5ouA==}
78 | engines: {node: '>= 10'}
79 | cpu: [arm64]
80 | os: [darwin]
81 |
82 | '@ast-grep/cli-darwin-x64@0.25.7':
83 | resolution: {integrity: sha512-FBdv7GH3llH5LI0S2yeqgQM5QEUHeoYMhw1pv+C439UeL5BBFFjI+LYVALciwsYzuq/DQDTnT2cM0JhYGajDLQ==}
84 | engines: {node: '>= 10'}
85 | cpu: [x64]
86 | os: [darwin]
87 |
88 | '@ast-grep/cli-linux-arm64-gnu@0.25.7':
89 | resolution: {integrity: sha512-lsE+cSe4rFO8rvLhMM7PM3T83LlmV60H9dOH+1hq8thkWhLCL6vAJijEVWgAQDDvvZf3xnNVgG2GG4jOMfTuTQ==}
90 | engines: {node: '>= 10'}
91 | cpu: [arm64]
92 | os: [linux]
93 |
94 | '@ast-grep/cli-linux-x64-gnu@0.25.7':
95 | resolution: {integrity: sha512-uuF5GXgeUZtBrftJJYuQU7PvDT7Q9fJkKKwpIscEfQqLndri1tdYzzT9jKj2taWFlhiCVqLaDEHsdfTeWaVjZQ==}
96 | engines: {node: '>= 10'}
97 | cpu: [x64]
98 | os: [linux]
99 |
100 | '@ast-grep/cli-win32-arm64-msvc@0.25.7':
101 | resolution: {integrity: sha512-GSWRjOnWybzNP5rnvPb6lQ7lSPoEIl64gk4uHE1h+a2nnFhT9REWTKFcmNB2aG8VmKEz1gu0pxpg9HmBe2OUBA==}
102 | engines: {node: '>= 10'}
103 | cpu: [arm64]
104 | os: [win32]
105 |
106 | '@ast-grep/cli-win32-ia32-msvc@0.25.7':
107 | resolution: {integrity: sha512-5p9PWbTeXaivQYixB+JkkpFKgY7G1Tm6R46Dhq6cHvKksiQ6lWlTOOmhl0QARtY7y3XP0MWuvjDEWCYrvYtO4A==}
108 | engines: {node: '>= 10'}
109 | cpu: [ia32]
110 | os: [win32]
111 |
112 | '@ast-grep/cli-win32-x64-msvc@0.25.7':
113 | resolution: {integrity: sha512-WjsRuyKTCeGWpMhvobzU/6HaWbseENPl5mNMZIKs8gsCpkUyTUfvV8/A2W29oHCgbDWRtixYppWtd87Qjpm6cg==}
114 | engines: {node: '>= 10'}
115 | cpu: [x64]
116 | os: [win32]
117 |
118 | '@ast-grep/cli@0.25.7':
119 | resolution: {integrity: sha512-vklcPRFHPHkwHq05nb2Fuaj4BYNWxhr8GIdB6la090jWob9FdbM/Jz86vlQp2tRELb2rKzuHeksG8qDrbX4REg==}
120 | engines: {node: '>= 12.0.0'}
121 | hasBin: true
122 |
123 | '@ast-grep/napi-darwin-arm64@0.25.7':
124 | resolution: {integrity: sha512-qqI1JvB6ULgOUOVE3YviQNQ6KAYOnkiE8W5fNwVJGUgMkUuM8tUm1Nal3vfKCI7dnYgpcNlKxdTWGlbt7aHKNg==}
125 | engines: {node: '>= 10'}
126 | cpu: [arm64]
127 | os: [darwin]
128 |
129 | '@ast-grep/napi-darwin-x64@0.25.7':
130 | resolution: {integrity: sha512-gq1Cf7US322ZJYPrVnAnn6eBLS6xi5catb5t99Wu6Rbm67XadEc81gtPTbPeNIu8FGgPjvKUc010rts2ZZbJeA==}
131 | engines: {node: '>= 10'}
132 | cpu: [x64]
133 | os: [darwin]
134 |
135 | '@ast-grep/napi-linux-arm64-gnu@0.25.7':
136 | resolution: {integrity: sha512-q+BzEC7wB7pkK+pQKbn4TVJThrEtvxjObz0okscPtxTNYvSJGv9jr3Nde5SYjdkfk8Ab4NgDMshVjKWVz2TSbQ==}
137 | engines: {node: '>= 10'}
138 | cpu: [arm64]
139 | os: [linux]
140 |
141 | '@ast-grep/napi-linux-arm64-musl@0.25.7':
142 | resolution: {integrity: sha512-SEqZ6y0UhzmvZS938jIgR04kgHAW70hJ8yF4x9AkcqEhbeyqgElxIE7ve50ukDzs70fAKccdV8zYmebYN/7iPg==}
143 | engines: {node: '>= 10'}
144 | cpu: [arm64]
145 | os: [linux]
146 |
147 | '@ast-grep/napi-linux-x64-gnu@0.25.7':
148 | resolution: {integrity: sha512-8YuE/zTywTBb/iTm601JXTdWV2Redy9L9ab27aRD0hwX8FLmKUy8gK0fSo3xx+FyvSET49xkoR9tYdNaG2Wrkw==}
149 | engines: {node: '>= 10'}
150 | cpu: [x64]
151 | os: [linux]
152 |
153 | '@ast-grep/napi-linux-x64-musl@0.25.7':
154 | resolution: {integrity: sha512-sT3eslR50IU6lHfqvq/c7vpxksJiB3h1NjEy1LpG+CYPuoLsQaB8j9OQlX8TqgVlDty/d/13cSls1Y3n/pm9xw==}
155 | engines: {node: '>= 10'}
156 | cpu: [x64]
157 | os: [linux]
158 |
159 | '@ast-grep/napi-win32-arm64-msvc@0.25.7':
160 | resolution: {integrity: sha512-pDi9vyXzUbpiRwFTif6+R7ZIIVB1ZKcRUJLKSIPyYb39DcSX7aOuxQcSZderWnBrwPGxZKzdgztdQ16TuAz2IQ==}
161 | engines: {node: '>= 10'}
162 | cpu: [arm64]
163 | os: [win32]
164 |
165 | '@ast-grep/napi-win32-ia32-msvc@0.25.7':
166 | resolution: {integrity: sha512-WFSNDMI5L9N9dK5zFQ6N900nhraOSYtKns/2p/EKZIKPBDXJSzzhT/jBakCSDix1GUs8K0XgkDoq2rXmuiBqXA==}
167 | engines: {node: '>= 10'}
168 | cpu: [ia32]
169 | os: [win32]
170 |
171 | '@ast-grep/napi-win32-x64-msvc@0.25.7':
172 | resolution: {integrity: sha512-HlsoVwQ9XrgNZ0JAmXgV5t8Ltx9tGyWZNS2UMY/2cvNU/SG9EpJLm1Bu9Mlk5seiJLbl28QTTbhZdfPKBzGTVQ==}
173 | engines: {node: '>= 10'}
174 | cpu: [x64]
175 | os: [win32]
176 |
177 | '@ast-grep/napi@0.25.7':
178 | resolution: {integrity: sha512-kDw/JNyOLttVbm2hl+55C9lXuUcuIFt31LQIpSptUkyTgI+2Cdqdeah2bNPe4/GQM2ysDjBDS4y1+9iQxMdJiw==}
179 | engines: {node: '>= 10'}
180 |
181 | '@babel/code-frame@7.26.2':
182 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
183 | engines: {node: '>=6.9.0'}
184 |
185 | '@babel/compat-data@7.26.2':
186 | resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==}
187 | engines: {node: '>=6.9.0'}
188 |
189 | '@babel/core@7.26.0':
190 | resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
191 | engines: {node: '>=6.9.0'}
192 |
193 | '@babel/generator@7.26.2':
194 | resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==}
195 | engines: {node: '>=6.9.0'}
196 |
197 | '@babel/helper-annotate-as-pure@7.25.9':
198 | resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
199 | engines: {node: '>=6.9.0'}
200 |
201 | '@babel/helper-compilation-targets@7.25.9':
202 | resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==}
203 | engines: {node: '>=6.9.0'}
204 |
205 | '@babel/helper-create-class-features-plugin@7.25.9':
206 | resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==}
207 | engines: {node: '>=6.9.0'}
208 | peerDependencies:
209 | '@babel/core': ^7.0.0
210 |
211 | '@babel/helper-member-expression-to-functions@7.25.9':
212 | resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
213 | engines: {node: '>=6.9.0'}
214 |
215 | '@babel/helper-module-imports@7.25.9':
216 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
217 | engines: {node: '>=6.9.0'}
218 |
219 | '@babel/helper-module-transforms@7.26.0':
220 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
221 | engines: {node: '>=6.9.0'}
222 | peerDependencies:
223 | '@babel/core': ^7.0.0
224 |
225 | '@babel/helper-optimise-call-expression@7.25.9':
226 | resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
227 | engines: {node: '>=6.9.0'}
228 |
229 | '@babel/helper-plugin-utils@7.25.9':
230 | resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==}
231 | engines: {node: '>=6.9.0'}
232 |
233 | '@babel/helper-replace-supers@7.25.9':
234 | resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==}
235 | engines: {node: '>=6.9.0'}
236 | peerDependencies:
237 | '@babel/core': ^7.0.0
238 |
239 | '@babel/helper-simple-access@7.25.9':
240 | resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==}
241 | engines: {node: '>=6.9.0'}
242 |
243 | '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
244 | resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
245 | engines: {node: '>=6.9.0'}
246 |
247 | '@babel/helper-string-parser@7.25.9':
248 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
249 | engines: {node: '>=6.9.0'}
250 |
251 | '@babel/helper-validator-identifier@7.25.9':
252 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
253 | engines: {node: '>=6.9.0'}
254 |
255 | '@babel/helper-validator-option@7.25.9':
256 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
257 | engines: {node: '>=6.9.0'}
258 |
259 | '@babel/helpers@7.26.0':
260 | resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==}
261 | engines: {node: '>=6.9.0'}
262 |
263 | '@babel/parser@7.26.2':
264 | resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==}
265 | engines: {node: '>=6.0.0'}
266 | hasBin: true
267 |
268 | '@babel/plugin-syntax-flow@7.26.0':
269 | resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==}
270 | engines: {node: '>=6.9.0'}
271 | peerDependencies:
272 | '@babel/core': ^7.0.0-0
273 |
274 | '@babel/plugin-syntax-jsx@7.25.9':
275 | resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
276 | engines: {node: '>=6.9.0'}
277 | peerDependencies:
278 | '@babel/core': ^7.0.0-0
279 |
280 | '@babel/plugin-syntax-typescript@7.25.9':
281 | resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
282 | engines: {node: '>=6.9.0'}
283 | peerDependencies:
284 | '@babel/core': ^7.0.0-0
285 |
286 | '@babel/plugin-transform-class-properties@7.25.9':
287 | resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==}
288 | engines: {node: '>=6.9.0'}
289 | peerDependencies:
290 | '@babel/core': ^7.0.0-0
291 |
292 | '@babel/plugin-transform-flow-strip-types@7.25.9':
293 | resolution: {integrity: sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==}
294 | engines: {node: '>=6.9.0'}
295 | peerDependencies:
296 | '@babel/core': ^7.0.0-0
297 |
298 | '@babel/plugin-transform-modules-commonjs@7.25.9':
299 | resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==}
300 | engines: {node: '>=6.9.0'}
301 | peerDependencies:
302 | '@babel/core': ^7.0.0-0
303 |
304 | '@babel/plugin-transform-nullish-coalescing-operator@7.25.9':
305 | resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==}
306 | engines: {node: '>=6.9.0'}
307 | peerDependencies:
308 | '@babel/core': ^7.0.0-0
309 |
310 | '@babel/plugin-transform-optional-chaining@7.25.9':
311 | resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==}
312 | engines: {node: '>=6.9.0'}
313 | peerDependencies:
314 | '@babel/core': ^7.0.0-0
315 |
316 | '@babel/plugin-transform-private-methods@7.25.9':
317 | resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==}
318 | engines: {node: '>=6.9.0'}
319 | peerDependencies:
320 | '@babel/core': ^7.0.0-0
321 |
322 | '@babel/plugin-transform-typescript@7.25.9':
323 | resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==}
324 | engines: {node: '>=6.9.0'}
325 | peerDependencies:
326 | '@babel/core': ^7.0.0-0
327 |
328 | '@babel/preset-flow@7.25.9':
329 | resolution: {integrity: sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==}
330 | engines: {node: '>=6.9.0'}
331 | peerDependencies:
332 | '@babel/core': ^7.0.0-0
333 |
334 | '@babel/preset-typescript@7.26.0':
335 | resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==}
336 | engines: {node: '>=6.9.0'}
337 | peerDependencies:
338 | '@babel/core': ^7.0.0-0
339 |
340 | '@babel/register@7.25.9':
341 | resolution: {integrity: sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==}
342 | engines: {node: '>=6.9.0'}
343 | peerDependencies:
344 | '@babel/core': ^7.0.0-0
345 |
346 | '@babel/template@7.25.9':
347 | resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
348 | engines: {node: '>=6.9.0'}
349 |
350 | '@babel/traverse@7.25.9':
351 | resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==}
352 | engines: {node: '>=6.9.0'}
353 |
354 | '@babel/types@7.26.0':
355 | resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
356 | engines: {node: '>=6.9.0'}
357 |
358 | '@bcoe/v8-coverage@0.2.3':
359 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
360 |
361 | '@codemod.com/codemod-utils@1.0.0':
362 | resolution: {integrity: sha512-Uo7oA2kgpfRJS5LFL9ARdsaeenRyEsRHINoTcIsHeBFBce+imLhrkYlEhXcrNYuTLVXmlGx2Mdn6NeUio4wpfw==}
363 |
364 | '@codemod.com/workflow@0.0.31':
365 | resolution: {integrity: sha512-8xmbxwjxr6d0ZUm3RS/eQqud2mUGXwQgf2v+YEjwQQVwOse6yShgoFljrg7ujvJlhzymivYloL0T0VSS9YubNw==}
366 |
367 | '@cspotcode/source-map-support@0.8.1':
368 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
369 | engines: {node: '>=12'}
370 |
371 | '@esbuild/aix-ppc64@0.21.5':
372 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
373 | engines: {node: '>=12'}
374 | cpu: [ppc64]
375 | os: [aix]
376 |
377 | '@esbuild/aix-ppc64@0.23.1':
378 | resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
379 | engines: {node: '>=18'}
380 | cpu: [ppc64]
381 | os: [aix]
382 |
383 | '@esbuild/aix-ppc64@0.24.0':
384 | resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
385 | engines: {node: '>=18'}
386 | cpu: [ppc64]
387 | os: [aix]
388 |
389 | '@esbuild/android-arm64@0.21.5':
390 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
391 | engines: {node: '>=12'}
392 | cpu: [arm64]
393 | os: [android]
394 |
395 | '@esbuild/android-arm64@0.23.1':
396 | resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
397 | engines: {node: '>=18'}
398 | cpu: [arm64]
399 | os: [android]
400 |
401 | '@esbuild/android-arm64@0.24.0':
402 | resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
403 | engines: {node: '>=18'}
404 | cpu: [arm64]
405 | os: [android]
406 |
407 | '@esbuild/android-arm@0.21.5':
408 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
409 | engines: {node: '>=12'}
410 | cpu: [arm]
411 | os: [android]
412 |
413 | '@esbuild/android-arm@0.23.1':
414 | resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
415 | engines: {node: '>=18'}
416 | cpu: [arm]
417 | os: [android]
418 |
419 | '@esbuild/android-arm@0.24.0':
420 | resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
421 | engines: {node: '>=18'}
422 | cpu: [arm]
423 | os: [android]
424 |
425 | '@esbuild/android-x64@0.21.5':
426 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
427 | engines: {node: '>=12'}
428 | cpu: [x64]
429 | os: [android]
430 |
431 | '@esbuild/android-x64@0.23.1':
432 | resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
433 | engines: {node: '>=18'}
434 | cpu: [x64]
435 | os: [android]
436 |
437 | '@esbuild/android-x64@0.24.0':
438 | resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
439 | engines: {node: '>=18'}
440 | cpu: [x64]
441 | os: [android]
442 |
443 | '@esbuild/darwin-arm64@0.21.5':
444 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
445 | engines: {node: '>=12'}
446 | cpu: [arm64]
447 | os: [darwin]
448 |
449 | '@esbuild/darwin-arm64@0.23.1':
450 | resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
451 | engines: {node: '>=18'}
452 | cpu: [arm64]
453 | os: [darwin]
454 |
455 | '@esbuild/darwin-arm64@0.24.0':
456 | resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
457 | engines: {node: '>=18'}
458 | cpu: [arm64]
459 | os: [darwin]
460 |
461 | '@esbuild/darwin-x64@0.21.5':
462 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
463 | engines: {node: '>=12'}
464 | cpu: [x64]
465 | os: [darwin]
466 |
467 | '@esbuild/darwin-x64@0.23.1':
468 | resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
469 | engines: {node: '>=18'}
470 | cpu: [x64]
471 | os: [darwin]
472 |
473 | '@esbuild/darwin-x64@0.24.0':
474 | resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
475 | engines: {node: '>=18'}
476 | cpu: [x64]
477 | os: [darwin]
478 |
479 | '@esbuild/freebsd-arm64@0.21.5':
480 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
481 | engines: {node: '>=12'}
482 | cpu: [arm64]
483 | os: [freebsd]
484 |
485 | '@esbuild/freebsd-arm64@0.23.1':
486 | resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
487 | engines: {node: '>=18'}
488 | cpu: [arm64]
489 | os: [freebsd]
490 |
491 | '@esbuild/freebsd-arm64@0.24.0':
492 | resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
493 | engines: {node: '>=18'}
494 | cpu: [arm64]
495 | os: [freebsd]
496 |
497 | '@esbuild/freebsd-x64@0.21.5':
498 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
499 | engines: {node: '>=12'}
500 | cpu: [x64]
501 | os: [freebsd]
502 |
503 | '@esbuild/freebsd-x64@0.23.1':
504 | resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
505 | engines: {node: '>=18'}
506 | cpu: [x64]
507 | os: [freebsd]
508 |
509 | '@esbuild/freebsd-x64@0.24.0':
510 | resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
511 | engines: {node: '>=18'}
512 | cpu: [x64]
513 | os: [freebsd]
514 |
515 | '@esbuild/linux-arm64@0.21.5':
516 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
517 | engines: {node: '>=12'}
518 | cpu: [arm64]
519 | os: [linux]
520 |
521 | '@esbuild/linux-arm64@0.23.1':
522 | resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
523 | engines: {node: '>=18'}
524 | cpu: [arm64]
525 | os: [linux]
526 |
527 | '@esbuild/linux-arm64@0.24.0':
528 | resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
529 | engines: {node: '>=18'}
530 | cpu: [arm64]
531 | os: [linux]
532 |
533 | '@esbuild/linux-arm@0.21.5':
534 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
535 | engines: {node: '>=12'}
536 | cpu: [arm]
537 | os: [linux]
538 |
539 | '@esbuild/linux-arm@0.23.1':
540 | resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
541 | engines: {node: '>=18'}
542 | cpu: [arm]
543 | os: [linux]
544 |
545 | '@esbuild/linux-arm@0.24.0':
546 | resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
547 | engines: {node: '>=18'}
548 | cpu: [arm]
549 | os: [linux]
550 |
551 | '@esbuild/linux-ia32@0.21.5':
552 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
553 | engines: {node: '>=12'}
554 | cpu: [ia32]
555 | os: [linux]
556 |
557 | '@esbuild/linux-ia32@0.23.1':
558 | resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
559 | engines: {node: '>=18'}
560 | cpu: [ia32]
561 | os: [linux]
562 |
563 | '@esbuild/linux-ia32@0.24.0':
564 | resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
565 | engines: {node: '>=18'}
566 | cpu: [ia32]
567 | os: [linux]
568 |
569 | '@esbuild/linux-loong64@0.21.5':
570 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
571 | engines: {node: '>=12'}
572 | cpu: [loong64]
573 | os: [linux]
574 |
575 | '@esbuild/linux-loong64@0.23.1':
576 | resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
577 | engines: {node: '>=18'}
578 | cpu: [loong64]
579 | os: [linux]
580 |
581 | '@esbuild/linux-loong64@0.24.0':
582 | resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
583 | engines: {node: '>=18'}
584 | cpu: [loong64]
585 | os: [linux]
586 |
587 | '@esbuild/linux-mips64el@0.21.5':
588 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
589 | engines: {node: '>=12'}
590 | cpu: [mips64el]
591 | os: [linux]
592 |
593 | '@esbuild/linux-mips64el@0.23.1':
594 | resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
595 | engines: {node: '>=18'}
596 | cpu: [mips64el]
597 | os: [linux]
598 |
599 | '@esbuild/linux-mips64el@0.24.0':
600 | resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
601 | engines: {node: '>=18'}
602 | cpu: [mips64el]
603 | os: [linux]
604 |
605 | '@esbuild/linux-ppc64@0.21.5':
606 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
607 | engines: {node: '>=12'}
608 | cpu: [ppc64]
609 | os: [linux]
610 |
611 | '@esbuild/linux-ppc64@0.23.1':
612 | resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
613 | engines: {node: '>=18'}
614 | cpu: [ppc64]
615 | os: [linux]
616 |
617 | '@esbuild/linux-ppc64@0.24.0':
618 | resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
619 | engines: {node: '>=18'}
620 | cpu: [ppc64]
621 | os: [linux]
622 |
623 | '@esbuild/linux-riscv64@0.21.5':
624 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
625 | engines: {node: '>=12'}
626 | cpu: [riscv64]
627 | os: [linux]
628 |
629 | '@esbuild/linux-riscv64@0.23.1':
630 | resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
631 | engines: {node: '>=18'}
632 | cpu: [riscv64]
633 | os: [linux]
634 |
635 | '@esbuild/linux-riscv64@0.24.0':
636 | resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
637 | engines: {node: '>=18'}
638 | cpu: [riscv64]
639 | os: [linux]
640 |
641 | '@esbuild/linux-s390x@0.21.5':
642 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
643 | engines: {node: '>=12'}
644 | cpu: [s390x]
645 | os: [linux]
646 |
647 | '@esbuild/linux-s390x@0.23.1':
648 | resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
649 | engines: {node: '>=18'}
650 | cpu: [s390x]
651 | os: [linux]
652 |
653 | '@esbuild/linux-s390x@0.24.0':
654 | resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
655 | engines: {node: '>=18'}
656 | cpu: [s390x]
657 | os: [linux]
658 |
659 | '@esbuild/linux-x64@0.21.5':
660 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
661 | engines: {node: '>=12'}
662 | cpu: [x64]
663 | os: [linux]
664 |
665 | '@esbuild/linux-x64@0.23.1':
666 | resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
667 | engines: {node: '>=18'}
668 | cpu: [x64]
669 | os: [linux]
670 |
671 | '@esbuild/linux-x64@0.24.0':
672 | resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
673 | engines: {node: '>=18'}
674 | cpu: [x64]
675 | os: [linux]
676 |
677 | '@esbuild/netbsd-x64@0.21.5':
678 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
679 | engines: {node: '>=12'}
680 | cpu: [x64]
681 | os: [netbsd]
682 |
683 | '@esbuild/netbsd-x64@0.23.1':
684 | resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
685 | engines: {node: '>=18'}
686 | cpu: [x64]
687 | os: [netbsd]
688 |
689 | '@esbuild/netbsd-x64@0.24.0':
690 | resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
691 | engines: {node: '>=18'}
692 | cpu: [x64]
693 | os: [netbsd]
694 |
695 | '@esbuild/openbsd-arm64@0.23.1':
696 | resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
697 | engines: {node: '>=18'}
698 | cpu: [arm64]
699 | os: [openbsd]
700 |
701 | '@esbuild/openbsd-arm64@0.24.0':
702 | resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
703 | engines: {node: '>=18'}
704 | cpu: [arm64]
705 | os: [openbsd]
706 |
707 | '@esbuild/openbsd-x64@0.21.5':
708 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
709 | engines: {node: '>=12'}
710 | cpu: [x64]
711 | os: [openbsd]
712 |
713 | '@esbuild/openbsd-x64@0.23.1':
714 | resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
715 | engines: {node: '>=18'}
716 | cpu: [x64]
717 | os: [openbsd]
718 |
719 | '@esbuild/openbsd-x64@0.24.0':
720 | resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
721 | engines: {node: '>=18'}
722 | cpu: [x64]
723 | os: [openbsd]
724 |
725 | '@esbuild/sunos-x64@0.21.5':
726 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
727 | engines: {node: '>=12'}
728 | cpu: [x64]
729 | os: [sunos]
730 |
731 | '@esbuild/sunos-x64@0.23.1':
732 | resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
733 | engines: {node: '>=18'}
734 | cpu: [x64]
735 | os: [sunos]
736 |
737 | '@esbuild/sunos-x64@0.24.0':
738 | resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
739 | engines: {node: '>=18'}
740 | cpu: [x64]
741 | os: [sunos]
742 |
743 | '@esbuild/win32-arm64@0.21.5':
744 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
745 | engines: {node: '>=12'}
746 | cpu: [arm64]
747 | os: [win32]
748 |
749 | '@esbuild/win32-arm64@0.23.1':
750 | resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
751 | engines: {node: '>=18'}
752 | cpu: [arm64]
753 | os: [win32]
754 |
755 | '@esbuild/win32-arm64@0.24.0':
756 | resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
757 | engines: {node: '>=18'}
758 | cpu: [arm64]
759 | os: [win32]
760 |
761 | '@esbuild/win32-ia32@0.21.5':
762 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
763 | engines: {node: '>=12'}
764 | cpu: [ia32]
765 | os: [win32]
766 |
767 | '@esbuild/win32-ia32@0.23.1':
768 | resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
769 | engines: {node: '>=18'}
770 | cpu: [ia32]
771 | os: [win32]
772 |
773 | '@esbuild/win32-ia32@0.24.0':
774 | resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
775 | engines: {node: '>=18'}
776 | cpu: [ia32]
777 | os: [win32]
778 |
779 | '@esbuild/win32-x64@0.21.5':
780 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
781 | engines: {node: '>=12'}
782 | cpu: [x64]
783 | os: [win32]
784 |
785 | '@esbuild/win32-x64@0.23.1':
786 | resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
787 | engines: {node: '>=18'}
788 | cpu: [x64]
789 | os: [win32]
790 |
791 | '@esbuild/win32-x64@0.24.0':
792 | resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
793 | engines: {node: '>=18'}
794 | cpu: [x64]
795 | os: [win32]
796 |
797 | '@inquirer/figures@1.0.7':
798 | resolution: {integrity: sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==}
799 | engines: {node: '>=18'}
800 |
801 | '@isaacs/cliui@8.0.2':
802 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
803 | engines: {node: '>=12'}
804 |
805 | '@istanbuljs/schema@0.1.3':
806 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
807 | engines: {node: '>=8'}
808 |
809 | '@jridgewell/gen-mapping@0.3.5':
810 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
811 | engines: {node: '>=6.0.0'}
812 |
813 | '@jridgewell/resolve-uri@3.1.2':
814 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
815 | engines: {node: '>=6.0.0'}
816 |
817 | '@jridgewell/set-array@1.2.1':
818 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
819 | engines: {node: '>=6.0.0'}
820 |
821 | '@jridgewell/sourcemap-codec@1.5.0':
822 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
823 |
824 | '@jridgewell/trace-mapping@0.3.25':
825 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
826 |
827 | '@jridgewell/trace-mapping@0.3.9':
828 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
829 |
830 | '@kwsites/file-exists@1.1.1':
831 | resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
832 |
833 | '@kwsites/promise-deferred@1.1.1':
834 | resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
835 |
836 | '@octokit/auth-token@4.0.0':
837 | resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
838 | engines: {node: '>= 18'}
839 |
840 | '@octokit/core@5.2.0':
841 | resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==}
842 | engines: {node: '>= 18'}
843 |
844 | '@octokit/endpoint@9.0.5':
845 | resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==}
846 | engines: {node: '>= 18'}
847 |
848 | '@octokit/graphql@7.1.0':
849 | resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==}
850 | engines: {node: '>= 18'}
851 |
852 | '@octokit/openapi-types@22.2.0':
853 | resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==}
854 |
855 | '@octokit/plugin-paginate-rest@11.3.1':
856 | resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==}
857 | engines: {node: '>= 18'}
858 | peerDependencies:
859 | '@octokit/core': '5'
860 |
861 | '@octokit/plugin-request-log@4.0.1':
862 | resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==}
863 | engines: {node: '>= 18'}
864 | peerDependencies:
865 | '@octokit/core': '5'
866 |
867 | '@octokit/plugin-rest-endpoint-methods@13.2.2':
868 | resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==}
869 | engines: {node: '>= 18'}
870 | peerDependencies:
871 | '@octokit/core': ^5
872 |
873 | '@octokit/request-error@5.1.0':
874 | resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==}
875 | engines: {node: '>= 18'}
876 |
877 | '@octokit/request@8.4.0':
878 | resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==}
879 | engines: {node: '>= 18'}
880 |
881 | '@octokit/rest@20.1.1':
882 | resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==}
883 | engines: {node: '>= 18'}
884 |
885 | '@octokit/types@13.6.1':
886 | resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==}
887 |
888 | '@pkgjs/parseargs@0.11.0':
889 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
890 | engines: {node: '>=14'}
891 |
892 | '@rollup/rollup-android-arm-eabi@4.24.4':
893 | resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==}
894 | cpu: [arm]
895 | os: [android]
896 |
897 | '@rollup/rollup-android-arm64@4.24.4':
898 | resolution: {integrity: sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==}
899 | cpu: [arm64]
900 | os: [android]
901 |
902 | '@rollup/rollup-darwin-arm64@4.24.4':
903 | resolution: {integrity: sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==}
904 | cpu: [arm64]
905 | os: [darwin]
906 |
907 | '@rollup/rollup-darwin-x64@4.24.4':
908 | resolution: {integrity: sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==}
909 | cpu: [x64]
910 | os: [darwin]
911 |
912 | '@rollup/rollup-freebsd-arm64@4.24.4':
913 | resolution: {integrity: sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==}
914 | cpu: [arm64]
915 | os: [freebsd]
916 |
917 | '@rollup/rollup-freebsd-x64@4.24.4':
918 | resolution: {integrity: sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==}
919 | cpu: [x64]
920 | os: [freebsd]
921 |
922 | '@rollup/rollup-linux-arm-gnueabihf@4.24.4':
923 | resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==}
924 | cpu: [arm]
925 | os: [linux]
926 |
927 | '@rollup/rollup-linux-arm-musleabihf@4.24.4':
928 | resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==}
929 | cpu: [arm]
930 | os: [linux]
931 |
932 | '@rollup/rollup-linux-arm64-gnu@4.24.4':
933 | resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==}
934 | cpu: [arm64]
935 | os: [linux]
936 |
937 | '@rollup/rollup-linux-arm64-musl@4.24.4':
938 | resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==}
939 | cpu: [arm64]
940 | os: [linux]
941 |
942 | '@rollup/rollup-linux-powerpc64le-gnu@4.24.4':
943 | resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==}
944 | cpu: [ppc64]
945 | os: [linux]
946 |
947 | '@rollup/rollup-linux-riscv64-gnu@4.24.4':
948 | resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==}
949 | cpu: [riscv64]
950 | os: [linux]
951 |
952 | '@rollup/rollup-linux-s390x-gnu@4.24.4':
953 | resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==}
954 | cpu: [s390x]
955 | os: [linux]
956 |
957 | '@rollup/rollup-linux-x64-gnu@4.24.4':
958 | resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==}
959 | cpu: [x64]
960 | os: [linux]
961 |
962 | '@rollup/rollup-linux-x64-musl@4.24.4':
963 | resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==}
964 | cpu: [x64]
965 | os: [linux]
966 |
967 | '@rollup/rollup-win32-arm64-msvc@4.24.4':
968 | resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==}
969 | cpu: [arm64]
970 | os: [win32]
971 |
972 | '@rollup/rollup-win32-ia32-msvc@4.24.4':
973 | resolution: {integrity: sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==}
974 | cpu: [ia32]
975 | os: [win32]
976 |
977 | '@rollup/rollup-win32-x64-msvc@4.24.4':
978 | resolution: {integrity: sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==}
979 | cpu: [x64]
980 | os: [win32]
981 |
982 | '@sindresorhus/slugify@2.2.1':
983 | resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==}
984 | engines: {node: '>=12'}
985 |
986 | '@sindresorhus/transliterate@1.6.0':
987 | resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==}
988 | engines: {node: '>=12'}
989 |
990 | '@tsconfig/node10@1.0.11':
991 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
992 |
993 | '@tsconfig/node12@1.0.11':
994 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
995 |
996 | '@tsconfig/node14@1.0.3':
997 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
998 |
999 | '@tsconfig/node16@1.0.4':
1000 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
1001 |
1002 | '@types/estree@1.0.6':
1003 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
1004 |
1005 | '@types/jscodeshift@0.11.11':
1006 | resolution: {integrity: sha512-d7CAfFGOupj5qCDqMODXxNz2/NwCv/Lha78ZFbnr6qpk3K98iSB8I+ig9ERE2+EeYML352VMRsjPyOpeA+04eQ==}
1007 |
1008 | '@types/node-fetch@2.6.11':
1009 | resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
1010 |
1011 | '@types/node@18.19.64':
1012 | resolution: {integrity: sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==}
1013 |
1014 | '@types/node@22.9.0':
1015 | resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==}
1016 |
1017 | '@vitest/coverage-v8@2.1.4':
1018 | resolution: {integrity: sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==}
1019 | peerDependencies:
1020 | '@vitest/browser': 2.1.4
1021 | vitest: 2.1.4
1022 | peerDependenciesMeta:
1023 | '@vitest/browser':
1024 | optional: true
1025 |
1026 | '@vitest/expect@2.1.4':
1027 | resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==}
1028 |
1029 | '@vitest/mocker@2.1.4':
1030 | resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==}
1031 | peerDependencies:
1032 | msw: ^2.4.9
1033 | vite: ^5.0.0
1034 | peerDependenciesMeta:
1035 | msw:
1036 | optional: true
1037 | vite:
1038 | optional: true
1039 |
1040 | '@vitest/pretty-format@2.1.4':
1041 | resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==}
1042 |
1043 | '@vitest/runner@2.1.4':
1044 | resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==}
1045 |
1046 | '@vitest/snapshot@2.1.4':
1047 | resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==}
1048 |
1049 | '@vitest/spy@2.1.4':
1050 | resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==}
1051 |
1052 | '@vitest/utils@2.1.4':
1053 | resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==}
1054 |
1055 | abort-controller@3.0.0:
1056 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
1057 | engines: {node: '>=6.5'}
1058 |
1059 | acorn-walk@8.3.4:
1060 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
1061 | engines: {node: '>=0.4.0'}
1062 |
1063 | acorn@8.14.0:
1064 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
1065 | engines: {node: '>=0.4.0'}
1066 | hasBin: true
1067 |
1068 | agentkeepalive@4.5.0:
1069 | resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
1070 | engines: {node: '>= 8.0.0'}
1071 |
1072 | ansi-escapes@4.3.2:
1073 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
1074 | engines: {node: '>=8'}
1075 |
1076 | ansi-regex@5.0.1:
1077 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
1078 | engines: {node: '>=8'}
1079 |
1080 | ansi-regex@6.1.0:
1081 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
1082 | engines: {node: '>=12'}
1083 |
1084 | ansi-styles@4.3.0:
1085 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1086 | engines: {node: '>=8'}
1087 |
1088 | ansi-styles@6.2.1:
1089 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
1090 | engines: {node: '>=12'}
1091 |
1092 | arg@4.1.3:
1093 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
1094 |
1095 | assertion-error@2.0.1:
1096 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
1097 | engines: {node: '>=12'}
1098 |
1099 | ast-types@0.14.2:
1100 | resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==}
1101 | engines: {node: '>=4'}
1102 |
1103 | ast-types@0.16.1:
1104 | resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
1105 | engines: {node: '>=4'}
1106 |
1107 | asynckit@0.4.0:
1108 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
1109 |
1110 | babel-core@7.0.0-bridge.0:
1111 | resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
1112 | peerDependencies:
1113 | '@babel/core': ^7.0.0-0
1114 |
1115 | balanced-match@1.0.2:
1116 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1117 |
1118 | base-64@0.1.0:
1119 | resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==}
1120 |
1121 | base64-js@1.5.1:
1122 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
1123 |
1124 | before-after-hook@2.2.3:
1125 | resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
1126 |
1127 | bl@4.1.0:
1128 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
1129 |
1130 | blessed@0.1.81:
1131 | resolution: {integrity: sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ==}
1132 | engines: {node: '>= 0.8.0'}
1133 | hasBin: true
1134 |
1135 | brace-expansion@1.1.11:
1136 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1137 |
1138 | brace-expansion@2.0.1:
1139 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1140 |
1141 | braces@3.0.3:
1142 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
1143 | engines: {node: '>=8'}
1144 |
1145 | browserslist@4.24.2:
1146 | resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==}
1147 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1148 | hasBin: true
1149 |
1150 | buffer-from@1.1.2:
1151 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
1152 |
1153 | buffer@5.7.1:
1154 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
1155 |
1156 | cac@6.7.14:
1157 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
1158 | engines: {node: '>=8'}
1159 |
1160 | caniuse-lite@1.0.30001679:
1161 | resolution: {integrity: sha512-j2YqID/YwpLnKzCmBOS4tlZdWprXm3ZmQLBH9ZBXFOhoxLA46fwyBvx6toCBWBmnuwUY/qB3kEU6gFx8qgCroA==}
1162 |
1163 | chai@5.1.2:
1164 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
1165 | engines: {node: '>=12'}
1166 |
1167 | chalk@4.1.2:
1168 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
1169 | engines: {node: '>=10'}
1170 |
1171 | chardet@0.7.0:
1172 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
1173 |
1174 | charenc@0.0.2:
1175 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
1176 |
1177 | check-error@2.1.1:
1178 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
1179 | engines: {node: '>= 16'}
1180 |
1181 | chownr@1.1.4:
1182 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
1183 |
1184 | cli-cursor@3.1.0:
1185 | resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
1186 | engines: {node: '>=8'}
1187 |
1188 | cli-spinners@2.9.2:
1189 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
1190 | engines: {node: '>=6'}
1191 |
1192 | cli-width@4.1.0:
1193 | resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
1194 | engines: {node: '>= 12'}
1195 |
1196 | clone-deep@4.0.1:
1197 | resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
1198 | engines: {node: '>=6'}
1199 |
1200 | clone@1.0.4:
1201 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
1202 | engines: {node: '>=0.8'}
1203 |
1204 | codemod@0.14.1:
1205 | resolution: {integrity: sha512-6AG8qJCYm7g2ex8hPrHZH7CU/W9R+0USHXXTO7ZEzs6HkMq55hNMuNgJ272pSMw9FWA0MFcuIL7si8mn0UJWBg==}
1206 | engines: {node: '>=18.5.0'}
1207 | hasBin: true
1208 |
1209 | color-convert@2.0.1:
1210 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1211 | engines: {node: '>=7.0.0'}
1212 |
1213 | color-name@1.1.4:
1214 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1215 |
1216 | colors-cli@1.0.33:
1217 | resolution: {integrity: sha512-PWGsmoJFdOB0t+BeHgmtuoRZUQucOLl5ii81NBzOOGVxlgE04muFNHlR5j8i8MKbOPELBl3243AI6lGBTj5ICQ==}
1218 | hasBin: true
1219 |
1220 | combined-stream@1.0.8:
1221 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
1222 | engines: {node: '>= 0.8'}
1223 |
1224 | commondir@1.0.1:
1225 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
1226 |
1227 | concat-map@0.0.1:
1228 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1229 |
1230 | convert-source-map@2.0.0:
1231 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
1232 |
1233 | create-require@1.1.1:
1234 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
1235 |
1236 | cross-spawn@7.0.5:
1237 | resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==}
1238 | engines: {node: '>= 8'}
1239 |
1240 | crypt@0.0.2:
1241 | resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
1242 |
1243 | debug@4.3.7:
1244 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
1245 | engines: {node: '>=6.0'}
1246 | peerDependencies:
1247 | supports-color: '*'
1248 | peerDependenciesMeta:
1249 | supports-color:
1250 | optional: true
1251 |
1252 | decompress-response@6.0.0:
1253 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
1254 | engines: {node: '>=10'}
1255 |
1256 | deep-eql@5.0.2:
1257 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
1258 | engines: {node: '>=6'}
1259 |
1260 | deep-extend@0.6.0:
1261 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
1262 | engines: {node: '>=4.0.0'}
1263 |
1264 | defaults@1.0.4:
1265 | resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
1266 |
1267 | delayed-stream@1.0.0:
1268 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
1269 | engines: {node: '>=0.4.0'}
1270 |
1271 | deprecation@2.3.1:
1272 | resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
1273 |
1274 | detect-indent@7.0.1:
1275 | resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==}
1276 | engines: {node: '>=12.20'}
1277 |
1278 | detect-libc@2.0.3:
1279 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
1280 | engines: {node: '>=8'}
1281 |
1282 | detect-newline@4.0.1:
1283 | resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==}
1284 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1285 |
1286 | diff@4.0.2:
1287 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
1288 | engines: {node: '>=0.3.1'}
1289 |
1290 | diff@5.2.0:
1291 | resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
1292 | engines: {node: '>=0.3.1'}
1293 |
1294 | digest-fetch@1.3.0:
1295 | resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==}
1296 |
1297 | eastasianwidth@0.2.0:
1298 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
1299 |
1300 | electron-to-chromium@1.5.55:
1301 | resolution: {integrity: sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==}
1302 |
1303 | emoji-regex@8.0.0:
1304 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1305 |
1306 | emoji-regex@9.2.2:
1307 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1308 |
1309 | end-of-stream@1.4.4:
1310 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
1311 |
1312 | esbuild@0.21.5:
1313 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
1314 | engines: {node: '>=12'}
1315 | hasBin: true
1316 |
1317 | esbuild@0.23.1:
1318 | resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
1319 | engines: {node: '>=18'}
1320 | hasBin: true
1321 |
1322 | esbuild@0.24.0:
1323 | resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
1324 | engines: {node: '>=18'}
1325 | hasBin: true
1326 |
1327 | escalade@3.2.0:
1328 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
1329 | engines: {node: '>=6'}
1330 |
1331 | escape-string-regexp@5.0.0:
1332 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
1333 | engines: {node: '>=12'}
1334 |
1335 | esprima@4.0.1:
1336 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
1337 | engines: {node: '>=4'}
1338 | hasBin: true
1339 |
1340 | estree-walker@3.0.3:
1341 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
1342 |
1343 | event-target-shim@5.0.1:
1344 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
1345 | engines: {node: '>=6'}
1346 |
1347 | expand-template@2.0.3:
1348 | resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
1349 | engines: {node: '>=6'}
1350 |
1351 | expect-type@1.1.0:
1352 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
1353 | engines: {node: '>=12.0.0'}
1354 |
1355 | external-editor@3.1.0:
1356 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
1357 | engines: {node: '>=4'}
1358 |
1359 | filename-reserved-regex@3.0.0:
1360 | resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==}
1361 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1362 |
1363 | filenamify@6.0.0:
1364 | resolution: {integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==}
1365 | engines: {node: '>=16'}
1366 |
1367 | fill-range@7.1.1:
1368 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1369 | engines: {node: '>=8'}
1370 |
1371 | find-cache-dir@2.1.0:
1372 | resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
1373 | engines: {node: '>=6'}
1374 |
1375 | find-up@3.0.0:
1376 | resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
1377 | engines: {node: '>=6'}
1378 |
1379 | flow-parser@0.252.0:
1380 | resolution: {integrity: sha512-z8hKPUjZ33VLn4HVntifqmEhmolUMopysnMNzazoDqo1GLUkBsreLNsxETlKJMPotUWStQnen6SGvUNe1j4Hlg==}
1381 | engines: {node: '>=0.4.0'}
1382 |
1383 | foreground-child@3.3.0:
1384 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
1385 | engines: {node: '>=14'}
1386 |
1387 | form-data-encoder@1.7.2:
1388 | resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
1389 |
1390 | form-data@4.0.1:
1391 | resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
1392 | engines: {node: '>= 6'}
1393 |
1394 | formdata-node@4.4.1:
1395 | resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
1396 | engines: {node: '>= 12.20'}
1397 |
1398 | fs-constants@1.0.0:
1399 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
1400 |
1401 | fs.realpath@1.0.0:
1402 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1403 |
1404 | fsevents@2.3.3:
1405 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1406 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1407 | os: [darwin]
1408 |
1409 | gensync@1.0.0-beta.2:
1410 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1411 | engines: {node: '>=6.9.0'}
1412 |
1413 | git-up@7.0.0:
1414 | resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==}
1415 |
1416 | git-url-parse@14.1.0:
1417 | resolution: {integrity: sha512-8xg65dTxGHST3+zGpycMMFZcoTzAdZ2dOtu4vmgIfkTFnVHBxHMzBC2L1k8To7EmrSiHesT8JgPLT91VKw1B5g==}
1418 |
1419 | github-from-package@0.0.0:
1420 | resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
1421 |
1422 | glob@10.4.5:
1423 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
1424 | hasBin: true
1425 |
1426 | glob@7.2.3:
1427 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1428 | deprecated: Glob versions prior to v9 are no longer supported
1429 |
1430 | globals@11.12.0:
1431 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1432 | engines: {node: '>=4'}
1433 |
1434 | graceful-fs@4.2.11:
1435 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1436 |
1437 | has-flag@4.0.0:
1438 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1439 | engines: {node: '>=8'}
1440 |
1441 | html-escaper@2.0.2:
1442 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
1443 |
1444 | humanize-ms@1.2.1:
1445 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
1446 |
1447 | iconv-lite@0.4.24:
1448 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1449 | engines: {node: '>=0.10.0'}
1450 |
1451 | ieee754@1.2.1:
1452 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1453 |
1454 | imurmurhash@0.1.4:
1455 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1456 | engines: {node: '>=0.8.19'}
1457 |
1458 | inflight@1.0.6:
1459 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1460 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
1461 |
1462 | inherits@2.0.4:
1463 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1464 |
1465 | ini@1.3.8:
1466 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
1467 |
1468 | inquirer@9.3.7:
1469 | resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==}
1470 | engines: {node: '>=18'}
1471 |
1472 | is-buffer@1.1.6:
1473 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
1474 |
1475 | is-fullwidth-code-point@3.0.0:
1476 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1477 | engines: {node: '>=8'}
1478 |
1479 | is-interactive@1.0.0:
1480 | resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
1481 | engines: {node: '>=8'}
1482 |
1483 | is-number@7.0.0:
1484 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1485 | engines: {node: '>=0.12.0'}
1486 |
1487 | is-plain-object@2.0.4:
1488 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
1489 | engines: {node: '>=0.10.0'}
1490 |
1491 | is-ssh@1.4.0:
1492 | resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==}
1493 |
1494 | is-unicode-supported@0.1.0:
1495 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
1496 | engines: {node: '>=10'}
1497 |
1498 | isexe@2.0.0:
1499 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1500 |
1501 | isobject@3.0.1:
1502 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
1503 | engines: {node: '>=0.10.0'}
1504 |
1505 | istanbul-lib-coverage@3.2.2:
1506 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
1507 | engines: {node: '>=8'}
1508 |
1509 | istanbul-lib-report@3.0.1:
1510 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
1511 | engines: {node: '>=10'}
1512 |
1513 | istanbul-lib-source-maps@5.0.6:
1514 | resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
1515 | engines: {node: '>=10'}
1516 |
1517 | istanbul-reports@3.1.7:
1518 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
1519 | engines: {node: '>=8'}
1520 |
1521 | jackspeak@3.4.3:
1522 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
1523 |
1524 | js-tokens@4.0.0:
1525 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1526 |
1527 | jscodeshift@0.15.2:
1528 | resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==}
1529 | hasBin: true
1530 | peerDependencies:
1531 | '@babel/preset-env': ^7.1.6
1532 | peerDependenciesMeta:
1533 | '@babel/preset-env':
1534 | optional: true
1535 |
1536 | jscodeshift@0.16.1:
1537 | resolution: {integrity: sha512-oMQXySazy63awNBzMpXbbVv73u3irdxTeX2L5ueRyFRxi32qb9uzdZdOY5fTBYADBG19l5M/wnGknZSV1dzCdA==}
1538 | hasBin: true
1539 | peerDependencies:
1540 | '@babel/preset-env': ^7.1.6
1541 | peerDependenciesMeta:
1542 | '@babel/preset-env':
1543 | optional: true
1544 |
1545 | jscodeshift@17.1.1:
1546 | resolution: {integrity: sha512-4vq5B1sD37aa9qed3zWq2XQPun5XjxebIv+Folr57lt8B4HLGDHEz1UG7pfcxzSaelzPbcY7yZSs033/S0i6wQ==}
1547 | engines: {node: '>=16'}
1548 | hasBin: true
1549 | peerDependencies:
1550 | '@babel/preset-env': ^7.1.6
1551 | peerDependenciesMeta:
1552 | '@babel/preset-env':
1553 | optional: true
1554 |
1555 | jsesc@3.0.2:
1556 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
1557 | engines: {node: '>=6'}
1558 | hasBin: true
1559 |
1560 | json5@2.2.3:
1561 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1562 | engines: {node: '>=6'}
1563 | hasBin: true
1564 |
1565 | keytar@7.9.0:
1566 | resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==}
1567 |
1568 | kind-of@6.0.3:
1569 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
1570 | engines: {node: '>=0.10.0'}
1571 |
1572 | locate-path@3.0.0:
1573 | resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
1574 | engines: {node: '>=6'}
1575 |
1576 | lodash-es@4.17.21:
1577 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
1578 |
1579 | log-symbols@4.1.0:
1580 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
1581 | engines: {node: '>=10'}
1582 |
1583 | loupe@3.1.2:
1584 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==}
1585 |
1586 | lru-cache@10.4.3:
1587 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1588 |
1589 | lru-cache@5.1.1:
1590 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1591 |
1592 | magic-string@0.30.12:
1593 | resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
1594 |
1595 | magicast@0.3.5:
1596 | resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
1597 |
1598 | make-dir@2.1.0:
1599 | resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
1600 | engines: {node: '>=6'}
1601 |
1602 | make-dir@4.0.0:
1603 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
1604 | engines: {node: '>=10'}
1605 |
1606 | make-error@1.3.6:
1607 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
1608 |
1609 | md5@2.3.0:
1610 | resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
1611 |
1612 | micromatch@4.0.8:
1613 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1614 | engines: {node: '>=8.6'}
1615 |
1616 | mime-db@1.52.0:
1617 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1618 | engines: {node: '>= 0.6'}
1619 |
1620 | mime-types@2.1.35:
1621 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1622 | engines: {node: '>= 0.6'}
1623 |
1624 | mimic-fn@2.1.0:
1625 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
1626 | engines: {node: '>=6'}
1627 |
1628 | mimic-response@3.1.0:
1629 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
1630 | engines: {node: '>=10'}
1631 |
1632 | minimatch@3.1.2:
1633 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1634 |
1635 | minimatch@9.0.5:
1636 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1637 | engines: {node: '>=16 || 14 >=14.17'}
1638 |
1639 | minimist@1.2.8:
1640 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
1641 |
1642 | minipass@7.1.2:
1643 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1644 | engines: {node: '>=16 || 14 >=14.17'}
1645 |
1646 | mkdirp-classic@0.5.3:
1647 | resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
1648 |
1649 | mkdirp@0.5.6:
1650 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1651 | hasBin: true
1652 |
1653 | ms@2.1.3:
1654 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1655 |
1656 | mute-stream@1.0.0:
1657 | resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
1658 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
1659 |
1660 | nanoid@3.3.7:
1661 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
1662 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1663 | hasBin: true
1664 |
1665 | napi-build-utils@1.0.2:
1666 | resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
1667 |
1668 | neo-async@2.6.2:
1669 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
1670 |
1671 | node-abi@3.71.0:
1672 | resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==}
1673 | engines: {node: '>=10'}
1674 |
1675 | node-addon-api@4.3.0:
1676 | resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==}
1677 |
1678 | node-dir@0.1.17:
1679 | resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==}
1680 | engines: {node: '>= 0.10.5'}
1681 |
1682 | node-domexception@1.0.0:
1683 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
1684 | engines: {node: '>=10.5.0'}
1685 |
1686 | node-fetch@2.7.0:
1687 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
1688 | engines: {node: 4.x || >=6.0.0}
1689 | peerDependencies:
1690 | encoding: ^0.1.0
1691 | peerDependenciesMeta:
1692 | encoding:
1693 | optional: true
1694 |
1695 | node-releases@2.0.18:
1696 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
1697 |
1698 | once@1.4.0:
1699 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1700 |
1701 | onetime@5.1.2:
1702 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1703 | engines: {node: '>=6'}
1704 |
1705 | openai@4.23.0:
1706 | resolution: {integrity: sha512-ey2CXh1OTcTUa0AWZWuTpgA9t5GuAG3DVU1MofCRUI7fQJij8XJ3Sr0VtgxoAE69C9wbHBMCux8Z/IQZfSwHiA==}
1707 | hasBin: true
1708 |
1709 | ora@5.4.1:
1710 | resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
1711 | engines: {node: '>=10'}
1712 |
1713 | os-tmpdir@1.0.2:
1714 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
1715 | engines: {node: '>=0.10.0'}
1716 |
1717 | p-limit@2.3.0:
1718 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
1719 | engines: {node: '>=6'}
1720 |
1721 | p-locate@3.0.0:
1722 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
1723 | engines: {node: '>=6'}
1724 |
1725 | p-try@2.2.0:
1726 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
1727 | engines: {node: '>=6'}
1728 |
1729 | package-json-from-dist@1.0.1:
1730 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
1731 |
1732 | parse-path@7.0.0:
1733 | resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==}
1734 |
1735 | parse-url@8.1.0:
1736 | resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==}
1737 |
1738 | path-exists@3.0.0:
1739 | resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
1740 | engines: {node: '>=4'}
1741 |
1742 | path-is-absolute@1.0.1:
1743 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1744 | engines: {node: '>=0.10.0'}
1745 |
1746 | path-key@3.1.1:
1747 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1748 | engines: {node: '>=8'}
1749 |
1750 | path-scurry@1.11.1:
1751 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1752 | engines: {node: '>=16 || 14 >=14.18'}
1753 |
1754 | pathe@1.1.2:
1755 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
1756 |
1757 | pathval@2.0.0:
1758 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
1759 | engines: {node: '>= 14.16'}
1760 |
1761 | picocolors@1.1.1:
1762 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1763 |
1764 | picomatch@2.3.1:
1765 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1766 | engines: {node: '>=8.6'}
1767 |
1768 | pify@4.0.1:
1769 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
1770 | engines: {node: '>=6'}
1771 |
1772 | pirates@4.0.6:
1773 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1774 | engines: {node: '>= 6'}
1775 |
1776 | pkg-dir@3.0.0:
1777 | resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
1778 | engines: {node: '>=6'}
1779 |
1780 | postcss@8.4.47:
1781 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
1782 | engines: {node: ^10 || ^12 || >=14}
1783 |
1784 | prebuild-install@7.1.2:
1785 | resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==}
1786 | engines: {node: '>=10'}
1787 | hasBin: true
1788 |
1789 | prettier@3.3.3:
1790 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
1791 | engines: {node: '>=14'}
1792 | hasBin: true
1793 |
1794 | protocols@2.0.1:
1795 | resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
1796 |
1797 | pump@3.0.2:
1798 | resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
1799 |
1800 | rc@1.2.8:
1801 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
1802 | hasBin: true
1803 |
1804 | readable-stream@3.6.2:
1805 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
1806 | engines: {node: '>= 6'}
1807 |
1808 | recast@0.20.5:
1809 | resolution: {integrity: sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==}
1810 | engines: {node: '>= 4'}
1811 |
1812 | recast@0.23.9:
1813 | resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==}
1814 | engines: {node: '>= 4'}
1815 |
1816 | restore-cursor@3.1.0:
1817 | resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
1818 | engines: {node: '>=8'}
1819 |
1820 | rimraf@2.6.3:
1821 | resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
1822 | deprecated: Rimraf versions prior to v4 are no longer supported
1823 | hasBin: true
1824 |
1825 | rollup@4.24.4:
1826 | resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==}
1827 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1828 | hasBin: true
1829 |
1830 | run-async@3.0.0:
1831 | resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
1832 | engines: {node: '>=0.12.0'}
1833 |
1834 | rxjs@7.8.1:
1835 | resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
1836 |
1837 | safe-buffer@5.2.1:
1838 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1839 |
1840 | safer-buffer@2.1.2:
1841 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1842 |
1843 | semver@5.7.2:
1844 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
1845 | hasBin: true
1846 |
1847 | semver@6.3.1:
1848 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1849 | hasBin: true
1850 |
1851 | semver@7.6.3:
1852 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
1853 | engines: {node: '>=10'}
1854 | hasBin: true
1855 |
1856 | shallow-clone@3.0.1:
1857 | resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
1858 | engines: {node: '>=8'}
1859 |
1860 | shebang-command@2.0.0:
1861 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1862 | engines: {node: '>=8'}
1863 |
1864 | shebang-regex@3.0.0:
1865 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1866 | engines: {node: '>=8'}
1867 |
1868 | siginfo@2.0.0:
1869 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
1870 |
1871 | signal-exit@3.0.7:
1872 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1873 |
1874 | signal-exit@4.1.0:
1875 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1876 | engines: {node: '>=14'}
1877 |
1878 | simple-concat@1.0.1:
1879 | resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
1880 |
1881 | simple-get@4.0.1:
1882 | resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
1883 |
1884 | simple-git@3.27.0:
1885 | resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==}
1886 |
1887 | source-map-js@1.2.1:
1888 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1889 | engines: {node: '>=0.10.0'}
1890 |
1891 | source-map-support@0.5.21:
1892 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1893 |
1894 | source-map@0.6.1:
1895 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1896 | engines: {node: '>=0.10.0'}
1897 |
1898 | stackback@0.0.2:
1899 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
1900 |
1901 | std-env@3.8.0:
1902 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
1903 |
1904 | string-width@4.2.3:
1905 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1906 | engines: {node: '>=8'}
1907 |
1908 | string-width@5.1.2:
1909 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1910 | engines: {node: '>=12'}
1911 |
1912 | string_decoder@1.3.0:
1913 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
1914 |
1915 | strip-ansi@6.0.1:
1916 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1917 | engines: {node: '>=8'}
1918 |
1919 | strip-ansi@7.1.0:
1920 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1921 | engines: {node: '>=12'}
1922 |
1923 | strip-json-comments@2.0.1:
1924 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
1925 | engines: {node: '>=0.10.0'}
1926 |
1927 | supports-color@7.2.0:
1928 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1929 | engines: {node: '>=8'}
1930 |
1931 | tar-fs@2.1.1:
1932 | resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
1933 |
1934 | tar-stream@2.2.0:
1935 | resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
1936 | engines: {node: '>=6'}
1937 |
1938 | temp@0.8.4:
1939 | resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==}
1940 | engines: {node: '>=6.0.0'}
1941 |
1942 | temp@0.9.4:
1943 | resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==}
1944 | engines: {node: '>=6.0.0'}
1945 |
1946 | test-exclude@7.0.1:
1947 | resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
1948 | engines: {node: '>=18'}
1949 |
1950 | tiny-invariant@1.3.3:
1951 | resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
1952 |
1953 | tinybench@2.9.0:
1954 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
1955 |
1956 | tinyexec@0.3.1:
1957 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
1958 |
1959 | tinypool@1.0.1:
1960 | resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==}
1961 | engines: {node: ^18.0.0 || >=20.0.0}
1962 |
1963 | tinyrainbow@1.2.0:
1964 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
1965 | engines: {node: '>=14.0.0'}
1966 |
1967 | tinyspy@3.0.2:
1968 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
1969 | engines: {node: '>=14.0.0'}
1970 |
1971 | tmp@0.0.33:
1972 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
1973 | engines: {node: '>=0.6.0'}
1974 |
1975 | tmp@0.2.3:
1976 | resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
1977 | engines: {node: '>=14.14'}
1978 |
1979 | to-regex-range@5.0.1:
1980 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1981 | engines: {node: '>=8.0'}
1982 |
1983 | tr46@0.0.3:
1984 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
1985 |
1986 | tree-kill@1.2.2:
1987 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
1988 | hasBin: true
1989 |
1990 | ts-invariant@0.10.3:
1991 | resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==}
1992 | engines: {node: '>=8'}
1993 |
1994 | ts-node@10.9.2:
1995 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
1996 | hasBin: true
1997 | peerDependencies:
1998 | '@swc/core': '>=1.2.50'
1999 | '@swc/wasm': '>=1.2.50'
2000 | '@types/node': '*'
2001 | typescript: '>=2.7'
2002 | peerDependenciesMeta:
2003 | '@swc/core':
2004 | optional: true
2005 | '@swc/wasm':
2006 | optional: true
2007 |
2008 | tslib@2.8.1:
2009 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
2010 |
2011 | tunnel-agent@0.6.0:
2012 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
2013 |
2014 | type-fest@0.21.3:
2015 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
2016 | engines: {node: '>=10'}
2017 |
2018 | typescript@5.6.3:
2019 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
2020 | engines: {node: '>=14.17'}
2021 | hasBin: true
2022 |
2023 | undici-types@5.26.5:
2024 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
2025 |
2026 | undici-types@6.19.8:
2027 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
2028 |
2029 | universal-user-agent@6.0.1:
2030 | resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
2031 |
2032 | update-browserslist-db@1.1.1:
2033 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
2034 | hasBin: true
2035 | peerDependencies:
2036 | browserslist: '>= 4.21.0'
2037 |
2038 | util-deprecate@1.0.2:
2039 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2040 |
2041 | v8-compile-cache-lib@3.0.1:
2042 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
2043 |
2044 | vite-node@2.1.4:
2045 | resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==}
2046 | engines: {node: ^18.0.0 || >=20.0.0}
2047 | hasBin: true
2048 |
2049 | vite@5.4.10:
2050 | resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==}
2051 | engines: {node: ^18.0.0 || >=20.0.0}
2052 | hasBin: true
2053 | peerDependencies:
2054 | '@types/node': ^18.0.0 || >=20.0.0
2055 | less: '*'
2056 | lightningcss: ^1.21.0
2057 | sass: '*'
2058 | sass-embedded: '*'
2059 | stylus: '*'
2060 | sugarss: '*'
2061 | terser: ^5.4.0
2062 | peerDependenciesMeta:
2063 | '@types/node':
2064 | optional: true
2065 | less:
2066 | optional: true
2067 | lightningcss:
2068 | optional: true
2069 | sass:
2070 | optional: true
2071 | sass-embedded:
2072 | optional: true
2073 | stylus:
2074 | optional: true
2075 | sugarss:
2076 | optional: true
2077 | terser:
2078 | optional: true
2079 |
2080 | vitest@2.1.4:
2081 | resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==}
2082 | engines: {node: ^18.0.0 || >=20.0.0}
2083 | hasBin: true
2084 | peerDependencies:
2085 | '@edge-runtime/vm': '*'
2086 | '@types/node': ^18.0.0 || >=20.0.0
2087 | '@vitest/browser': 2.1.4
2088 | '@vitest/ui': 2.1.4
2089 | happy-dom: '*'
2090 | jsdom: '*'
2091 | peerDependenciesMeta:
2092 | '@edge-runtime/vm':
2093 | optional: true
2094 | '@types/node':
2095 | optional: true
2096 | '@vitest/browser':
2097 | optional: true
2098 | '@vitest/ui':
2099 | optional: true
2100 | happy-dom:
2101 | optional: true
2102 | jsdom:
2103 | optional: true
2104 |
2105 | wcwidth@1.0.1:
2106 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
2107 |
2108 | web-streams-polyfill@3.3.3:
2109 | resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
2110 | engines: {node: '>= 8'}
2111 |
2112 | web-streams-polyfill@4.0.0-beta.3:
2113 | resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
2114 | engines: {node: '>= 14'}
2115 |
2116 | webidl-conversions@3.0.1:
2117 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
2118 |
2119 | whatwg-url@5.0.0:
2120 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
2121 |
2122 | which@2.0.2:
2123 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2124 | engines: {node: '>= 8'}
2125 | hasBin: true
2126 |
2127 | why-is-node-running@2.3.0:
2128 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
2129 | engines: {node: '>=8'}
2130 | hasBin: true
2131 |
2132 | wrap-ansi@6.2.0:
2133 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
2134 | engines: {node: '>=8'}
2135 |
2136 | wrap-ansi@7.0.0:
2137 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2138 | engines: {node: '>=10'}
2139 |
2140 | wrap-ansi@8.1.0:
2141 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
2142 | engines: {node: '>=12'}
2143 |
2144 | wrappy@1.0.2:
2145 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2146 |
2147 | write-file-atomic@2.4.3:
2148 | resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
2149 |
2150 | write-file-atomic@5.0.1:
2151 | resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
2152 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
2153 |
2154 | yallist@3.1.1:
2155 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
2156 |
2157 | yaml@2.6.0:
2158 | resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==}
2159 | engines: {node: '>= 14'}
2160 | hasBin: true
2161 |
2162 | yn@3.1.1:
2163 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
2164 | engines: {node: '>=6'}
2165 |
2166 | yoctocolors-cjs@2.1.2:
2167 | resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
2168 | engines: {node: '>=18'}
2169 |
2170 | snapshots:
2171 |
2172 | '@ampproject/remapping@2.3.0':
2173 | dependencies:
2174 | '@jridgewell/gen-mapping': 0.3.5
2175 | '@jridgewell/trace-mapping': 0.3.25
2176 |
2177 | '@ast-grep/cli-darwin-arm64@0.25.7':
2178 | optional: true
2179 |
2180 | '@ast-grep/cli-darwin-x64@0.25.7':
2181 | optional: true
2182 |
2183 | '@ast-grep/cli-linux-arm64-gnu@0.25.7':
2184 | optional: true
2185 |
2186 | '@ast-grep/cli-linux-x64-gnu@0.25.7':
2187 | optional: true
2188 |
2189 | '@ast-grep/cli-win32-arm64-msvc@0.25.7':
2190 | optional: true
2191 |
2192 | '@ast-grep/cli-win32-ia32-msvc@0.25.7':
2193 | optional: true
2194 |
2195 | '@ast-grep/cli-win32-x64-msvc@0.25.7':
2196 | optional: true
2197 |
2198 | '@ast-grep/cli@0.25.7':
2199 | dependencies:
2200 | detect-libc: 2.0.3
2201 | optionalDependencies:
2202 | '@ast-grep/cli-darwin-arm64': 0.25.7
2203 | '@ast-grep/cli-darwin-x64': 0.25.7
2204 | '@ast-grep/cli-linux-arm64-gnu': 0.25.7
2205 | '@ast-grep/cli-linux-x64-gnu': 0.25.7
2206 | '@ast-grep/cli-win32-arm64-msvc': 0.25.7
2207 | '@ast-grep/cli-win32-ia32-msvc': 0.25.7
2208 | '@ast-grep/cli-win32-x64-msvc': 0.25.7
2209 |
2210 | '@ast-grep/napi-darwin-arm64@0.25.7':
2211 | optional: true
2212 |
2213 | '@ast-grep/napi-darwin-x64@0.25.7':
2214 | optional: true
2215 |
2216 | '@ast-grep/napi-linux-arm64-gnu@0.25.7':
2217 | optional: true
2218 |
2219 | '@ast-grep/napi-linux-arm64-musl@0.25.7':
2220 | optional: true
2221 |
2222 | '@ast-grep/napi-linux-x64-gnu@0.25.7':
2223 | optional: true
2224 |
2225 | '@ast-grep/napi-linux-x64-musl@0.25.7':
2226 | optional: true
2227 |
2228 | '@ast-grep/napi-win32-arm64-msvc@0.25.7':
2229 | optional: true
2230 |
2231 | '@ast-grep/napi-win32-ia32-msvc@0.25.7':
2232 | optional: true
2233 |
2234 | '@ast-grep/napi-win32-x64-msvc@0.25.7':
2235 | optional: true
2236 |
2237 | '@ast-grep/napi@0.25.7':
2238 | optionalDependencies:
2239 | '@ast-grep/napi-darwin-arm64': 0.25.7
2240 | '@ast-grep/napi-darwin-x64': 0.25.7
2241 | '@ast-grep/napi-linux-arm64-gnu': 0.25.7
2242 | '@ast-grep/napi-linux-arm64-musl': 0.25.7
2243 | '@ast-grep/napi-linux-x64-gnu': 0.25.7
2244 | '@ast-grep/napi-linux-x64-musl': 0.25.7
2245 | '@ast-grep/napi-win32-arm64-msvc': 0.25.7
2246 | '@ast-grep/napi-win32-ia32-msvc': 0.25.7
2247 | '@ast-grep/napi-win32-x64-msvc': 0.25.7
2248 |
2249 | '@babel/code-frame@7.26.2':
2250 | dependencies:
2251 | '@babel/helper-validator-identifier': 7.25.9
2252 | js-tokens: 4.0.0
2253 | picocolors: 1.1.1
2254 |
2255 | '@babel/compat-data@7.26.2': {}
2256 |
2257 | '@babel/core@7.26.0':
2258 | dependencies:
2259 | '@ampproject/remapping': 2.3.0
2260 | '@babel/code-frame': 7.26.2
2261 | '@babel/generator': 7.26.2
2262 | '@babel/helper-compilation-targets': 7.25.9
2263 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
2264 | '@babel/helpers': 7.26.0
2265 | '@babel/parser': 7.26.2
2266 | '@babel/template': 7.25.9
2267 | '@babel/traverse': 7.25.9
2268 | '@babel/types': 7.26.0
2269 | convert-source-map: 2.0.0
2270 | debug: 4.3.7
2271 | gensync: 1.0.0-beta.2
2272 | json5: 2.2.3
2273 | semver: 6.3.1
2274 | transitivePeerDependencies:
2275 | - supports-color
2276 |
2277 | '@babel/generator@7.26.2':
2278 | dependencies:
2279 | '@babel/parser': 7.26.2
2280 | '@babel/types': 7.26.0
2281 | '@jridgewell/gen-mapping': 0.3.5
2282 | '@jridgewell/trace-mapping': 0.3.25
2283 | jsesc: 3.0.2
2284 |
2285 | '@babel/helper-annotate-as-pure@7.25.9':
2286 | dependencies:
2287 | '@babel/types': 7.26.0
2288 |
2289 | '@babel/helper-compilation-targets@7.25.9':
2290 | dependencies:
2291 | '@babel/compat-data': 7.26.2
2292 | '@babel/helper-validator-option': 7.25.9
2293 | browserslist: 4.24.2
2294 | lru-cache: 5.1.1
2295 | semver: 6.3.1
2296 |
2297 | '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)':
2298 | dependencies:
2299 | '@babel/core': 7.26.0
2300 | '@babel/helper-annotate-as-pure': 7.25.9
2301 | '@babel/helper-member-expression-to-functions': 7.25.9
2302 | '@babel/helper-optimise-call-expression': 7.25.9
2303 | '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0)
2304 | '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
2305 | '@babel/traverse': 7.25.9
2306 | semver: 6.3.1
2307 | transitivePeerDependencies:
2308 | - supports-color
2309 |
2310 | '@babel/helper-member-expression-to-functions@7.25.9':
2311 | dependencies:
2312 | '@babel/traverse': 7.25.9
2313 | '@babel/types': 7.26.0
2314 | transitivePeerDependencies:
2315 | - supports-color
2316 |
2317 | '@babel/helper-module-imports@7.25.9':
2318 | dependencies:
2319 | '@babel/traverse': 7.25.9
2320 | '@babel/types': 7.26.0
2321 | transitivePeerDependencies:
2322 | - supports-color
2323 |
2324 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)':
2325 | dependencies:
2326 | '@babel/core': 7.26.0
2327 | '@babel/helper-module-imports': 7.25.9
2328 | '@babel/helper-validator-identifier': 7.25.9
2329 | '@babel/traverse': 7.25.9
2330 | transitivePeerDependencies:
2331 | - supports-color
2332 |
2333 | '@babel/helper-optimise-call-expression@7.25.9':
2334 | dependencies:
2335 | '@babel/types': 7.26.0
2336 |
2337 | '@babel/helper-plugin-utils@7.25.9': {}
2338 |
2339 | '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)':
2340 | dependencies:
2341 | '@babel/core': 7.26.0
2342 | '@babel/helper-member-expression-to-functions': 7.25.9
2343 | '@babel/helper-optimise-call-expression': 7.25.9
2344 | '@babel/traverse': 7.25.9
2345 | transitivePeerDependencies:
2346 | - supports-color
2347 |
2348 | '@babel/helper-simple-access@7.25.9':
2349 | dependencies:
2350 | '@babel/traverse': 7.25.9
2351 | '@babel/types': 7.26.0
2352 | transitivePeerDependencies:
2353 | - supports-color
2354 |
2355 | '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
2356 | dependencies:
2357 | '@babel/traverse': 7.25.9
2358 | '@babel/types': 7.26.0
2359 | transitivePeerDependencies:
2360 | - supports-color
2361 |
2362 | '@babel/helper-string-parser@7.25.9': {}
2363 |
2364 | '@babel/helper-validator-identifier@7.25.9': {}
2365 |
2366 | '@babel/helper-validator-option@7.25.9': {}
2367 |
2368 | '@babel/helpers@7.26.0':
2369 | dependencies:
2370 | '@babel/template': 7.25.9
2371 | '@babel/types': 7.26.0
2372 |
2373 | '@babel/parser@7.26.2':
2374 | dependencies:
2375 | '@babel/types': 7.26.0
2376 |
2377 | '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)':
2378 | dependencies:
2379 | '@babel/core': 7.26.0
2380 | '@babel/helper-plugin-utils': 7.25.9
2381 |
2382 | '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)':
2383 | dependencies:
2384 | '@babel/core': 7.26.0
2385 | '@babel/helper-plugin-utils': 7.25.9
2386 |
2387 | '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)':
2388 | dependencies:
2389 | '@babel/core': 7.26.0
2390 | '@babel/helper-plugin-utils': 7.25.9
2391 |
2392 | '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)':
2393 | dependencies:
2394 | '@babel/core': 7.26.0
2395 | '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
2396 | '@babel/helper-plugin-utils': 7.25.9
2397 | transitivePeerDependencies:
2398 | - supports-color
2399 |
2400 | '@babel/plugin-transform-flow-strip-types@7.25.9(@babel/core@7.26.0)':
2401 | dependencies:
2402 | '@babel/core': 7.26.0
2403 | '@babel/helper-plugin-utils': 7.25.9
2404 | '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0)
2405 |
2406 | '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)':
2407 | dependencies:
2408 | '@babel/core': 7.26.0
2409 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
2410 | '@babel/helper-plugin-utils': 7.25.9
2411 | '@babel/helper-simple-access': 7.25.9
2412 | transitivePeerDependencies:
2413 | - supports-color
2414 |
2415 | '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)':
2416 | dependencies:
2417 | '@babel/core': 7.26.0
2418 | '@babel/helper-plugin-utils': 7.25.9
2419 |
2420 | '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)':
2421 | dependencies:
2422 | '@babel/core': 7.26.0
2423 | '@babel/helper-plugin-utils': 7.25.9
2424 | '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
2425 | transitivePeerDependencies:
2426 | - supports-color
2427 |
2428 | '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)':
2429 | dependencies:
2430 | '@babel/core': 7.26.0
2431 | '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
2432 | '@babel/helper-plugin-utils': 7.25.9
2433 | transitivePeerDependencies:
2434 | - supports-color
2435 |
2436 | '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)':
2437 | dependencies:
2438 | '@babel/core': 7.26.0
2439 | '@babel/helper-annotate-as-pure': 7.25.9
2440 | '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
2441 | '@babel/helper-plugin-utils': 7.25.9
2442 | '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
2443 | '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
2444 | transitivePeerDependencies:
2445 | - supports-color
2446 |
2447 | '@babel/preset-flow@7.25.9(@babel/core@7.26.0)':
2448 | dependencies:
2449 | '@babel/core': 7.26.0
2450 | '@babel/helper-plugin-utils': 7.25.9
2451 | '@babel/helper-validator-option': 7.25.9
2452 | '@babel/plugin-transform-flow-strip-types': 7.25.9(@babel/core@7.26.0)
2453 |
2454 | '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)':
2455 | dependencies:
2456 | '@babel/core': 7.26.0
2457 | '@babel/helper-plugin-utils': 7.25.9
2458 | '@babel/helper-validator-option': 7.25.9
2459 | '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
2460 | '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0)
2461 | '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0)
2462 | transitivePeerDependencies:
2463 | - supports-color
2464 |
2465 | '@babel/register@7.25.9(@babel/core@7.26.0)':
2466 | dependencies:
2467 | '@babel/core': 7.26.0
2468 | clone-deep: 4.0.1
2469 | find-cache-dir: 2.1.0
2470 | make-dir: 2.1.0
2471 | pirates: 4.0.6
2472 | source-map-support: 0.5.21
2473 |
2474 | '@babel/template@7.25.9':
2475 | dependencies:
2476 | '@babel/code-frame': 7.26.2
2477 | '@babel/parser': 7.26.2
2478 | '@babel/types': 7.26.0
2479 |
2480 | '@babel/traverse@7.25.9':
2481 | dependencies:
2482 | '@babel/code-frame': 7.26.2
2483 | '@babel/generator': 7.26.2
2484 | '@babel/parser': 7.26.2
2485 | '@babel/template': 7.25.9
2486 | '@babel/types': 7.26.0
2487 | debug: 4.3.7
2488 | globals: 11.12.0
2489 | transitivePeerDependencies:
2490 | - supports-color
2491 |
2492 | '@babel/types@7.26.0':
2493 | dependencies:
2494 | '@babel/helper-string-parser': 7.25.9
2495 | '@babel/helper-validator-identifier': 7.25.9
2496 |
2497 | '@bcoe/v8-coverage@0.2.3': {}
2498 |
2499 | '@codemod.com/codemod-utils@1.0.0':
2500 | dependencies:
2501 | '@babel/parser': 7.26.2
2502 | '@types/jscodeshift': 0.11.11
2503 | jscodeshift: 0.16.1
2504 | transitivePeerDependencies:
2505 | - '@babel/preset-env'
2506 | - supports-color
2507 |
2508 | '@codemod.com/workflow@0.0.31':
2509 | dependencies:
2510 | '@ast-grep/cli': 0.25.7
2511 | '@ast-grep/napi': 0.25.7
2512 | '@octokit/rest': 20.1.1
2513 | '@sindresorhus/slugify': 2.2.1
2514 | '@types/jscodeshift': 0.11.11
2515 | colors-cli: 1.0.33
2516 | detect-indent: 7.0.1
2517 | detect-newline: 4.0.1
2518 | diff: 5.2.0
2519 | filenamify: 6.0.0
2520 | git-url-parse: 14.1.0
2521 | glob: 10.4.5
2522 | inquirer: 9.3.7
2523 | jscodeshift: 0.15.2
2524 | lodash-es: 4.17.21
2525 | magic-string: 0.30.12
2526 | openai: 4.23.0
2527 | prettier: 3.3.3
2528 | simple-git: 3.27.0
2529 | tree-kill: 1.2.2
2530 | ts-invariant: 0.10.3
2531 | yaml: 2.6.0
2532 | transitivePeerDependencies:
2533 | - '@babel/preset-env'
2534 | - encoding
2535 | - supports-color
2536 |
2537 | '@cspotcode/source-map-support@0.8.1':
2538 | dependencies:
2539 | '@jridgewell/trace-mapping': 0.3.9
2540 |
2541 | '@esbuild/aix-ppc64@0.21.5':
2542 | optional: true
2543 |
2544 | '@esbuild/aix-ppc64@0.23.1':
2545 | optional: true
2546 |
2547 | '@esbuild/aix-ppc64@0.24.0':
2548 | optional: true
2549 |
2550 | '@esbuild/android-arm64@0.21.5':
2551 | optional: true
2552 |
2553 | '@esbuild/android-arm64@0.23.1':
2554 | optional: true
2555 |
2556 | '@esbuild/android-arm64@0.24.0':
2557 | optional: true
2558 |
2559 | '@esbuild/android-arm@0.21.5':
2560 | optional: true
2561 |
2562 | '@esbuild/android-arm@0.23.1':
2563 | optional: true
2564 |
2565 | '@esbuild/android-arm@0.24.0':
2566 | optional: true
2567 |
2568 | '@esbuild/android-x64@0.21.5':
2569 | optional: true
2570 |
2571 | '@esbuild/android-x64@0.23.1':
2572 | optional: true
2573 |
2574 | '@esbuild/android-x64@0.24.0':
2575 | optional: true
2576 |
2577 | '@esbuild/darwin-arm64@0.21.5':
2578 | optional: true
2579 |
2580 | '@esbuild/darwin-arm64@0.23.1':
2581 | optional: true
2582 |
2583 | '@esbuild/darwin-arm64@0.24.0':
2584 | optional: true
2585 |
2586 | '@esbuild/darwin-x64@0.21.5':
2587 | optional: true
2588 |
2589 | '@esbuild/darwin-x64@0.23.1':
2590 | optional: true
2591 |
2592 | '@esbuild/darwin-x64@0.24.0':
2593 | optional: true
2594 |
2595 | '@esbuild/freebsd-arm64@0.21.5':
2596 | optional: true
2597 |
2598 | '@esbuild/freebsd-arm64@0.23.1':
2599 | optional: true
2600 |
2601 | '@esbuild/freebsd-arm64@0.24.0':
2602 | optional: true
2603 |
2604 | '@esbuild/freebsd-x64@0.21.5':
2605 | optional: true
2606 |
2607 | '@esbuild/freebsd-x64@0.23.1':
2608 | optional: true
2609 |
2610 | '@esbuild/freebsd-x64@0.24.0':
2611 | optional: true
2612 |
2613 | '@esbuild/linux-arm64@0.21.5':
2614 | optional: true
2615 |
2616 | '@esbuild/linux-arm64@0.23.1':
2617 | optional: true
2618 |
2619 | '@esbuild/linux-arm64@0.24.0':
2620 | optional: true
2621 |
2622 | '@esbuild/linux-arm@0.21.5':
2623 | optional: true
2624 |
2625 | '@esbuild/linux-arm@0.23.1':
2626 | optional: true
2627 |
2628 | '@esbuild/linux-arm@0.24.0':
2629 | optional: true
2630 |
2631 | '@esbuild/linux-ia32@0.21.5':
2632 | optional: true
2633 |
2634 | '@esbuild/linux-ia32@0.23.1':
2635 | optional: true
2636 |
2637 | '@esbuild/linux-ia32@0.24.0':
2638 | optional: true
2639 |
2640 | '@esbuild/linux-loong64@0.21.5':
2641 | optional: true
2642 |
2643 | '@esbuild/linux-loong64@0.23.1':
2644 | optional: true
2645 |
2646 | '@esbuild/linux-loong64@0.24.0':
2647 | optional: true
2648 |
2649 | '@esbuild/linux-mips64el@0.21.5':
2650 | optional: true
2651 |
2652 | '@esbuild/linux-mips64el@0.23.1':
2653 | optional: true
2654 |
2655 | '@esbuild/linux-mips64el@0.24.0':
2656 | optional: true
2657 |
2658 | '@esbuild/linux-ppc64@0.21.5':
2659 | optional: true
2660 |
2661 | '@esbuild/linux-ppc64@0.23.1':
2662 | optional: true
2663 |
2664 | '@esbuild/linux-ppc64@0.24.0':
2665 | optional: true
2666 |
2667 | '@esbuild/linux-riscv64@0.21.5':
2668 | optional: true
2669 |
2670 | '@esbuild/linux-riscv64@0.23.1':
2671 | optional: true
2672 |
2673 | '@esbuild/linux-riscv64@0.24.0':
2674 | optional: true
2675 |
2676 | '@esbuild/linux-s390x@0.21.5':
2677 | optional: true
2678 |
2679 | '@esbuild/linux-s390x@0.23.1':
2680 | optional: true
2681 |
2682 | '@esbuild/linux-s390x@0.24.0':
2683 | optional: true
2684 |
2685 | '@esbuild/linux-x64@0.21.5':
2686 | optional: true
2687 |
2688 | '@esbuild/linux-x64@0.23.1':
2689 | optional: true
2690 |
2691 | '@esbuild/linux-x64@0.24.0':
2692 | optional: true
2693 |
2694 | '@esbuild/netbsd-x64@0.21.5':
2695 | optional: true
2696 |
2697 | '@esbuild/netbsd-x64@0.23.1':
2698 | optional: true
2699 |
2700 | '@esbuild/netbsd-x64@0.24.0':
2701 | optional: true
2702 |
2703 | '@esbuild/openbsd-arm64@0.23.1':
2704 | optional: true
2705 |
2706 | '@esbuild/openbsd-arm64@0.24.0':
2707 | optional: true
2708 |
2709 | '@esbuild/openbsd-x64@0.21.5':
2710 | optional: true
2711 |
2712 | '@esbuild/openbsd-x64@0.23.1':
2713 | optional: true
2714 |
2715 | '@esbuild/openbsd-x64@0.24.0':
2716 | optional: true
2717 |
2718 | '@esbuild/sunos-x64@0.21.5':
2719 | optional: true
2720 |
2721 | '@esbuild/sunos-x64@0.23.1':
2722 | optional: true
2723 |
2724 | '@esbuild/sunos-x64@0.24.0':
2725 | optional: true
2726 |
2727 | '@esbuild/win32-arm64@0.21.5':
2728 | optional: true
2729 |
2730 | '@esbuild/win32-arm64@0.23.1':
2731 | optional: true
2732 |
2733 | '@esbuild/win32-arm64@0.24.0':
2734 | optional: true
2735 |
2736 | '@esbuild/win32-ia32@0.21.5':
2737 | optional: true
2738 |
2739 | '@esbuild/win32-ia32@0.23.1':
2740 | optional: true
2741 |
2742 | '@esbuild/win32-ia32@0.24.0':
2743 | optional: true
2744 |
2745 | '@esbuild/win32-x64@0.21.5':
2746 | optional: true
2747 |
2748 | '@esbuild/win32-x64@0.23.1':
2749 | optional: true
2750 |
2751 | '@esbuild/win32-x64@0.24.0':
2752 | optional: true
2753 |
2754 | '@inquirer/figures@1.0.7': {}
2755 |
2756 | '@isaacs/cliui@8.0.2':
2757 | dependencies:
2758 | string-width: 5.1.2
2759 | string-width-cjs: string-width@4.2.3
2760 | strip-ansi: 7.1.0
2761 | strip-ansi-cjs: strip-ansi@6.0.1
2762 | wrap-ansi: 8.1.0
2763 | wrap-ansi-cjs: wrap-ansi@7.0.0
2764 |
2765 | '@istanbuljs/schema@0.1.3': {}
2766 |
2767 | '@jridgewell/gen-mapping@0.3.5':
2768 | dependencies:
2769 | '@jridgewell/set-array': 1.2.1
2770 | '@jridgewell/sourcemap-codec': 1.5.0
2771 | '@jridgewell/trace-mapping': 0.3.25
2772 |
2773 | '@jridgewell/resolve-uri@3.1.2': {}
2774 |
2775 | '@jridgewell/set-array@1.2.1': {}
2776 |
2777 | '@jridgewell/sourcemap-codec@1.5.0': {}
2778 |
2779 | '@jridgewell/trace-mapping@0.3.25':
2780 | dependencies:
2781 | '@jridgewell/resolve-uri': 3.1.2
2782 | '@jridgewell/sourcemap-codec': 1.5.0
2783 |
2784 | '@jridgewell/trace-mapping@0.3.9':
2785 | dependencies:
2786 | '@jridgewell/resolve-uri': 3.1.2
2787 | '@jridgewell/sourcemap-codec': 1.5.0
2788 |
2789 | '@kwsites/file-exists@1.1.1':
2790 | dependencies:
2791 | debug: 4.3.7
2792 | transitivePeerDependencies:
2793 | - supports-color
2794 |
2795 | '@kwsites/promise-deferred@1.1.1': {}
2796 |
2797 | '@octokit/auth-token@4.0.0': {}
2798 |
2799 | '@octokit/core@5.2.0':
2800 | dependencies:
2801 | '@octokit/auth-token': 4.0.0
2802 | '@octokit/graphql': 7.1.0
2803 | '@octokit/request': 8.4.0
2804 | '@octokit/request-error': 5.1.0
2805 | '@octokit/types': 13.6.1
2806 | before-after-hook: 2.2.3
2807 | universal-user-agent: 6.0.1
2808 |
2809 | '@octokit/endpoint@9.0.5':
2810 | dependencies:
2811 | '@octokit/types': 13.6.1
2812 | universal-user-agent: 6.0.1
2813 |
2814 | '@octokit/graphql@7.1.0':
2815 | dependencies:
2816 | '@octokit/request': 8.4.0
2817 | '@octokit/types': 13.6.1
2818 | universal-user-agent: 6.0.1
2819 |
2820 | '@octokit/openapi-types@22.2.0': {}
2821 |
2822 | '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)':
2823 | dependencies:
2824 | '@octokit/core': 5.2.0
2825 | '@octokit/types': 13.6.1
2826 |
2827 | '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)':
2828 | dependencies:
2829 | '@octokit/core': 5.2.0
2830 |
2831 | '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)':
2832 | dependencies:
2833 | '@octokit/core': 5.2.0
2834 | '@octokit/types': 13.6.1
2835 |
2836 | '@octokit/request-error@5.1.0':
2837 | dependencies:
2838 | '@octokit/types': 13.6.1
2839 | deprecation: 2.3.1
2840 | once: 1.4.0
2841 |
2842 | '@octokit/request@8.4.0':
2843 | dependencies:
2844 | '@octokit/endpoint': 9.0.5
2845 | '@octokit/request-error': 5.1.0
2846 | '@octokit/types': 13.6.1
2847 | universal-user-agent: 6.0.1
2848 |
2849 | '@octokit/rest@20.1.1':
2850 | dependencies:
2851 | '@octokit/core': 5.2.0
2852 | '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0)
2853 | '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0)
2854 | '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0)
2855 |
2856 | '@octokit/types@13.6.1':
2857 | dependencies:
2858 | '@octokit/openapi-types': 22.2.0
2859 |
2860 | '@pkgjs/parseargs@0.11.0':
2861 | optional: true
2862 |
2863 | '@rollup/rollup-android-arm-eabi@4.24.4':
2864 | optional: true
2865 |
2866 | '@rollup/rollup-android-arm64@4.24.4':
2867 | optional: true
2868 |
2869 | '@rollup/rollup-darwin-arm64@4.24.4':
2870 | optional: true
2871 |
2872 | '@rollup/rollup-darwin-x64@4.24.4':
2873 | optional: true
2874 |
2875 | '@rollup/rollup-freebsd-arm64@4.24.4':
2876 | optional: true
2877 |
2878 | '@rollup/rollup-freebsd-x64@4.24.4':
2879 | optional: true
2880 |
2881 | '@rollup/rollup-linux-arm-gnueabihf@4.24.4':
2882 | optional: true
2883 |
2884 | '@rollup/rollup-linux-arm-musleabihf@4.24.4':
2885 | optional: true
2886 |
2887 | '@rollup/rollup-linux-arm64-gnu@4.24.4':
2888 | optional: true
2889 |
2890 | '@rollup/rollup-linux-arm64-musl@4.24.4':
2891 | optional: true
2892 |
2893 | '@rollup/rollup-linux-powerpc64le-gnu@4.24.4':
2894 | optional: true
2895 |
2896 | '@rollup/rollup-linux-riscv64-gnu@4.24.4':
2897 | optional: true
2898 |
2899 | '@rollup/rollup-linux-s390x-gnu@4.24.4':
2900 | optional: true
2901 |
2902 | '@rollup/rollup-linux-x64-gnu@4.24.4':
2903 | optional: true
2904 |
2905 | '@rollup/rollup-linux-x64-musl@4.24.4':
2906 | optional: true
2907 |
2908 | '@rollup/rollup-win32-arm64-msvc@4.24.4':
2909 | optional: true
2910 |
2911 | '@rollup/rollup-win32-ia32-msvc@4.24.4':
2912 | optional: true
2913 |
2914 | '@rollup/rollup-win32-x64-msvc@4.24.4':
2915 | optional: true
2916 |
2917 | '@sindresorhus/slugify@2.2.1':
2918 | dependencies:
2919 | '@sindresorhus/transliterate': 1.6.0
2920 | escape-string-regexp: 5.0.0
2921 |
2922 | '@sindresorhus/transliterate@1.6.0':
2923 | dependencies:
2924 | escape-string-regexp: 5.0.0
2925 |
2926 | '@tsconfig/node10@1.0.11': {}
2927 |
2928 | '@tsconfig/node12@1.0.11': {}
2929 |
2930 | '@tsconfig/node14@1.0.3': {}
2931 |
2932 | '@tsconfig/node16@1.0.4': {}
2933 |
2934 | '@types/estree@1.0.6': {}
2935 |
2936 | '@types/jscodeshift@0.11.11':
2937 | dependencies:
2938 | ast-types: 0.14.2
2939 | recast: 0.20.5
2940 |
2941 | '@types/node-fetch@2.6.11':
2942 | dependencies:
2943 | '@types/node': 22.9.0
2944 | form-data: 4.0.1
2945 |
2946 | '@types/node@18.19.64':
2947 | dependencies:
2948 | undici-types: 5.26.5
2949 |
2950 | '@types/node@22.9.0':
2951 | dependencies:
2952 | undici-types: 6.19.8
2953 |
2954 | '@vitest/coverage-v8@2.1.4(vitest@2.1.4(@types/node@22.9.0))':
2955 | dependencies:
2956 | '@ampproject/remapping': 2.3.0
2957 | '@bcoe/v8-coverage': 0.2.3
2958 | debug: 4.3.7
2959 | istanbul-lib-coverage: 3.2.2
2960 | istanbul-lib-report: 3.0.1
2961 | istanbul-lib-source-maps: 5.0.6
2962 | istanbul-reports: 3.1.7
2963 | magic-string: 0.30.12
2964 | magicast: 0.3.5
2965 | std-env: 3.8.0
2966 | test-exclude: 7.0.1
2967 | tinyrainbow: 1.2.0
2968 | vitest: 2.1.4(@types/node@22.9.0)
2969 | transitivePeerDependencies:
2970 | - supports-color
2971 |
2972 | '@vitest/expect@2.1.4':
2973 | dependencies:
2974 | '@vitest/spy': 2.1.4
2975 | '@vitest/utils': 2.1.4
2976 | chai: 5.1.2
2977 | tinyrainbow: 1.2.0
2978 |
2979 | '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.9.0))':
2980 | dependencies:
2981 | '@vitest/spy': 2.1.4
2982 | estree-walker: 3.0.3
2983 | magic-string: 0.30.12
2984 | optionalDependencies:
2985 | vite: 5.4.10(@types/node@22.9.0)
2986 |
2987 | '@vitest/pretty-format@2.1.4':
2988 | dependencies:
2989 | tinyrainbow: 1.2.0
2990 |
2991 | '@vitest/runner@2.1.4':
2992 | dependencies:
2993 | '@vitest/utils': 2.1.4
2994 | pathe: 1.1.2
2995 |
2996 | '@vitest/snapshot@2.1.4':
2997 | dependencies:
2998 | '@vitest/pretty-format': 2.1.4
2999 | magic-string: 0.30.12
3000 | pathe: 1.1.2
3001 |
3002 | '@vitest/spy@2.1.4':
3003 | dependencies:
3004 | tinyspy: 3.0.2
3005 |
3006 | '@vitest/utils@2.1.4':
3007 | dependencies:
3008 | '@vitest/pretty-format': 2.1.4
3009 | loupe: 3.1.2
3010 | tinyrainbow: 1.2.0
3011 |
3012 | abort-controller@3.0.0:
3013 | dependencies:
3014 | event-target-shim: 5.0.1
3015 |
3016 | acorn-walk@8.3.4:
3017 | dependencies:
3018 | acorn: 8.14.0
3019 |
3020 | acorn@8.14.0: {}
3021 |
3022 | agentkeepalive@4.5.0:
3023 | dependencies:
3024 | humanize-ms: 1.2.1
3025 |
3026 | ansi-escapes@4.3.2:
3027 | dependencies:
3028 | type-fest: 0.21.3
3029 |
3030 | ansi-regex@5.0.1: {}
3031 |
3032 | ansi-regex@6.1.0: {}
3033 |
3034 | ansi-styles@4.3.0:
3035 | dependencies:
3036 | color-convert: 2.0.1
3037 |
3038 | ansi-styles@6.2.1: {}
3039 |
3040 | arg@4.1.3: {}
3041 |
3042 | assertion-error@2.0.1: {}
3043 |
3044 | ast-types@0.14.2:
3045 | dependencies:
3046 | tslib: 2.8.1
3047 |
3048 | ast-types@0.16.1:
3049 | dependencies:
3050 | tslib: 2.8.1
3051 |
3052 | asynckit@0.4.0: {}
3053 |
3054 | babel-core@7.0.0-bridge.0(@babel/core@7.26.0):
3055 | dependencies:
3056 | '@babel/core': 7.26.0
3057 |
3058 | balanced-match@1.0.2: {}
3059 |
3060 | base-64@0.1.0: {}
3061 |
3062 | base64-js@1.5.1: {}
3063 |
3064 | before-after-hook@2.2.3: {}
3065 |
3066 | bl@4.1.0:
3067 | dependencies:
3068 | buffer: 5.7.1
3069 | inherits: 2.0.4
3070 | readable-stream: 3.6.2
3071 |
3072 | blessed@0.1.81: {}
3073 |
3074 | brace-expansion@1.1.11:
3075 | dependencies:
3076 | balanced-match: 1.0.2
3077 | concat-map: 0.0.1
3078 |
3079 | brace-expansion@2.0.1:
3080 | dependencies:
3081 | balanced-match: 1.0.2
3082 |
3083 | braces@3.0.3:
3084 | dependencies:
3085 | fill-range: 7.1.1
3086 |
3087 | browserslist@4.24.2:
3088 | dependencies:
3089 | caniuse-lite: 1.0.30001679
3090 | electron-to-chromium: 1.5.55
3091 | node-releases: 2.0.18
3092 | update-browserslist-db: 1.1.1(browserslist@4.24.2)
3093 |
3094 | buffer-from@1.1.2: {}
3095 |
3096 | buffer@5.7.1:
3097 | dependencies:
3098 | base64-js: 1.5.1
3099 | ieee754: 1.2.1
3100 |
3101 | cac@6.7.14: {}
3102 |
3103 | caniuse-lite@1.0.30001679: {}
3104 |
3105 | chai@5.1.2:
3106 | dependencies:
3107 | assertion-error: 2.0.1
3108 | check-error: 2.1.1
3109 | deep-eql: 5.0.2
3110 | loupe: 3.1.2
3111 | pathval: 2.0.0
3112 |
3113 | chalk@4.1.2:
3114 | dependencies:
3115 | ansi-styles: 4.3.0
3116 | supports-color: 7.2.0
3117 |
3118 | chardet@0.7.0: {}
3119 |
3120 | charenc@0.0.2: {}
3121 |
3122 | check-error@2.1.1: {}
3123 |
3124 | chownr@1.1.4: {}
3125 |
3126 | cli-cursor@3.1.0:
3127 | dependencies:
3128 | restore-cursor: 3.1.0
3129 |
3130 | cli-spinners@2.9.2: {}
3131 |
3132 | cli-width@4.1.0: {}
3133 |
3134 | clone-deep@4.0.1:
3135 | dependencies:
3136 | is-plain-object: 2.0.4
3137 | kind-of: 6.0.3
3138 | shallow-clone: 3.0.1
3139 |
3140 | clone@1.0.4: {}
3141 |
3142 | codemod@0.14.1:
3143 | dependencies:
3144 | '@ast-grep/cli': 0.25.7
3145 | '@ast-grep/napi': 0.25.7
3146 | '@codemod.com/workflow': 0.0.31
3147 | '@octokit/rest': 20.1.1
3148 | blessed: 0.1.81
3149 | esbuild: 0.23.1
3150 | keytar: 7.9.0
3151 | transitivePeerDependencies:
3152 | - '@babel/preset-env'
3153 | - encoding
3154 | - supports-color
3155 |
3156 | color-convert@2.0.1:
3157 | dependencies:
3158 | color-name: 1.1.4
3159 |
3160 | color-name@1.1.4: {}
3161 |
3162 | colors-cli@1.0.33: {}
3163 |
3164 | combined-stream@1.0.8:
3165 | dependencies:
3166 | delayed-stream: 1.0.0
3167 |
3168 | commondir@1.0.1: {}
3169 |
3170 | concat-map@0.0.1: {}
3171 |
3172 | convert-source-map@2.0.0: {}
3173 |
3174 | create-require@1.1.1: {}
3175 |
3176 | cross-spawn@7.0.5:
3177 | dependencies:
3178 | path-key: 3.1.1
3179 | shebang-command: 2.0.0
3180 | which: 2.0.2
3181 |
3182 | crypt@0.0.2: {}
3183 |
3184 | debug@4.3.7:
3185 | dependencies:
3186 | ms: 2.1.3
3187 |
3188 | decompress-response@6.0.0:
3189 | dependencies:
3190 | mimic-response: 3.1.0
3191 |
3192 | deep-eql@5.0.2: {}
3193 |
3194 | deep-extend@0.6.0: {}
3195 |
3196 | defaults@1.0.4:
3197 | dependencies:
3198 | clone: 1.0.4
3199 |
3200 | delayed-stream@1.0.0: {}
3201 |
3202 | deprecation@2.3.1: {}
3203 |
3204 | detect-indent@7.0.1: {}
3205 |
3206 | detect-libc@2.0.3: {}
3207 |
3208 | detect-newline@4.0.1: {}
3209 |
3210 | diff@4.0.2: {}
3211 |
3212 | diff@5.2.0: {}
3213 |
3214 | digest-fetch@1.3.0:
3215 | dependencies:
3216 | base-64: 0.1.0
3217 | md5: 2.3.0
3218 |
3219 | eastasianwidth@0.2.0: {}
3220 |
3221 | electron-to-chromium@1.5.55: {}
3222 |
3223 | emoji-regex@8.0.0: {}
3224 |
3225 | emoji-regex@9.2.2: {}
3226 |
3227 | end-of-stream@1.4.4:
3228 | dependencies:
3229 | once: 1.4.0
3230 |
3231 | esbuild@0.21.5:
3232 | optionalDependencies:
3233 | '@esbuild/aix-ppc64': 0.21.5
3234 | '@esbuild/android-arm': 0.21.5
3235 | '@esbuild/android-arm64': 0.21.5
3236 | '@esbuild/android-x64': 0.21.5
3237 | '@esbuild/darwin-arm64': 0.21.5
3238 | '@esbuild/darwin-x64': 0.21.5
3239 | '@esbuild/freebsd-arm64': 0.21.5
3240 | '@esbuild/freebsd-x64': 0.21.5
3241 | '@esbuild/linux-arm': 0.21.5
3242 | '@esbuild/linux-arm64': 0.21.5
3243 | '@esbuild/linux-ia32': 0.21.5
3244 | '@esbuild/linux-loong64': 0.21.5
3245 | '@esbuild/linux-mips64el': 0.21.5
3246 | '@esbuild/linux-ppc64': 0.21.5
3247 | '@esbuild/linux-riscv64': 0.21.5
3248 | '@esbuild/linux-s390x': 0.21.5
3249 | '@esbuild/linux-x64': 0.21.5
3250 | '@esbuild/netbsd-x64': 0.21.5
3251 | '@esbuild/openbsd-x64': 0.21.5
3252 | '@esbuild/sunos-x64': 0.21.5
3253 | '@esbuild/win32-arm64': 0.21.5
3254 | '@esbuild/win32-ia32': 0.21.5
3255 | '@esbuild/win32-x64': 0.21.5
3256 |
3257 | esbuild@0.23.1:
3258 | optionalDependencies:
3259 | '@esbuild/aix-ppc64': 0.23.1
3260 | '@esbuild/android-arm': 0.23.1
3261 | '@esbuild/android-arm64': 0.23.1
3262 | '@esbuild/android-x64': 0.23.1
3263 | '@esbuild/darwin-arm64': 0.23.1
3264 | '@esbuild/darwin-x64': 0.23.1
3265 | '@esbuild/freebsd-arm64': 0.23.1
3266 | '@esbuild/freebsd-x64': 0.23.1
3267 | '@esbuild/linux-arm': 0.23.1
3268 | '@esbuild/linux-arm64': 0.23.1
3269 | '@esbuild/linux-ia32': 0.23.1
3270 | '@esbuild/linux-loong64': 0.23.1
3271 | '@esbuild/linux-mips64el': 0.23.1
3272 | '@esbuild/linux-ppc64': 0.23.1
3273 | '@esbuild/linux-riscv64': 0.23.1
3274 | '@esbuild/linux-s390x': 0.23.1
3275 | '@esbuild/linux-x64': 0.23.1
3276 | '@esbuild/netbsd-x64': 0.23.1
3277 | '@esbuild/openbsd-arm64': 0.23.1
3278 | '@esbuild/openbsd-x64': 0.23.1
3279 | '@esbuild/sunos-x64': 0.23.1
3280 | '@esbuild/win32-arm64': 0.23.1
3281 | '@esbuild/win32-ia32': 0.23.1
3282 | '@esbuild/win32-x64': 0.23.1
3283 |
3284 | esbuild@0.24.0:
3285 | optionalDependencies:
3286 | '@esbuild/aix-ppc64': 0.24.0
3287 | '@esbuild/android-arm': 0.24.0
3288 | '@esbuild/android-arm64': 0.24.0
3289 | '@esbuild/android-x64': 0.24.0
3290 | '@esbuild/darwin-arm64': 0.24.0
3291 | '@esbuild/darwin-x64': 0.24.0
3292 | '@esbuild/freebsd-arm64': 0.24.0
3293 | '@esbuild/freebsd-x64': 0.24.0
3294 | '@esbuild/linux-arm': 0.24.0
3295 | '@esbuild/linux-arm64': 0.24.0
3296 | '@esbuild/linux-ia32': 0.24.0
3297 | '@esbuild/linux-loong64': 0.24.0
3298 | '@esbuild/linux-mips64el': 0.24.0
3299 | '@esbuild/linux-ppc64': 0.24.0
3300 | '@esbuild/linux-riscv64': 0.24.0
3301 | '@esbuild/linux-s390x': 0.24.0
3302 | '@esbuild/linux-x64': 0.24.0
3303 | '@esbuild/netbsd-x64': 0.24.0
3304 | '@esbuild/openbsd-arm64': 0.24.0
3305 | '@esbuild/openbsd-x64': 0.24.0
3306 | '@esbuild/sunos-x64': 0.24.0
3307 | '@esbuild/win32-arm64': 0.24.0
3308 | '@esbuild/win32-ia32': 0.24.0
3309 | '@esbuild/win32-x64': 0.24.0
3310 |
3311 | escalade@3.2.0: {}
3312 |
3313 | escape-string-regexp@5.0.0: {}
3314 |
3315 | esprima@4.0.1: {}
3316 |
3317 | estree-walker@3.0.3:
3318 | dependencies:
3319 | '@types/estree': 1.0.6
3320 |
3321 | event-target-shim@5.0.1: {}
3322 |
3323 | expand-template@2.0.3: {}
3324 |
3325 | expect-type@1.1.0: {}
3326 |
3327 | external-editor@3.1.0:
3328 | dependencies:
3329 | chardet: 0.7.0
3330 | iconv-lite: 0.4.24
3331 | tmp: 0.0.33
3332 |
3333 | filename-reserved-regex@3.0.0: {}
3334 |
3335 | filenamify@6.0.0:
3336 | dependencies:
3337 | filename-reserved-regex: 3.0.0
3338 |
3339 | fill-range@7.1.1:
3340 | dependencies:
3341 | to-regex-range: 5.0.1
3342 |
3343 | find-cache-dir@2.1.0:
3344 | dependencies:
3345 | commondir: 1.0.1
3346 | make-dir: 2.1.0
3347 | pkg-dir: 3.0.0
3348 |
3349 | find-up@3.0.0:
3350 | dependencies:
3351 | locate-path: 3.0.0
3352 |
3353 | flow-parser@0.252.0: {}
3354 |
3355 | foreground-child@3.3.0:
3356 | dependencies:
3357 | cross-spawn: 7.0.5
3358 | signal-exit: 4.1.0
3359 |
3360 | form-data-encoder@1.7.2: {}
3361 |
3362 | form-data@4.0.1:
3363 | dependencies:
3364 | asynckit: 0.4.0
3365 | combined-stream: 1.0.8
3366 | mime-types: 2.1.35
3367 |
3368 | formdata-node@4.4.1:
3369 | dependencies:
3370 | node-domexception: 1.0.0
3371 | web-streams-polyfill: 4.0.0-beta.3
3372 |
3373 | fs-constants@1.0.0: {}
3374 |
3375 | fs.realpath@1.0.0: {}
3376 |
3377 | fsevents@2.3.3:
3378 | optional: true
3379 |
3380 | gensync@1.0.0-beta.2: {}
3381 |
3382 | git-up@7.0.0:
3383 | dependencies:
3384 | is-ssh: 1.4.0
3385 | parse-url: 8.1.0
3386 |
3387 | git-url-parse@14.1.0:
3388 | dependencies:
3389 | git-up: 7.0.0
3390 |
3391 | github-from-package@0.0.0: {}
3392 |
3393 | glob@10.4.5:
3394 | dependencies:
3395 | foreground-child: 3.3.0
3396 | jackspeak: 3.4.3
3397 | minimatch: 9.0.5
3398 | minipass: 7.1.2
3399 | package-json-from-dist: 1.0.1
3400 | path-scurry: 1.11.1
3401 |
3402 | glob@7.2.3:
3403 | dependencies:
3404 | fs.realpath: 1.0.0
3405 | inflight: 1.0.6
3406 | inherits: 2.0.4
3407 | minimatch: 3.1.2
3408 | once: 1.4.0
3409 | path-is-absolute: 1.0.1
3410 |
3411 | globals@11.12.0: {}
3412 |
3413 | graceful-fs@4.2.11: {}
3414 |
3415 | has-flag@4.0.0: {}
3416 |
3417 | html-escaper@2.0.2: {}
3418 |
3419 | humanize-ms@1.2.1:
3420 | dependencies:
3421 | ms: 2.1.3
3422 |
3423 | iconv-lite@0.4.24:
3424 | dependencies:
3425 | safer-buffer: 2.1.2
3426 |
3427 | ieee754@1.2.1: {}
3428 |
3429 | imurmurhash@0.1.4: {}
3430 |
3431 | inflight@1.0.6:
3432 | dependencies:
3433 | once: 1.4.0
3434 | wrappy: 1.0.2
3435 |
3436 | inherits@2.0.4: {}
3437 |
3438 | ini@1.3.8: {}
3439 |
3440 | inquirer@9.3.7:
3441 | dependencies:
3442 | '@inquirer/figures': 1.0.7
3443 | ansi-escapes: 4.3.2
3444 | cli-width: 4.1.0
3445 | external-editor: 3.1.0
3446 | mute-stream: 1.0.0
3447 | ora: 5.4.1
3448 | run-async: 3.0.0
3449 | rxjs: 7.8.1
3450 | string-width: 4.2.3
3451 | strip-ansi: 6.0.1
3452 | wrap-ansi: 6.2.0
3453 | yoctocolors-cjs: 2.1.2
3454 |
3455 | is-buffer@1.1.6: {}
3456 |
3457 | is-fullwidth-code-point@3.0.0: {}
3458 |
3459 | is-interactive@1.0.0: {}
3460 |
3461 | is-number@7.0.0: {}
3462 |
3463 | is-plain-object@2.0.4:
3464 | dependencies:
3465 | isobject: 3.0.1
3466 |
3467 | is-ssh@1.4.0:
3468 | dependencies:
3469 | protocols: 2.0.1
3470 |
3471 | is-unicode-supported@0.1.0: {}
3472 |
3473 | isexe@2.0.0: {}
3474 |
3475 | isobject@3.0.1: {}
3476 |
3477 | istanbul-lib-coverage@3.2.2: {}
3478 |
3479 | istanbul-lib-report@3.0.1:
3480 | dependencies:
3481 | istanbul-lib-coverage: 3.2.2
3482 | make-dir: 4.0.0
3483 | supports-color: 7.2.0
3484 |
3485 | istanbul-lib-source-maps@5.0.6:
3486 | dependencies:
3487 | '@jridgewell/trace-mapping': 0.3.25
3488 | debug: 4.3.7
3489 | istanbul-lib-coverage: 3.2.2
3490 | transitivePeerDependencies:
3491 | - supports-color
3492 |
3493 | istanbul-reports@3.1.7:
3494 | dependencies:
3495 | html-escaper: 2.0.2
3496 | istanbul-lib-report: 3.0.1
3497 |
3498 | jackspeak@3.4.3:
3499 | dependencies:
3500 | '@isaacs/cliui': 8.0.2
3501 | optionalDependencies:
3502 | '@pkgjs/parseargs': 0.11.0
3503 |
3504 | js-tokens@4.0.0: {}
3505 |
3506 | jscodeshift@0.15.2:
3507 | dependencies:
3508 | '@babel/core': 7.26.0
3509 | '@babel/parser': 7.26.2
3510 | '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0)
3511 | '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0)
3512 | '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0)
3513 | '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0)
3514 | '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0)
3515 | '@babel/preset-flow': 7.25.9(@babel/core@7.26.0)
3516 | '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0)
3517 | '@babel/register': 7.25.9(@babel/core@7.26.0)
3518 | babel-core: 7.0.0-bridge.0(@babel/core@7.26.0)
3519 | chalk: 4.1.2
3520 | flow-parser: 0.252.0
3521 | graceful-fs: 4.2.11
3522 | micromatch: 4.0.8
3523 | neo-async: 2.6.2
3524 | node-dir: 0.1.17
3525 | recast: 0.23.9
3526 | temp: 0.8.4
3527 | write-file-atomic: 2.4.3
3528 | transitivePeerDependencies:
3529 | - supports-color
3530 |
3531 | jscodeshift@0.16.1:
3532 | dependencies:
3533 | '@babel/core': 7.26.0
3534 | '@babel/parser': 7.26.2
3535 | '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0)
3536 | '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0)
3537 | '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0)
3538 | '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0)
3539 | '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0)
3540 | '@babel/preset-flow': 7.25.9(@babel/core@7.26.0)
3541 | '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0)
3542 | '@babel/register': 7.25.9(@babel/core@7.26.0)
3543 | chalk: 4.1.2
3544 | flow-parser: 0.252.0
3545 | graceful-fs: 4.2.11
3546 | micromatch: 4.0.8
3547 | neo-async: 2.6.2
3548 | node-dir: 0.1.17
3549 | recast: 0.23.9
3550 | temp: 0.9.4
3551 | write-file-atomic: 5.0.1
3552 | transitivePeerDependencies:
3553 | - supports-color
3554 |
3555 | jscodeshift@17.1.1:
3556 | dependencies:
3557 | '@babel/core': 7.26.0
3558 | '@babel/parser': 7.26.2
3559 | '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0)
3560 | '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0)
3561 | '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0)
3562 | '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0)
3563 | '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0)
3564 | '@babel/preset-flow': 7.25.9(@babel/core@7.26.0)
3565 | '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0)
3566 | '@babel/register': 7.25.9(@babel/core@7.26.0)
3567 | flow-parser: 0.252.0
3568 | graceful-fs: 4.2.11
3569 | micromatch: 4.0.8
3570 | neo-async: 2.6.2
3571 | picocolors: 1.1.1
3572 | recast: 0.23.9
3573 | tmp: 0.2.3
3574 | write-file-atomic: 5.0.1
3575 | transitivePeerDependencies:
3576 | - supports-color
3577 |
3578 | jsesc@3.0.2: {}
3579 |
3580 | json5@2.2.3: {}
3581 |
3582 | keytar@7.9.0:
3583 | dependencies:
3584 | node-addon-api: 4.3.0
3585 | prebuild-install: 7.1.2
3586 |
3587 | kind-of@6.0.3: {}
3588 |
3589 | locate-path@3.0.0:
3590 | dependencies:
3591 | p-locate: 3.0.0
3592 | path-exists: 3.0.0
3593 |
3594 | lodash-es@4.17.21: {}
3595 |
3596 | log-symbols@4.1.0:
3597 | dependencies:
3598 | chalk: 4.1.2
3599 | is-unicode-supported: 0.1.0
3600 |
3601 | loupe@3.1.2: {}
3602 |
3603 | lru-cache@10.4.3: {}
3604 |
3605 | lru-cache@5.1.1:
3606 | dependencies:
3607 | yallist: 3.1.1
3608 |
3609 | magic-string@0.30.12:
3610 | dependencies:
3611 | '@jridgewell/sourcemap-codec': 1.5.0
3612 |
3613 | magicast@0.3.5:
3614 | dependencies:
3615 | '@babel/parser': 7.26.2
3616 | '@babel/types': 7.26.0
3617 | source-map-js: 1.2.1
3618 |
3619 | make-dir@2.1.0:
3620 | dependencies:
3621 | pify: 4.0.1
3622 | semver: 5.7.2
3623 |
3624 | make-dir@4.0.0:
3625 | dependencies:
3626 | semver: 7.6.3
3627 |
3628 | make-error@1.3.6: {}
3629 |
3630 | md5@2.3.0:
3631 | dependencies:
3632 | charenc: 0.0.2
3633 | crypt: 0.0.2
3634 | is-buffer: 1.1.6
3635 |
3636 | micromatch@4.0.8:
3637 | dependencies:
3638 | braces: 3.0.3
3639 | picomatch: 2.3.1
3640 |
3641 | mime-db@1.52.0: {}
3642 |
3643 | mime-types@2.1.35:
3644 | dependencies:
3645 | mime-db: 1.52.0
3646 |
3647 | mimic-fn@2.1.0: {}
3648 |
3649 | mimic-response@3.1.0: {}
3650 |
3651 | minimatch@3.1.2:
3652 | dependencies:
3653 | brace-expansion: 1.1.11
3654 |
3655 | minimatch@9.0.5:
3656 | dependencies:
3657 | brace-expansion: 2.0.1
3658 |
3659 | minimist@1.2.8: {}
3660 |
3661 | minipass@7.1.2: {}
3662 |
3663 | mkdirp-classic@0.5.3: {}
3664 |
3665 | mkdirp@0.5.6:
3666 | dependencies:
3667 | minimist: 1.2.8
3668 |
3669 | ms@2.1.3: {}
3670 |
3671 | mute-stream@1.0.0: {}
3672 |
3673 | nanoid@3.3.7: {}
3674 |
3675 | napi-build-utils@1.0.2: {}
3676 |
3677 | neo-async@2.6.2: {}
3678 |
3679 | node-abi@3.71.0:
3680 | dependencies:
3681 | semver: 7.6.3
3682 |
3683 | node-addon-api@4.3.0: {}
3684 |
3685 | node-dir@0.1.17:
3686 | dependencies:
3687 | minimatch: 3.1.2
3688 |
3689 | node-domexception@1.0.0: {}
3690 |
3691 | node-fetch@2.7.0:
3692 | dependencies:
3693 | whatwg-url: 5.0.0
3694 |
3695 | node-releases@2.0.18: {}
3696 |
3697 | once@1.4.0:
3698 | dependencies:
3699 | wrappy: 1.0.2
3700 |
3701 | onetime@5.1.2:
3702 | dependencies:
3703 | mimic-fn: 2.1.0
3704 |
3705 | openai@4.23.0:
3706 | dependencies:
3707 | '@types/node': 18.19.64
3708 | '@types/node-fetch': 2.6.11
3709 | abort-controller: 3.0.0
3710 | agentkeepalive: 4.5.0
3711 | digest-fetch: 1.3.0
3712 | form-data-encoder: 1.7.2
3713 | formdata-node: 4.4.1
3714 | node-fetch: 2.7.0
3715 | web-streams-polyfill: 3.3.3
3716 | transitivePeerDependencies:
3717 | - encoding
3718 |
3719 | ora@5.4.1:
3720 | dependencies:
3721 | bl: 4.1.0
3722 | chalk: 4.1.2
3723 | cli-cursor: 3.1.0
3724 | cli-spinners: 2.9.2
3725 | is-interactive: 1.0.0
3726 | is-unicode-supported: 0.1.0
3727 | log-symbols: 4.1.0
3728 | strip-ansi: 6.0.1
3729 | wcwidth: 1.0.1
3730 |
3731 | os-tmpdir@1.0.2: {}
3732 |
3733 | p-limit@2.3.0:
3734 | dependencies:
3735 | p-try: 2.2.0
3736 |
3737 | p-locate@3.0.0:
3738 | dependencies:
3739 | p-limit: 2.3.0
3740 |
3741 | p-try@2.2.0: {}
3742 |
3743 | package-json-from-dist@1.0.1: {}
3744 |
3745 | parse-path@7.0.0:
3746 | dependencies:
3747 | protocols: 2.0.1
3748 |
3749 | parse-url@8.1.0:
3750 | dependencies:
3751 | parse-path: 7.0.0
3752 |
3753 | path-exists@3.0.0: {}
3754 |
3755 | path-is-absolute@1.0.1: {}
3756 |
3757 | path-key@3.1.1: {}
3758 |
3759 | path-scurry@1.11.1:
3760 | dependencies:
3761 | lru-cache: 10.4.3
3762 | minipass: 7.1.2
3763 |
3764 | pathe@1.1.2: {}
3765 |
3766 | pathval@2.0.0: {}
3767 |
3768 | picocolors@1.1.1: {}
3769 |
3770 | picomatch@2.3.1: {}
3771 |
3772 | pify@4.0.1: {}
3773 |
3774 | pirates@4.0.6: {}
3775 |
3776 | pkg-dir@3.0.0:
3777 | dependencies:
3778 | find-up: 3.0.0
3779 |
3780 | postcss@8.4.47:
3781 | dependencies:
3782 | nanoid: 3.3.7
3783 | picocolors: 1.1.1
3784 | source-map-js: 1.2.1
3785 |
3786 | prebuild-install@7.1.2:
3787 | dependencies:
3788 | detect-libc: 2.0.3
3789 | expand-template: 2.0.3
3790 | github-from-package: 0.0.0
3791 | minimist: 1.2.8
3792 | mkdirp-classic: 0.5.3
3793 | napi-build-utils: 1.0.2
3794 | node-abi: 3.71.0
3795 | pump: 3.0.2
3796 | rc: 1.2.8
3797 | simple-get: 4.0.1
3798 | tar-fs: 2.1.1
3799 | tunnel-agent: 0.6.0
3800 |
3801 | prettier@3.3.3: {}
3802 |
3803 | protocols@2.0.1: {}
3804 |
3805 | pump@3.0.2:
3806 | dependencies:
3807 | end-of-stream: 1.4.4
3808 | once: 1.4.0
3809 |
3810 | rc@1.2.8:
3811 | dependencies:
3812 | deep-extend: 0.6.0
3813 | ini: 1.3.8
3814 | minimist: 1.2.8
3815 | strip-json-comments: 2.0.1
3816 |
3817 | readable-stream@3.6.2:
3818 | dependencies:
3819 | inherits: 2.0.4
3820 | string_decoder: 1.3.0
3821 | util-deprecate: 1.0.2
3822 |
3823 | recast@0.20.5:
3824 | dependencies:
3825 | ast-types: 0.14.2
3826 | esprima: 4.0.1
3827 | source-map: 0.6.1
3828 | tslib: 2.8.1
3829 |
3830 | recast@0.23.9:
3831 | dependencies:
3832 | ast-types: 0.16.1
3833 | esprima: 4.0.1
3834 | source-map: 0.6.1
3835 | tiny-invariant: 1.3.3
3836 | tslib: 2.8.1
3837 |
3838 | restore-cursor@3.1.0:
3839 | dependencies:
3840 | onetime: 5.1.2
3841 | signal-exit: 3.0.7
3842 |
3843 | rimraf@2.6.3:
3844 | dependencies:
3845 | glob: 7.2.3
3846 |
3847 | rollup@4.24.4:
3848 | dependencies:
3849 | '@types/estree': 1.0.6
3850 | optionalDependencies:
3851 | '@rollup/rollup-android-arm-eabi': 4.24.4
3852 | '@rollup/rollup-android-arm64': 4.24.4
3853 | '@rollup/rollup-darwin-arm64': 4.24.4
3854 | '@rollup/rollup-darwin-x64': 4.24.4
3855 | '@rollup/rollup-freebsd-arm64': 4.24.4
3856 | '@rollup/rollup-freebsd-x64': 4.24.4
3857 | '@rollup/rollup-linux-arm-gnueabihf': 4.24.4
3858 | '@rollup/rollup-linux-arm-musleabihf': 4.24.4
3859 | '@rollup/rollup-linux-arm64-gnu': 4.24.4
3860 | '@rollup/rollup-linux-arm64-musl': 4.24.4
3861 | '@rollup/rollup-linux-powerpc64le-gnu': 4.24.4
3862 | '@rollup/rollup-linux-riscv64-gnu': 4.24.4
3863 | '@rollup/rollup-linux-s390x-gnu': 4.24.4
3864 | '@rollup/rollup-linux-x64-gnu': 4.24.4
3865 | '@rollup/rollup-linux-x64-musl': 4.24.4
3866 | '@rollup/rollup-win32-arm64-msvc': 4.24.4
3867 | '@rollup/rollup-win32-ia32-msvc': 4.24.4
3868 | '@rollup/rollup-win32-x64-msvc': 4.24.4
3869 | fsevents: 2.3.3
3870 |
3871 | run-async@3.0.0: {}
3872 |
3873 | rxjs@7.8.1:
3874 | dependencies:
3875 | tslib: 2.8.1
3876 |
3877 | safe-buffer@5.2.1: {}
3878 |
3879 | safer-buffer@2.1.2: {}
3880 |
3881 | semver@5.7.2: {}
3882 |
3883 | semver@6.3.1: {}
3884 |
3885 | semver@7.6.3: {}
3886 |
3887 | shallow-clone@3.0.1:
3888 | dependencies:
3889 | kind-of: 6.0.3
3890 |
3891 | shebang-command@2.0.0:
3892 | dependencies:
3893 | shebang-regex: 3.0.0
3894 |
3895 | shebang-regex@3.0.0: {}
3896 |
3897 | siginfo@2.0.0: {}
3898 |
3899 | signal-exit@3.0.7: {}
3900 |
3901 | signal-exit@4.1.0: {}
3902 |
3903 | simple-concat@1.0.1: {}
3904 |
3905 | simple-get@4.0.1:
3906 | dependencies:
3907 | decompress-response: 6.0.0
3908 | once: 1.4.0
3909 | simple-concat: 1.0.1
3910 |
3911 | simple-git@3.27.0:
3912 | dependencies:
3913 | '@kwsites/file-exists': 1.1.1
3914 | '@kwsites/promise-deferred': 1.1.1
3915 | debug: 4.3.7
3916 | transitivePeerDependencies:
3917 | - supports-color
3918 |
3919 | source-map-js@1.2.1: {}
3920 |
3921 | source-map-support@0.5.21:
3922 | dependencies:
3923 | buffer-from: 1.1.2
3924 | source-map: 0.6.1
3925 |
3926 | source-map@0.6.1: {}
3927 |
3928 | stackback@0.0.2: {}
3929 |
3930 | std-env@3.8.0: {}
3931 |
3932 | string-width@4.2.3:
3933 | dependencies:
3934 | emoji-regex: 8.0.0
3935 | is-fullwidth-code-point: 3.0.0
3936 | strip-ansi: 6.0.1
3937 |
3938 | string-width@5.1.2:
3939 | dependencies:
3940 | eastasianwidth: 0.2.0
3941 | emoji-regex: 9.2.2
3942 | strip-ansi: 7.1.0
3943 |
3944 | string_decoder@1.3.0:
3945 | dependencies:
3946 | safe-buffer: 5.2.1
3947 |
3948 | strip-ansi@6.0.1:
3949 | dependencies:
3950 | ansi-regex: 5.0.1
3951 |
3952 | strip-ansi@7.1.0:
3953 | dependencies:
3954 | ansi-regex: 6.1.0
3955 |
3956 | strip-json-comments@2.0.1: {}
3957 |
3958 | supports-color@7.2.0:
3959 | dependencies:
3960 | has-flag: 4.0.0
3961 |
3962 | tar-fs@2.1.1:
3963 | dependencies:
3964 | chownr: 1.1.4
3965 | mkdirp-classic: 0.5.3
3966 | pump: 3.0.2
3967 | tar-stream: 2.2.0
3968 |
3969 | tar-stream@2.2.0:
3970 | dependencies:
3971 | bl: 4.1.0
3972 | end-of-stream: 1.4.4
3973 | fs-constants: 1.0.0
3974 | inherits: 2.0.4
3975 | readable-stream: 3.6.2
3976 |
3977 | temp@0.8.4:
3978 | dependencies:
3979 | rimraf: 2.6.3
3980 |
3981 | temp@0.9.4:
3982 | dependencies:
3983 | mkdirp: 0.5.6
3984 | rimraf: 2.6.3
3985 |
3986 | test-exclude@7.0.1:
3987 | dependencies:
3988 | '@istanbuljs/schema': 0.1.3
3989 | glob: 10.4.5
3990 | minimatch: 9.0.5
3991 |
3992 | tiny-invariant@1.3.3: {}
3993 |
3994 | tinybench@2.9.0: {}
3995 |
3996 | tinyexec@0.3.1: {}
3997 |
3998 | tinypool@1.0.1: {}
3999 |
4000 | tinyrainbow@1.2.0: {}
4001 |
4002 | tinyspy@3.0.2: {}
4003 |
4004 | tmp@0.0.33:
4005 | dependencies:
4006 | os-tmpdir: 1.0.2
4007 |
4008 | tmp@0.2.3: {}
4009 |
4010 | to-regex-range@5.0.1:
4011 | dependencies:
4012 | is-number: 7.0.0
4013 |
4014 | tr46@0.0.3: {}
4015 |
4016 | tree-kill@1.2.2: {}
4017 |
4018 | ts-invariant@0.10.3:
4019 | dependencies:
4020 | tslib: 2.8.1
4021 |
4022 | ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3):
4023 | dependencies:
4024 | '@cspotcode/source-map-support': 0.8.1
4025 | '@tsconfig/node10': 1.0.11
4026 | '@tsconfig/node12': 1.0.11
4027 | '@tsconfig/node14': 1.0.3
4028 | '@tsconfig/node16': 1.0.4
4029 | '@types/node': 22.9.0
4030 | acorn: 8.14.0
4031 | acorn-walk: 8.3.4
4032 | arg: 4.1.3
4033 | create-require: 1.1.1
4034 | diff: 4.0.2
4035 | make-error: 1.3.6
4036 | typescript: 5.6.3
4037 | v8-compile-cache-lib: 3.0.1
4038 | yn: 3.1.1
4039 |
4040 | tslib@2.8.1: {}
4041 |
4042 | tunnel-agent@0.6.0:
4043 | dependencies:
4044 | safe-buffer: 5.2.1
4045 |
4046 | type-fest@0.21.3: {}
4047 |
4048 | typescript@5.6.3: {}
4049 |
4050 | undici-types@5.26.5: {}
4051 |
4052 | undici-types@6.19.8: {}
4053 |
4054 | universal-user-agent@6.0.1: {}
4055 |
4056 | update-browserslist-db@1.1.1(browserslist@4.24.2):
4057 | dependencies:
4058 | browserslist: 4.24.2
4059 | escalade: 3.2.0
4060 | picocolors: 1.1.1
4061 |
4062 | util-deprecate@1.0.2: {}
4063 |
4064 | v8-compile-cache-lib@3.0.1: {}
4065 |
4066 | vite-node@2.1.4(@types/node@22.9.0):
4067 | dependencies:
4068 | cac: 6.7.14
4069 | debug: 4.3.7
4070 | pathe: 1.1.2
4071 | vite: 5.4.10(@types/node@22.9.0)
4072 | transitivePeerDependencies:
4073 | - '@types/node'
4074 | - less
4075 | - lightningcss
4076 | - sass
4077 | - sass-embedded
4078 | - stylus
4079 | - sugarss
4080 | - supports-color
4081 | - terser
4082 |
4083 | vite@5.4.10(@types/node@22.9.0):
4084 | dependencies:
4085 | esbuild: 0.21.5
4086 | postcss: 8.4.47
4087 | rollup: 4.24.4
4088 | optionalDependencies:
4089 | '@types/node': 22.9.0
4090 | fsevents: 2.3.3
4091 |
4092 | vitest@2.1.4(@types/node@22.9.0):
4093 | dependencies:
4094 | '@vitest/expect': 2.1.4
4095 | '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.9.0))
4096 | '@vitest/pretty-format': 2.1.4
4097 | '@vitest/runner': 2.1.4
4098 | '@vitest/snapshot': 2.1.4
4099 | '@vitest/spy': 2.1.4
4100 | '@vitest/utils': 2.1.4
4101 | chai: 5.1.2
4102 | debug: 4.3.7
4103 | expect-type: 1.1.0
4104 | magic-string: 0.30.12
4105 | pathe: 1.1.2
4106 | std-env: 3.8.0
4107 | tinybench: 2.9.0
4108 | tinyexec: 0.3.1
4109 | tinypool: 1.0.1
4110 | tinyrainbow: 1.2.0
4111 | vite: 5.4.10(@types/node@22.9.0)
4112 | vite-node: 2.1.4(@types/node@22.9.0)
4113 | why-is-node-running: 2.3.0
4114 | optionalDependencies:
4115 | '@types/node': 22.9.0
4116 | transitivePeerDependencies:
4117 | - less
4118 | - lightningcss
4119 | - msw
4120 | - sass
4121 | - sass-embedded
4122 | - stylus
4123 | - sugarss
4124 | - supports-color
4125 | - terser
4126 |
4127 | wcwidth@1.0.1:
4128 | dependencies:
4129 | defaults: 1.0.4
4130 |
4131 | web-streams-polyfill@3.3.3: {}
4132 |
4133 | web-streams-polyfill@4.0.0-beta.3: {}
4134 |
4135 | webidl-conversions@3.0.1: {}
4136 |
4137 | whatwg-url@5.0.0:
4138 | dependencies:
4139 | tr46: 0.0.3
4140 | webidl-conversions: 3.0.1
4141 |
4142 | which@2.0.2:
4143 | dependencies:
4144 | isexe: 2.0.0
4145 |
4146 | why-is-node-running@2.3.0:
4147 | dependencies:
4148 | siginfo: 2.0.0
4149 | stackback: 0.0.2
4150 |
4151 | wrap-ansi@6.2.0:
4152 | dependencies:
4153 | ansi-styles: 4.3.0
4154 | string-width: 4.2.3
4155 | strip-ansi: 6.0.1
4156 |
4157 | wrap-ansi@7.0.0:
4158 | dependencies:
4159 | ansi-styles: 4.3.0
4160 | string-width: 4.2.3
4161 | strip-ansi: 6.0.1
4162 |
4163 | wrap-ansi@8.1.0:
4164 | dependencies:
4165 | ansi-styles: 6.2.1
4166 | string-width: 5.1.2
4167 | strip-ansi: 7.1.0
4168 |
4169 | wrappy@1.0.2: {}
4170 |
4171 | write-file-atomic@2.4.3:
4172 | dependencies:
4173 | graceful-fs: 4.2.11
4174 | imurmurhash: 0.1.4
4175 | signal-exit: 3.0.7
4176 |
4177 | write-file-atomic@5.0.1:
4178 | dependencies:
4179 | imurmurhash: 0.1.4
4180 | signal-exit: 4.1.0
4181 |
4182 | yallist@3.1.1: {}
4183 |
4184 | yaml@2.6.0: {}
4185 |
4186 | yn@3.1.1: {}
4187 |
4188 | yoctocolors-cjs@2.1.2: {}
4189 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - 'packages/*'
3 |
4 | catalog:
5 | jscodeshift: ^17.1.1
6 | '@types/jscodeshift': ^0.11.10
7 |
--------------------------------------------------------------------------------