diff --git a/.changeset/big-islands-beam.md b/.changeset/big-islands-beam.md new file mode 100644 index 000000000..9aac651e2 --- /dev/null +++ b/.changeset/big-islands-beam.md @@ -0,0 +1,5 @@ +--- +'@lagon/www': patch +--- + +Use PostHog instead of Splitbee diff --git a/.changeset/fluffy-dolphins-remain.md b/.changeset/fluffy-dolphins-remain.md new file mode 100644 index 000000000..2c4e93045 --- /dev/null +++ b/.changeset/fluffy-dolphins-remain.md @@ -0,0 +1,5 @@ +--- +'@lagon/website': patch +--- + +Move common & prisma packages to website diff --git a/.changeset/itchy-balloons-tie.md b/.changeset/itchy-balloons-tie.md new file mode 100644 index 000000000..13cf1eb35 --- /dev/null +++ b/.changeset/itchy-balloons-tie.md @@ -0,0 +1,7 @@ +--- +'@lagon/cli': patch +'@lagon/runtime': patch +'@lagon/serverless': patch +--- + +Move from Node.js to Rust diff --git a/.dockerignore b/.dockerignore index b512c09d4..ab0e87538 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +target \ No newline at end of file diff --git a/.eslintignore b/.eslintignore index df4701fc9..41db5ec10 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,5 @@ dist/ +packages/old-*/**/* runtime.js + +*.log diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92184cf8e..aacbaceaa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install - - name: Run ESLint + - name: Lint run: pnpm lint test: runs-on: ubuntu-20.04 @@ -35,9 +35,9 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install - - name: Build needed packages - run: pnpm turbo run build build:runtime --filter="@lagon/common" --filter="@lagon/runtime" --filter="@lagon/serverless" - - name: Run Vitest + - name: Build runtime + run: pnpm turbo build --filter=@lagon/js-runtime + - name: Test run: pnpm test typecheck: runs-on: ubuntu-20.04 @@ -53,7 +53,7 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install - - name: Run TSC + - name: Typecheck run: pnpm typecheck build: runs-on: ubuntu-20.04 diff --git a/.gitignore b/.gitignore index e8c3e9ad5..174193e7c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,10 @@ coverage/ .turbo/ ssl/ target/ -packages/rust-serverless/deployments/ +packages/serverless/deployments/ +.vercel/ .eslintcache .DS_Store .env tsconfig.tsbuildinfo -.vercel diff --git a/Cargo.lock b/Cargo.lock index 7793c7bd1..04d128a3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -790,12 +790,6 @@ version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115" -[[package]] -name = "futures-io" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" - [[package]] name = "futures-sink" version = "0.3.23" @@ -815,12 +809,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0828a5471e340229c11c77ca80017937ce3c58cb788a17e5f1c2d5c485a9577" dependencies = [ "futures-core", - "futures-io", "futures-task", - "memchr", "pin-project-lite", "pin-utils", - "slab", ] [[package]] @@ -1169,7 +1160,7 @@ dependencies = [ name = "lagon-runtime" version = "0.1.0" dependencies = [ - "reqwest", + "hyper 0.14.20", "tokio", "v8", ] @@ -2272,9 +2263,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" +checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" dependencies = [ "base64 0.13.0", "bytes", @@ -2288,10 +2279,10 @@ dependencies = [ "hyper-tls", "ipnet", "js-sys", - "lazy_static", "log 0.4.17", "mime 0.3.16", "native-tls", + "once_cell", "percent-encoding 2.1.0", "pin-project-lite", "serde", @@ -2810,9 +2801,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" +checksum = "f6edf2d6bc038a43d31353570e27270603f4648d18f5ed10c0e179abe43255af" dependencies = [ "futures-core", "pin-project-lite", diff --git a/Cargo.toml b/Cargo.toml index 1222063f7..a4aaf2a04 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] members = [ - "packages/rust-runtime", - "packages/rust-serverless", - "packages/rust-cli", + "packages/runtime", + "packages/serverless", + "packages/cli", ] diff --git a/docker/serverless.Dockerfile b/docker/serverless.Dockerfile index 910c836fe..db8be62a1 100644 --- a/docker/serverless.Dockerfile +++ b/docker/serverless.Dockerfile @@ -1,34 +1,15 @@ -FROM node:16-slim as builder +FROM rust:1.63 as builder -RUN apt update -RUN apt install -y python3 make g++ openssl - -RUN npm install -g pnpm WORKDIR /app +COPY . . -COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ -COPY packages/runtime/package.json ./packages/runtime/package.json -COPY packages/serverless/package.json ./packages/serverless/package.json -COPY packages/prisma/package.json ./packages/prisma/package.json -COPY packages/common/package.json ./packages/common/package.json - -RUN pnpm install --frozen-lockfile - -COPY packages/runtime/ ./packages/runtime/ -COPY packages/serverless/ ./packages/serverless/ -COPY packages/prisma/ ./packages/prisma/ -COPY packages/common/ ./packages/common/ - -WORKDIR /app/packages/runtime -RUN pnpm build -RUN pnpm build:runtime +WORKDIR /app/packages/serverless +RUN cargo build --release -WORKDIR /app/packages/prisma -RUN pnpm prisma generate +# TODO: use a smaller image +FROM rust:1.63 -WORKDIR /app/packages/serverless -RUN pnpm build +COPY --from=builder /app/target/release/lagon-serverless /usr/local/bin/lagon-serverless EXPOSE 4000 -ENV NODE_ENV=production -CMD [ "pnpm", "start" ] +CMD ["lagon-serverless"] diff --git a/package.json b/package.json index 24ecef9d2..22a87ad5d 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,12 @@ "description": "Deploy Serverless Functions at the Edge", "private": true, "scripts": { - "test": "vitest run", - "test:update": "pnpm test -- -u", - "test:watch": "vitest", - "build": "turbo run build --continue", - "lint": "eslint --cache --ignore-pattern dist .", - "typecheck": "turbo run typecheck --continue", + "test": "turbo test --continue --filter=!@lagon/example-* --filter=!@lagon/old-*", + "build": "turbo build --continue --filter=!@lagon/example-* --filter=!@lagon/old-*", + "lint": "turbo lint --filter=!@lagon/old-*", + "typecheck": "turbo typecheck --continue --filter=!@lagon/old-*", "docker:build:serverless": "docker build -t lagon/serverless -f docker/serverless.Dockerfile .", - "docker:start:serverless": "docker run --rm -p 4000:4000 lagon/serverless", + "docker:start:serverless": "docker run --rm -p 4000:4000 --env-file packages/serverless/.env --network host lagon/serverless", "docker:build:nginx": "docker build -t lagon/nginx -f docker/nginx.Dockerfile ./docker/nginx", "docker:start:nginx": "docker run --rm -p 80:80 lagon/nginx", "release": "pnpm build && pnpm changeset publish", @@ -43,7 +41,7 @@ "nodemon": "^2.0.16", "prettier": "^2.6.2", "tsup": "^6.0.1", - "turbo": "^1.3.1", + "turbo": "^1.5.2", "typescript": "^4.6.4", "vite-tsconfig-paths": "^3.5.0", "vitest": "^0.15.1" diff --git a/packages/rust-cli/Cargo.toml b/packages/cli/Cargo.toml similarity index 76% rename from packages/rust-cli/Cargo.toml rename to packages/cli/Cargo.toml index 8b0bbbd1e..b063df13e 100644 --- a/packages/rust-cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -lagon-runtime = { path = "../rust-runtime" } +lagon-runtime = { path = "../runtime" } clap = { version = "3.2", features = ["derive"] } dialoguer = "0.10.2" indicatif = "0.17.1" @@ -12,7 +12,7 @@ colored = "2.0.0" dirs = "4.0.0" webbrowser = "0.8.0" tokio = { version = "1", features = ["full"] } -hyper = { version = "0.14", features = ["full"] } +hyper = { version = "0.14", features = ["client", "http1", "http2", "tcp"] } multipart = "0.18.0" mime = "0.3.16" serde = { version = "1.0", features = ["derive"] } diff --git a/packages/cli/package.json b/packages/cli/package.json index 4c1147a69..f6557c49a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,35 +1,8 @@ { "name": "@lagon/cli", - "version": "0.0.11", + "version": "0.1.0", "description": "CLI for Lagon", - "type": "module", - "files": [ - "dist" - ], - "bin": { - "lagon": "dist/index.js" - }, "scripts": { - "watch": "tsup src/index.ts --format=esm --watch", - "build": "tsup src/index.ts --format=esm --define.process.env.NODE_ENV \\\"production\\\"", - "lint": "eslint --cache --ignore-pattern dist .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@lagon/runtime": "workspace:0.0.6", - "@trpc/client": "^9.25.3", - "chalk": "^5.0.1", - "commander": "^9.3.0", - "esbuild": "^0.14.41", - "fastify": "^3.29.0", - "inquirer": "^9.0.0", - "node-fetch": "^3.2.6", - "open": "^8.4.0", - "update-notifier": "^6.0.1" - }, - "devDependencies": { - "@lagon/common": "workspace:0.0.2", - "@types/inquirer": "^8.2.1", - "@types/update-notifier": "^5.1.0" + "build": "cargo build" } } diff --git a/packages/rust-cli/src/auth.rs b/packages/cli/src/auth.rs similarity index 100% rename from packages/rust-cli/src/auth.rs rename to packages/cli/src/auth.rs diff --git a/packages/rust-cli/src/commands/build.rs b/packages/cli/src/commands/build.rs similarity index 100% rename from packages/rust-cli/src/commands/build.rs rename to packages/cli/src/commands/build.rs diff --git a/packages/rust-cli/src/commands/deploy.rs b/packages/cli/src/commands/deploy.rs similarity index 100% rename from packages/rust-cli/src/commands/deploy.rs rename to packages/cli/src/commands/deploy.rs diff --git a/packages/rust-cli/src/commands/dev.rs b/packages/cli/src/commands/dev.rs similarity index 100% rename from packages/rust-cli/src/commands/dev.rs rename to packages/cli/src/commands/dev.rs diff --git a/packages/rust-cli/src/commands/login.rs b/packages/cli/src/commands/login.rs similarity index 100% rename from packages/rust-cli/src/commands/login.rs rename to packages/cli/src/commands/login.rs diff --git a/packages/rust-cli/src/commands/logout.rs b/packages/cli/src/commands/logout.rs similarity index 100% rename from packages/rust-cli/src/commands/logout.rs rename to packages/cli/src/commands/logout.rs diff --git a/packages/rust-cli/src/commands/mod.rs b/packages/cli/src/commands/mod.rs similarity index 100% rename from packages/rust-cli/src/commands/mod.rs rename to packages/cli/src/commands/mod.rs diff --git a/packages/rust-cli/src/commands/undeploy.rs b/packages/cli/src/commands/undeploy.rs similarity index 100% rename from packages/rust-cli/src/commands/undeploy.rs rename to packages/cli/src/commands/undeploy.rs diff --git a/packages/rust-cli/src/main.rs b/packages/cli/src/main.rs similarity index 100% rename from packages/rust-cli/src/main.rs rename to packages/cli/src/main.rs diff --git a/packages/rust-cli/src/utils/console.rs b/packages/cli/src/utils/console.rs similarity index 100% rename from packages/rust-cli/src/utils/console.rs rename to packages/cli/src/utils/console.rs diff --git a/packages/rust-cli/src/utils/deployments.rs b/packages/cli/src/utils/deployments.rs similarity index 100% rename from packages/rust-cli/src/utils/deployments.rs rename to packages/cli/src/utils/deployments.rs diff --git a/packages/rust-cli/src/utils/mod.rs b/packages/cli/src/utils/mod.rs similarity index 100% rename from packages/rust-cli/src/utils/mod.rs rename to packages/cli/src/utils/mod.rs diff --git a/packages/rust-cli/src/utils/trpc.rs b/packages/cli/src/utils/trpc.rs similarity index 100% rename from packages/rust-cli/src/utils/trpc.rs rename to packages/cli/src/utils/trpc.rs diff --git a/packages/js-runtime/package.json b/packages/js-runtime/package.json new file mode 100644 index 000000000..61acd19b2 --- /dev/null +++ b/packages/js-runtime/package.json @@ -0,0 +1,18 @@ +{ + "name": "@lagon/js-runtime", + "version": "0.1.0", + "description": "JavaScript Runtime", + "private": true, + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "test": "vitest --run", + "build": "tsup src/index.ts --format=esm --dts", + "lint": "eslint --cache --ignore-pattern dist .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "web-streams-polyfill": "^3.2.1" + } +} diff --git a/packages/js-runtime/src/__tests__/base64.test.ts b/packages/js-runtime/src/__tests__/base64.test.ts new file mode 100644 index 000000000..7740e6b41 --- /dev/null +++ b/packages/js-runtime/src/__tests__/base64.test.ts @@ -0,0 +1,12 @@ +import { describe, it, expect } from 'vitest'; +import { atob, btoa } from '../runtime/base64'; + +describe('base64', () => { + it('should encode with atob', async () => { + expect(atob('Hello World')).toEqual('\x1Dée¡j+\x95'); + }); + + it('should decode with btoa', async () => { + expect(btoa('\x1Dée¡j+\x95')).toEqual('HelloWorlQ=='); + }); +}); diff --git a/packages/js-runtime/src/__tests__/encoding.test.ts b/packages/js-runtime/src/__tests__/encoding.test.ts new file mode 100644 index 000000000..a2bca4f04 --- /dev/null +++ b/packages/js-runtime/src/__tests__/encoding.test.ts @@ -0,0 +1,31 @@ +import { describe, it, expect } from 'vitest'; +import { TextEncoder, TextDecoder } from '../runtime/encoding'; + +describe('encoding', () => { + it('should encode', async () => { + expect(new TextEncoder().encode('Hello World')).toEqual( + new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]), + ); + }); + + it('should decode', async () => { + expect(new TextDecoder().decode(new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]))).toEqual( + 'Hello World', + ); + }); + + it('should encode and decode', async () => { + const encoded = new TextEncoder().encode('Hello World'); + const decoded = new TextDecoder().decode(encoded); + + expect(decoded).toEqual('Hello World'); + }); + + it('should have encoding field on TextEncoder', async () => { + expect(new TextEncoder().encoding).toEqual('utf-8'); + }); + + it('should have encoding field on TextDecoder', async () => { + expect(new TextDecoder().encoding).toEqual('utf-8'); + }); +}); diff --git a/packages/js-runtime/src/__tests__/fetch.test.ts b/packages/js-runtime/src/__tests__/fetch.test.ts new file mode 100644 index 000000000..443622d13 --- /dev/null +++ b/packages/js-runtime/src/__tests__/fetch.test.ts @@ -0,0 +1,182 @@ +// import { clearCache, Deployment } from '../deployments'; +// import { getIsolate } from '../isolate'; +import { describe, it, expect, beforeAll, afterAll } from 'vitest'; +// import { HandlerRequest } from '..'; +// import { createServer } from 'node:http'; +// import { Headers } from '../runtime/fetch'; + +// const server = createServer((request, response) => { +// if (request.url === '/json') { +// response.write(JSON.stringify({ hello: 'world' })); +// response.end(); +// return; +// } + +// if (request.url === '/body') { +// let body = ''; + +// request.on('data', chunk => { +// body += chunk; +// }); + +// request.on('end', () => { +// response.write(body); +// response.end(); +// }); + +// return; +// } + +// response.write('Hello World'); +// response.end(); +// }); + +// beforeAll(() => { +// server.listen(8000); +// }); + +// afterAll(() => { +// server.close(); +// }); + +describe.skip('Headers', () => { + // describe('instanciate', () => { + // it('should instanciate without init', () => { + // expect(new Headers().toString()).toBeDefined(); + // }); + // it('should instanciate with init as object', () => { + // expect(new Headers({ 'Content-Type': 'image/jpeg', 'X-My-Custom-Header': 'Zeke are cool' })).toBeDefined(); + // }); + // it('should instanciate with init as array', () => { + // expect( + // new Headers([ + // ['Set-Cookie', 'greeting=hello'], + // ['Set-Cookie', 'name=world'], + // ]), + // ).toBeDefined(); + // }); + // }); + // it('should append', () => { + // const headers = new Headers(); + // headers.append('a', 'b'); + // headers.append('c', 'd'); + // expect(headers.get('a')).toEqual('b'); + // expect(headers.get('c')).toEqual('d'); + // }); + // it('should delete', () => { + // const headers = new Headers({ + // a: 'b', + // c: 'd', + // }); + // headers.delete('a'); + // expect(headers.get('a')).toBeUndefined(); + // }); + // it('should return entries', () => { + // const headers = new Headers({ + // a: 'b', + // c: 'd', + // }); + // expect(Array.from(headers.entries())).toEqual([ + // ['a', 'b'], + // ['c', 'd'], + // ]); + // }); + // it('should get', () => { + // const headers = new Headers({ + // a: 'b', + // c: 'd', + // }); + // expect(headers.get('a')).toEqual('b'); + // expect(headers.get('c')).toEqual('d'); + // expect(headers.get('e')).toBeUndefined(); + // }); + // it('should has', () => { + // const headers = new Headers({ + // a: 'b', + // c: 'd', + // }); + // expect(headers.has('a')).toBeTruthy(); + // expect(headers.has('c')).toBeTruthy(); + // expect(headers.has('e')).toBeFalsy(); + // }); + // it('should return keys', () => { + // const headers = new Headers({ + // a: 'b', + // c: 'd', + // }); + // expect(Array.from(headers.keys())).toEqual(['a', 'c']); + // }); + // describe('set', () => { + // it('should set without init', () => { + // const headers = new Headers(); + // headers.set('a', 'b'); + // headers.set('c', 'd'); + // expect(headers.get('a')).toEqual('b'); + // expect(headers.get('c')).toEqual('d'); + // }); + // it('should set with init', () => { + // const headers = new Headers({ + // a: 'b', + // c: 'd', + // }); + // headers.set('a', 'e'); + // headers.set('c', 'f'); + // expect(headers.get('a')).toEqual('e'); + // expect(headers.get('c')).toEqual('f'); + // }); + // }); + // it('should return values', () => { + // const headers = new Headers({ + // a: 'b', + // c: 'd', + // }); + // expect(Array.from(headers.values())).toEqual(['b', 'd']); + // }); + // }); + // describe('fetch', () => { + // it('should perform a get', async () => { + // const deployment = getDeployment(); + // const runIsolate = await getIsolate({ + // deployment, + // getDeploymentCode: async () => `export async function handler(request) { + // const response = await fetch('http://localhost:8000'); + // return new Response(await response.text()); + // }`, + // onReceiveStream: () => null, + // }); + // const { response } = await runIsolate(request); + // expect(response.body).toEqual('Hello World'); + // clearCache(deployment); + // }); + // it('should parse json', async () => { + // const deployment = getDeployment(); + // const runIsolate = await getIsolate({ + // deployment, + // getDeploymentCode: async () => `export async function handler(request) { + // const response = await fetch('http://localhost:8000/json'); + // return new Response(await response.json()); + // }`, + // onReceiveStream: () => null, + // }); + // const { response } = await runIsolate(request); + // expect(response.body).toEqual({ hello: 'world' }); + // clearCache(deployment); + // }); + // it('should post with body', async () => { + // const deployment = getDeployment(); + // const runIsolate = await getIsolate({ + // deployment, + // getDeploymentCode: async () => `export async function handler(request) { + // const response = await fetch('http://localhost:8000/body', { + // method: 'POST', + // body: JSON.stringify({ hello: 'world' }), + // }); + // return new Response(await response.json()); + // }`, + // onReceiveStream: () => null, + // }); + // const { response } = await runIsolate(request); + // expect(response.body).toEqual({ hello: 'world' }); + // clearCache(deployment); + // }); +}); diff --git a/packages/js-runtime/src/__tests__/logs.test.ts b/packages/js-runtime/src/__tests__/logs.test.ts new file mode 100644 index 000000000..86c6a2b27 --- /dev/null +++ b/packages/js-runtime/src/__tests__/logs.test.ts @@ -0,0 +1,57 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import '../runtime/console'; + +beforeEach(() => { + // @ts-expect-error Lagon is not defined + globalThis.Lagon = { + log: vi.fn(), + }; +}); + +afterEach(() => { + vi.resetAllMocks(); +}); + +describe('Logs', () => { + it('should log', () => { + console.log('Hello World'); + + expect(Lagon.log).toHaveBeenCalledWith('[log] Hello World'); + }); + + it('should receive all logs type', () => { + const types = ['log', 'info', 'debug', 'error', 'warn'] as const; + + for (const type of types) { + console[type](`Hello ${type}`); + + expect(Lagon.log).toHaveBeenCalledWith(`[${type}] Hello ${type}`); + } + }); + + it('should log objects', () => { + console.log({ + hello: 'world', + nested: { + hello: 'world', + }, + }); + + expect(Lagon.log).toHaveBeenCalledWith('[log] {"hello":"world","nested":{"hello":"world"}}'); + }); + + it('should log arrays', () => { + console.log(['hello', 'world']); + + expect(Lagon.log).toHaveBeenCalledWith('[log] ["hello","world"]'); + }); + + it('should log functions', () => { + console.log(function () { + return 'Hello World'; + }); + + // TODO: should log function + expect(Lagon.log).toHaveBeenCalledWith('[log] undefined'); + }); +}); diff --git a/packages/runtime/src/__tests__/url.test.ts b/packages/js-runtime/src/__tests__/url.test.ts similarity index 100% rename from packages/runtime/src/__tests__/url.test.ts rename to packages/js-runtime/src/__tests__/url.test.ts diff --git a/packages/js-runtime/src/index.ts b/packages/js-runtime/src/index.ts new file mode 100644 index 000000000..9c8c903dc --- /dev/null +++ b/packages/js-runtime/src/index.ts @@ -0,0 +1,25 @@ +export * from './runtime/base64'; +export * from './runtime/encoding'; +export * from './runtime/Request'; +export * from './runtime/Response'; +export * from './runtime/URL'; +export * from './runtime/parseMultipart'; +export * from './runtime/fetch'; +// export * from './streams'; + +import './runtime/console'; +import './runtime/process'; + +import type { RequestInit } from './runtime/Request'; + +declare global { + const Lagon: { + log: (message: string) => void; + fetch: ( + resource: string, + init: RequestInit, + ) => { + body: string; + }; + }; +} diff --git a/packages/runtime/src/runtime/Request.ts b/packages/js-runtime/src/runtime/Request.ts similarity index 100% rename from packages/runtime/src/runtime/Request.ts rename to packages/js-runtime/src/runtime/Request.ts diff --git a/packages/rust-runtime/js/Response.ts b/packages/js-runtime/src/runtime/Response.ts similarity index 100% rename from packages/rust-runtime/js/Response.ts rename to packages/js-runtime/src/runtime/Response.ts diff --git a/packages/runtime/src/runtime/URL.ts b/packages/js-runtime/src/runtime/URL.ts similarity index 100% rename from packages/runtime/src/runtime/URL.ts rename to packages/js-runtime/src/runtime/URL.ts diff --git a/packages/runtime/src/runtime/base64.ts b/packages/js-runtime/src/runtime/base64.ts similarity index 100% rename from packages/runtime/src/runtime/base64.ts rename to packages/js-runtime/src/runtime/base64.ts diff --git a/packages/rust-runtime/js/console.ts b/packages/js-runtime/src/runtime/console.ts similarity index 100% rename from packages/rust-runtime/js/console.ts rename to packages/js-runtime/src/runtime/console.ts diff --git a/packages/runtime/src/runtime/encoding.ts b/packages/js-runtime/src/runtime/encoding.ts similarity index 100% rename from packages/runtime/src/runtime/encoding.ts rename to packages/js-runtime/src/runtime/encoding.ts diff --git a/packages/rust-runtime/js/fetch.ts b/packages/js-runtime/src/runtime/fetch.ts similarity index 100% rename from packages/rust-runtime/js/fetch.ts rename to packages/js-runtime/src/runtime/fetch.ts diff --git a/packages/runtime/src/runtime/parseMultipart.ts b/packages/js-runtime/src/runtime/parseMultipart.ts similarity index 100% rename from packages/runtime/src/runtime/parseMultipart.ts rename to packages/js-runtime/src/runtime/parseMultipart.ts diff --git a/packages/rust-runtime/js/process.ts b/packages/js-runtime/src/runtime/process.ts similarity index 62% rename from packages/rust-runtime/js/process.ts rename to packages/js-runtime/src/runtime/process.ts index b574e068d..10d7ba851 100644 --- a/packages/rust-runtime/js/process.ts +++ b/packages/js-runtime/src/runtime/process.ts @@ -1,4 +1,5 @@ (globalThis => { + // @ts-expect-error we only set `env` field globalThis.process = { env: {}, }; diff --git a/packages/runtime/src/runtime/streams.ts b/packages/js-runtime/src/runtime/streams.ts similarity index 100% rename from packages/runtime/src/runtime/streams.ts rename to packages/js-runtime/src/runtime/streams.ts diff --git a/packages/js-runtime/tsconfig.json b/packages/js-runtime/tsconfig.json new file mode 100644 index 000000000..aaac3707b --- /dev/null +++ b/packages/js-runtime/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["ES2022"], + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "incremental": true, + "tsBuildInfoFile": "tsconfig.tsbuildinfo" + }, + "exclude": ["./dist/**/*"], +} diff --git a/packages/cli/CHANGELOG.md b/packages/old-cli/CHANGELOG.md similarity index 100% rename from packages/cli/CHANGELOG.md rename to packages/old-cli/CHANGELOG.md diff --git a/packages/cli/README.md b/packages/old-cli/README.md similarity index 100% rename from packages/cli/README.md rename to packages/old-cli/README.md diff --git a/packages/cli/example-function.ts b/packages/old-cli/example-function.ts similarity index 100% rename from packages/cli/example-function.ts rename to packages/old-cli/example-function.ts diff --git a/packages/old-cli/package.json b/packages/old-cli/package.json new file mode 100644 index 000000000..a50bf2000 --- /dev/null +++ b/packages/old-cli/package.json @@ -0,0 +1,35 @@ +{ + "name": "@lagon/old-cli", + "version": "0.0.11", + "description": "CLI for Lagon", + "type": "module", + "files": [ + "dist" + ], + "bin": { + "lagon": "dist/index.js" + }, + "scripts": { + "watch": "tsup src/index.ts --format=esm --watch", + "build": "tsup src/index.ts --format=esm --define.process.env.NODE_ENV \\\"production\\\"", + "lint": "eslint --cache --ignore-pattern dist .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@lagon/old-runtime": "workspace:0.0.6", + "@trpc/client": "^9.25.3", + "chalk": "^5.0.1", + "commander": "^9.3.0", + "esbuild": "^0.14.41", + "fastify": "^3.29.0", + "inquirer": "^9.0.0", + "node-fetch": "^3.2.6", + "open": "^8.4.0", + "update-notifier": "^6.0.1" + }, + "devDependencies": { + "@lagon/common": "workspace:0.0.2", + "@types/inquirer": "^8.2.1", + "@types/update-notifier": "^5.1.0" + } +} diff --git a/packages/cli/src/auth/index.ts b/packages/old-cli/src/auth/index.ts similarity index 100% rename from packages/cli/src/auth/index.ts rename to packages/old-cli/src/auth/index.ts diff --git a/packages/cli/src/cli.ts b/packages/old-cli/src/cli.ts similarity index 100% rename from packages/cli/src/cli.ts rename to packages/old-cli/src/cli.ts diff --git a/packages/cli/src/commands/build.ts b/packages/old-cli/src/commands/build.ts similarity index 100% rename from packages/cli/src/commands/build.ts rename to packages/old-cli/src/commands/build.ts diff --git a/packages/cli/src/commands/deploy.ts b/packages/old-cli/src/commands/deploy.ts similarity index 100% rename from packages/cli/src/commands/deploy.ts rename to packages/old-cli/src/commands/deploy.ts diff --git a/packages/cli/src/commands/dev.ts b/packages/old-cli/src/commands/dev.ts similarity index 100% rename from packages/cli/src/commands/dev.ts rename to packages/old-cli/src/commands/dev.ts diff --git a/packages/cli/src/commands/login.ts b/packages/old-cli/src/commands/login.ts similarity index 100% rename from packages/cli/src/commands/login.ts rename to packages/old-cli/src/commands/login.ts diff --git a/packages/cli/src/commands/logout.ts b/packages/old-cli/src/commands/logout.ts similarity index 100% rename from packages/cli/src/commands/logout.ts rename to packages/old-cli/src/commands/logout.ts diff --git a/packages/cli/src/commands/undeploy.ts b/packages/old-cli/src/commands/undeploy.ts similarity index 100% rename from packages/cli/src/commands/undeploy.ts rename to packages/old-cli/src/commands/undeploy.ts diff --git a/packages/cli/src/index.ts b/packages/old-cli/src/index.ts similarity index 100% rename from packages/cli/src/index.ts rename to packages/old-cli/src/index.ts diff --git a/packages/cli/src/trpc.ts b/packages/old-cli/src/trpc.ts similarity index 100% rename from packages/cli/src/trpc.ts rename to packages/old-cli/src/trpc.ts diff --git a/packages/cli/src/utils/constants.ts b/packages/old-cli/src/utils/constants.ts similarity index 100% rename from packages/cli/src/utils/constants.ts rename to packages/old-cli/src/utils/constants.ts diff --git a/packages/cli/src/utils/deployments.ts b/packages/old-cli/src/utils/deployments.ts similarity index 100% rename from packages/cli/src/utils/deployments.ts rename to packages/old-cli/src/utils/deployments.ts diff --git a/packages/cli/src/utils/index.ts b/packages/old-cli/src/utils/index.ts similarity index 100% rename from packages/cli/src/utils/index.ts rename to packages/old-cli/src/utils/index.ts diff --git a/packages/cli/src/utils/logger.ts b/packages/old-cli/src/utils/logger.ts similarity index 100% rename from packages/cli/src/utils/logger.ts rename to packages/old-cli/src/utils/logger.ts diff --git a/packages/cli/tsconfig.json b/packages/old-cli/tsconfig.json similarity index 100% rename from packages/cli/tsconfig.json rename to packages/old-cli/tsconfig.json diff --git a/packages/common/CHANGELOG.md b/packages/old-common/CHANGELOG.md similarity index 100% rename from packages/common/CHANGELOG.md rename to packages/old-common/CHANGELOG.md diff --git a/packages/common/package.json b/packages/old-common/package.json similarity index 92% rename from packages/common/package.json rename to packages/old-common/package.json index dd2b41a60..066c6131e 100644 --- a/packages/common/package.json +++ b/packages/old-common/package.json @@ -1,5 +1,5 @@ { - "name": "@lagon/common", + "name": "@lagon/old-common", "version": "0.0.2", "private": true, "type": "module", diff --git a/packages/common/src/__tests__/env.test.ts b/packages/old-common/src/__tests__/env.test.ts similarity index 100% rename from packages/common/src/__tests__/env.test.ts rename to packages/old-common/src/__tests__/env.test.ts diff --git a/packages/common/src/constants.ts b/packages/old-common/src/constants.ts similarity index 100% rename from packages/common/src/constants.ts rename to packages/old-common/src/constants.ts diff --git a/packages/common/src/helpers/env.ts b/packages/old-common/src/helpers/env.ts similarity index 100% rename from packages/common/src/helpers/env.ts rename to packages/old-common/src/helpers/env.ts diff --git a/packages/common/src/helpers/extensions.ts b/packages/old-common/src/helpers/extensions.ts similarity index 100% rename from packages/common/src/helpers/extensions.ts rename to packages/old-common/src/helpers/extensions.ts diff --git a/packages/common/src/helpers/index.ts b/packages/old-common/src/helpers/index.ts similarity index 100% rename from packages/common/src/helpers/index.ts rename to packages/old-common/src/helpers/index.ts diff --git a/packages/common/src/index.ts b/packages/old-common/src/index.ts similarity index 100% rename from packages/common/src/index.ts rename to packages/old-common/src/index.ts diff --git a/packages/common/tsconfig.json b/packages/old-common/tsconfig.json similarity index 100% rename from packages/common/tsconfig.json rename to packages/old-common/tsconfig.json diff --git a/packages/prisma/.env.example b/packages/old-prisma/.env.example similarity index 100% rename from packages/prisma/.env.example rename to packages/old-prisma/.env.example diff --git a/packages/prisma/index.ts b/packages/old-prisma/index.ts similarity index 100% rename from packages/prisma/index.ts rename to packages/old-prisma/index.ts diff --git a/packages/prisma/migrations/20220704063811_init/migration.sql b/packages/old-prisma/migrations/20220704063811_init/migration.sql similarity index 100% rename from packages/prisma/migrations/20220704063811_init/migration.sql rename to packages/old-prisma/migrations/20220704063811_init/migration.sql diff --git a/packages/prisma/migrations/20220704165222_add_stats_and_logs/migration.sql b/packages/old-prisma/migrations/20220704165222_add_stats_and_logs/migration.sql similarity index 100% rename from packages/prisma/migrations/20220704165222_add_stats_and_logs/migration.sql rename to packages/old-prisma/migrations/20220704165222_add_stats_and_logs/migration.sql diff --git a/packages/prisma/migrations/20220704170242_typo/migration.sql b/packages/old-prisma/migrations/20220704170242_typo/migration.sql similarity index 100% rename from packages/prisma/migrations/20220704170242_typo/migration.sql rename to packages/old-prisma/migrations/20220704170242_typo/migration.sql diff --git a/packages/prisma/migrations/20220709142006_remove_memory_from_stats/migration.sql b/packages/old-prisma/migrations/20220709142006_remove_memory_from_stats/migration.sql similarity index 100% rename from packages/prisma/migrations/20220709142006_remove_memory_from_stats/migration.sql rename to packages/old-prisma/migrations/20220709142006_remove_memory_from_stats/migration.sql diff --git a/packages/prisma/migrations/migration_lock.toml b/packages/old-prisma/migrations/migration_lock.toml similarity index 100% rename from packages/prisma/migrations/migration_lock.toml rename to packages/old-prisma/migrations/migration_lock.toml diff --git a/packages/prisma/package.json b/packages/old-prisma/package.json similarity index 93% rename from packages/prisma/package.json rename to packages/old-prisma/package.json index 07715c3ec..603ea0628 100644 --- a/packages/prisma/package.json +++ b/packages/old-prisma/package.json @@ -1,5 +1,5 @@ { - "name": "@lagon/prisma", + "name": "@lagon/old-prisma", "version": "0.0.1", "private": true, "type": "module", diff --git a/packages/prisma/schema.prisma b/packages/old-prisma/schema.prisma similarity index 100% rename from packages/prisma/schema.prisma rename to packages/old-prisma/schema.prisma diff --git a/packages/prisma/tsconfig.json b/packages/old-prisma/tsconfig.json similarity index 100% rename from packages/prisma/tsconfig.json rename to packages/old-prisma/tsconfig.json diff --git a/packages/runtime/CHANGELOG.md b/packages/old-runtime/CHANGELOG.md similarity index 100% rename from packages/runtime/CHANGELOG.md rename to packages/old-runtime/CHANGELOG.md diff --git a/packages/runtime/README.md b/packages/old-runtime/README.md similarity index 100% rename from packages/runtime/README.md rename to packages/old-runtime/README.md diff --git a/packages/old-runtime/package.json b/packages/old-runtime/package.json new file mode 100644 index 000000000..71c110d72 --- /dev/null +++ b/packages/old-runtime/package.json @@ -0,0 +1,28 @@ +{ + "name": "@lagon/old-runtime", + "version": "0.0.6", + "description": "JavaScript Serverless Runtime for Lagon", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "watch": "tsup src/index.ts --format=esm --dts --watch", + "build": "tsup src/index.ts --format=esm --dts", + "build:runtime": "for file in src/runtime/*; do pnpm esbuild $file --outdir=dist/runtime --bundle --format=esm && pnpm tsc $file --target es2015 --moduleResolution node --declaration --emitDeclarationOnly --outDir dist/runtime; done", + "lint": "eslint --cache --ignore-pattern dist .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "isolated-vm": "^4.4.1", + "web-streams-polyfill": "^3.2.1" + }, + "devDependencies": { + "@types/node": "^17.0.35" + }, + "peerDependencies": { + "isolated-vm": "^4.4.1" + } +} diff --git a/packages/runtime/src/__tests__/base64.test.ts b/packages/old-runtime/src/__tests__/base64.test.ts similarity index 100% rename from packages/runtime/src/__tests__/base64.test.ts rename to packages/old-runtime/src/__tests__/base64.test.ts diff --git a/packages/runtime/src/__tests__/encoding.test.ts b/packages/old-runtime/src/__tests__/encoding.test.ts similarity index 100% rename from packages/runtime/src/__tests__/encoding.test.ts rename to packages/old-runtime/src/__tests__/encoding.test.ts diff --git a/packages/runtime/src/__tests__/env.test.ts b/packages/old-runtime/src/__tests__/env.test.ts similarity index 100% rename from packages/runtime/src/__tests__/env.test.ts rename to packages/old-runtime/src/__tests__/env.test.ts diff --git a/packages/runtime/src/__tests__/eval.test.ts b/packages/old-runtime/src/__tests__/eval.test.ts similarity index 100% rename from packages/runtime/src/__tests__/eval.test.ts rename to packages/old-runtime/src/__tests__/eval.test.ts diff --git a/packages/runtime/src/__tests__/fetch.test.ts b/packages/old-runtime/src/__tests__/fetch.test.ts similarity index 100% rename from packages/runtime/src/__tests__/fetch.test.ts rename to packages/old-runtime/src/__tests__/fetch.test.ts diff --git a/packages/runtime/src/__tests__/isolate.test.ts b/packages/old-runtime/src/__tests__/isolate.test.ts similarity index 100% rename from packages/runtime/src/__tests__/isolate.test.ts rename to packages/old-runtime/src/__tests__/isolate.test.ts diff --git a/packages/runtime/src/__tests__/logs.test.ts b/packages/old-runtime/src/__tests__/logs.test.ts similarity index 100% rename from packages/runtime/src/__tests__/logs.test.ts rename to packages/old-runtime/src/__tests__/logs.test.ts diff --git a/packages/old-runtime/src/__tests__/url.test.ts b/packages/old-runtime/src/__tests__/url.test.ts new file mode 100644 index 000000000..e2c547fd0 --- /dev/null +++ b/packages/old-runtime/src/__tests__/url.test.ts @@ -0,0 +1,247 @@ +import { describe, expect, it, vi } from 'vitest'; +import { URL, URLSearchParams } from '../runtime/URL'; + +describe('URLSearchParams', () => { + describe('instanciate', () => { + it('should instanciate without init', () => { + expect(new URLSearchParams().toString()).toEqual(''); + }); + + it('should instanciate with init as string', () => { + expect(new URLSearchParams('a=b&c=d').toString()).toEqual('a=b&c=d'); + }); + + it('should instanciate with init as string with ?', () => { + expect(new URLSearchParams('?a=b&c=d').toString()).toEqual('a=b&c=d'); + }); + + it('should instanciate with init as object', () => { + expect(new URLSearchParams({ a: 'b', c: 'd' }).toString()).toEqual('a=b&c=d'); + }); + + it('should instanciate with init as array', () => { + expect( + new URLSearchParams([ + ['a', 'b'], + ['c', 'd'], + ]).toString(), + ).toEqual('a=b&c=d'); + }); + }); + + it('should append', () => { + const params = new URLSearchParams(); + params.append('a', 'b'); + params.append('c', 'd'); + expect(params.toString()).toEqual('a=b&c=d'); + }); + + it('should delete', () => { + const params = new URLSearchParams('a=b&c=d'); + params.delete('a'); + expect(params.toString()).toEqual('c=d'); + }); + + it('should return entries', () => { + const params = new URLSearchParams('a=b&c=d'); + expect(Array.from(params.entries())).toEqual([ + ['a', 'b'], + ['c', 'd'], + ]); + }); + + it('should call forEach', () => { + const params = new URLSearchParams('a=b&c=d'); + const callback = vi.fn(); + params.forEach(callback); + expect(callback).toHaveBeenCalledTimes(2); + expect(callback).toHaveBeenCalledWith('b', 'a', params); + expect(callback).toHaveBeenCalledWith('d', 'c', params); + }); + + it('should get', () => { + const params = new URLSearchParams('a=b&c=d'); + expect(params.get('a')).toEqual('b'); + expect(params.get('c')).toEqual('d'); + expect(params.get('e')).toBeUndefined(); + }); + + it('should getAll', () => { + const params = new URLSearchParams('foo=1&bar=2'); + params.append('foo', '3'); + expect(params.getAll('foo')).toEqual(['1', '3']); + }); + + it('should has', () => { + const params = new URLSearchParams('a=b&c=d'); + expect(params.has('a')).toBeTruthy(); + expect(params.has('c')).toBeTruthy(); + expect(params.has('e')).toBeFalsy(); + }); + + it('should return keys', () => { + const params = new URLSearchParams('a=b&c=d'); + expect(Array.from(params.keys())).toEqual(['a', 'c']); + }); + + describe('set', () => { + it('should set without init', () => { + const params = new URLSearchParams(); + params.set('a', 'b'); + params.set('c', 'd'); + expect(params.toString()).toEqual('a=b&c=d'); + }); + + it('should set with init', () => { + const params = new URLSearchParams('a=b&c=d'); + params.set('a', 'e'); + params.set('c', 'f'); + expect(params.toString()).toEqual('a=e&c=f'); + }); + }); + + it('should sort', () => { + const params = new URLSearchParams('c=d&a=b'); + params.sort(); + expect(params.toString()).toEqual('a=b&c=d'); + }); + + it('should return values', () => { + const params = new URLSearchParams('a=b&c=d'); + expect(Array.from(params.values())).toEqual(['b', 'd']); + }); +}); + +describe('URL', () => { + describe('base url', () => { + it('should work with base url single slash', () => { + expect(new URL('/', 'https://developer.mozilla.org').toString()).toEqual('https://developer.mozilla.org/'); + }); + + it('should work with base url path without slash', () => { + expect(new URL('en-US/docs', 'https://developer.mozilla.org').toString()).toEqual( + 'https://developer.mozilla.org/en-US/docs', + ); + }); + + it('should work with base url path with slash', () => { + expect(new URL('/en-US/docs', 'https://developer.mozilla.org').toString()).toEqual( + 'https://developer.mozilla.org/en-US/docs', + ); + }); + }); + + describe('hash', () => { + it('should return the hash', () => { + expect(new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/href#Examples').hash).toEqual('#Examples'); + }); + }); + + describe('host', () => { + it('should return the host', () => { + expect(new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/host').host).toEqual( + 'developer.mozilla.org', + ); + }); + + it.todo('should return the host without port if scheme match', () => { + expect(new URL('https://developer.mozilla.org:443/en-US/docs/Web/API/URL/host').host).toEqual( + 'developer.mozilla.org', + ); + }); + + it("should return the host with port if scheme doesn't match", () => { + expect(new URL('https://developer.mozilla.org:4097/en-US/docs/Web/API/URL/host').host).toEqual( + 'developer.mozilla.org:4097', + ); + }); + }); + + describe('hostname', () => { + it('should return the hostname', () => { + expect(new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/hostname').hostname).toEqual( + 'developer.mozilla.org', + ); + }); + }); + + describe('href', () => { + it('should return the href', () => { + expect(new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/href').href).toEqual( + 'https://developer.mozilla.org/en-US/docs/Web/API/URL/href', + ); + }); + }); + + describe('origin', () => { + it('should return the origin for https', () => { + expect(new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/origin').origin).toEqual( + 'https://developer.mozilla.org', + ); + }); + + it('should return the origin for http', () => { + expect(new URL('http://developer.mozilla.org/en-US/docs/Web/API/URL/origin').origin).toEqual( + 'http://developer.mozilla.org', + ); + }); + + it('should return the origin for file', () => { + expect(new URL('file:https://mozilla.org:443/').origin).toEqual('https://mozilla.org'); + }); + + it('should return the origin for blob', () => { + expect(new URL('blob:https://mozilla.org:443/').origin).toEqual('https://mozilla.org'); + }); + }); + + describe('password', () => { + it('should return the password', () => { + expect( + new URL('https://anonymous:flabada@developer.mozilla.org/en-US/docs/Web/API/URL/password').password, + ).toEqual('flabada'); + }); + }); + + describe('pathname', () => { + it('should return the pathname', () => { + expect(new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/pathname?q=value').pathname).toEqual( + '/en-US/docs/Web/API/URL/pathname', + ); + }); + }); + + describe('port', () => { + it('should return the port', () => { + expect(new URL('https://mydomain.com:80/svn/Repos/').port).toEqual('80'); + }); + }); + + describe('protocol', () => { + it('should return the protocol', () => { + expect(new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/protocol').protocol).toEqual('https:'); + }); + }); + + describe('search', () => { + it('should return the search', () => { + expect(new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/search?q=123').search).toEqual('?q=123'); + }); + }); + + describe('searchParams', () => { + it('should return the searchParams', () => { + const { searchParams } = new URL('https://example.com/?name=Jonathan%20Smith&age=18'); + expect(searchParams?.get('name')).toEqual('Jonathan%20Smith'); + expect(searchParams?.get('age')).toEqual('18'); + }); + }); + + describe('username', () => { + it('should return the username', () => { + expect( + new URL('https://anonymous:flabada@developer.mozilla.org/en-US/docs/Web/API/URL/username').username, + ).toEqual('anonymous'); + }); + }); +}); diff --git a/packages/runtime/src/deployments/index.ts b/packages/old-runtime/src/deployments/index.ts similarity index 100% rename from packages/runtime/src/deployments/index.ts rename to packages/old-runtime/src/deployments/index.ts diff --git a/packages/runtime/src/deployments/log.ts b/packages/old-runtime/src/deployments/log.ts similarity index 100% rename from packages/runtime/src/deployments/log.ts rename to packages/old-runtime/src/deployments/log.ts diff --git a/packages/runtime/src/fetch/index.ts b/packages/old-runtime/src/fetch/index.ts similarity index 100% rename from packages/runtime/src/fetch/index.ts rename to packages/old-runtime/src/fetch/index.ts diff --git a/packages/runtime/src/index.ts b/packages/old-runtime/src/index.ts similarity index 100% rename from packages/runtime/src/index.ts rename to packages/old-runtime/src/index.ts diff --git a/packages/runtime/src/isolate/index.ts b/packages/old-runtime/src/isolate/index.ts similarity index 100% rename from packages/runtime/src/isolate/index.ts rename to packages/old-runtime/src/isolate/index.ts diff --git a/packages/runtime/src/isolate/runtime.ts b/packages/old-runtime/src/isolate/runtime.ts similarity index 100% rename from packages/runtime/src/isolate/runtime.ts rename to packages/old-runtime/src/isolate/runtime.ts diff --git a/packages/rust-runtime/js/Request.ts b/packages/old-runtime/src/runtime/Request.ts similarity index 100% rename from packages/rust-runtime/js/Request.ts rename to packages/old-runtime/src/runtime/Request.ts diff --git a/packages/runtime/src/runtime/Response.ts b/packages/old-runtime/src/runtime/Response.ts similarity index 100% rename from packages/runtime/src/runtime/Response.ts rename to packages/old-runtime/src/runtime/Response.ts diff --git a/packages/rust-runtime/js/URL.ts b/packages/old-runtime/src/runtime/URL.ts similarity index 100% rename from packages/rust-runtime/js/URL.ts rename to packages/old-runtime/src/runtime/URL.ts diff --git a/packages/rust-runtime/js/base64.ts b/packages/old-runtime/src/runtime/base64.ts similarity index 100% rename from packages/rust-runtime/js/base64.ts rename to packages/old-runtime/src/runtime/base64.ts diff --git a/packages/rust-runtime/js/encoding.ts b/packages/old-runtime/src/runtime/encoding.ts similarity index 100% rename from packages/rust-runtime/js/encoding.ts rename to packages/old-runtime/src/runtime/encoding.ts diff --git a/packages/runtime/src/runtime/fetch.ts b/packages/old-runtime/src/runtime/fetch.ts similarity index 100% rename from packages/runtime/src/runtime/fetch.ts rename to packages/old-runtime/src/runtime/fetch.ts diff --git a/packages/rust-runtime/js/parseMultipart.ts b/packages/old-runtime/src/runtime/parseMultipart.ts similarity index 100% rename from packages/rust-runtime/js/parseMultipart.ts rename to packages/old-runtime/src/runtime/parseMultipart.ts diff --git a/packages/rust-runtime/js/streams.ts b/packages/old-runtime/src/runtime/streams.ts similarity index 100% rename from packages/rust-runtime/js/streams.ts rename to packages/old-runtime/src/runtime/streams.ts diff --git a/packages/runtime/tsconfig.json b/packages/old-runtime/tsconfig.json similarity index 100% rename from packages/runtime/tsconfig.json rename to packages/old-runtime/tsconfig.json diff --git a/packages/serverless/.dockerignore b/packages/old-serverless/.dockerignore similarity index 100% rename from packages/serverless/.dockerignore rename to packages/old-serverless/.dockerignore diff --git a/packages/rust-serverless/.env.example b/packages/old-serverless/.env.example similarity index 79% rename from packages/rust-serverless/.env.example rename to packages/old-serverless/.env.example index 239998ad4..e8402c637 100644 --- a/packages/rust-serverless/.env.example +++ b/packages/old-serverless/.env.example @@ -5,7 +5,6 @@ LAGON_REGION= SENTRY_DSN= SENTRY_ENVIRONMENT=development -DATABASE_URL=mysql://root:mysql@localhost:3306/lagon REDIS_URL=redis://localhost:6379 S3_REGION= diff --git a/packages/serverless/CHANGELOG.md b/packages/old-serverless/CHANGELOG.md similarity index 100% rename from packages/serverless/CHANGELOG.md rename to packages/old-serverless/CHANGELOG.md diff --git a/packages/serverless/README.md b/packages/old-serverless/README.md similarity index 100% rename from packages/serverless/README.md rename to packages/old-serverless/README.md diff --git a/packages/old-serverless/package.json b/packages/old-serverless/package.json new file mode 100644 index 000000000..0a650e387 --- /dev/null +++ b/packages/old-serverless/package.json @@ -0,0 +1,30 @@ +{ + "name": "@lagon/old-serverless", + "version": "0.0.4", + "private": true, + "type": "module", + "scripts": { + "watch": "tsup src/index.ts src/exporter.ts --format=esm --watch", + "build": "tsup src/index.ts src/exporter.ts --format=esm", + "dev": "nodemon dist/index.js", + "start": "node dist/index.js", + "lint": "eslint --cache --ignore-pattern dist .", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.100.0", + "@lagon/prisma": "workspace:0.0.1", + "@lagon/old-runtime": "workspace:0.0.6", + "@sentry/node": "^7.1.1", + "@sentry/tracing": "^7.1.1", + "cron-parser": "^4.4.0", + "dotenv": "^16.0.1", + "fastify": "^3.29.0", + "isolated-vm": "^4.4.1", + "redis": "^4.1.0" + }, + "devDependencies": { + "@lagon/common": "workspace:0.0.2", + "@types/node": "^17.0.35" + } +} diff --git a/packages/serverless/public/404.html b/packages/old-serverless/public/404.html similarity index 100% rename from packages/serverless/public/404.html rename to packages/old-serverless/public/404.html diff --git a/packages/serverless/public/500.html b/packages/old-serverless/public/500.html similarity index 100% rename from packages/serverless/public/500.html rename to packages/old-serverless/public/500.html diff --git a/packages/serverless/src/__tests__/__snapshots__/server.test.ts.snap b/packages/old-serverless/src/__tests__/__snapshots__/server.test.ts.snap similarity index 100% rename from packages/serverless/src/__tests__/__snapshots__/server.test.ts.snap rename to packages/old-serverless/src/__tests__/__snapshots__/server.test.ts.snap diff --git a/packages/serverless/src/__tests__/deployments.test.ts b/packages/old-serverless/src/__tests__/deployments.test.ts similarity index 100% rename from packages/serverless/src/__tests__/deployments.test.ts rename to packages/old-serverless/src/__tests__/deployments.test.ts diff --git a/packages/serverless/src/__tests__/errors.test.ts b/packages/old-serverless/src/__tests__/errors.test.ts similarity index 100% rename from packages/serverless/src/__tests__/errors.test.ts rename to packages/old-serverless/src/__tests__/errors.test.ts diff --git a/packages/serverless/src/__tests__/misc.test.ts b/packages/old-serverless/src/__tests__/misc.test.ts similarity index 100% rename from packages/serverless/src/__tests__/misc.test.ts rename to packages/old-serverless/src/__tests__/misc.test.ts diff --git a/packages/serverless/src/__tests__/server.test.ts b/packages/old-serverless/src/__tests__/server.test.ts similarity index 100% rename from packages/serverless/src/__tests__/server.test.ts rename to packages/old-serverless/src/__tests__/server.test.ts diff --git a/packages/serverless/src/cluster/master.ts b/packages/old-serverless/src/cluster/master.ts similarity index 100% rename from packages/serverless/src/cluster/master.ts rename to packages/old-serverless/src/cluster/master.ts diff --git a/packages/serverless/src/cluster/worker.ts b/packages/old-serverless/src/cluster/worker.ts similarity index 100% rename from packages/serverless/src/cluster/worker.ts rename to packages/old-serverless/src/cluster/worker.ts diff --git a/packages/serverless/src/constants.ts b/packages/old-serverless/src/constants.ts similarity index 100% rename from packages/serverless/src/constants.ts rename to packages/old-serverless/src/constants.ts diff --git a/packages/serverless/src/deployments/cache.ts b/packages/old-serverless/src/deployments/cache.ts similarity index 100% rename from packages/serverless/src/deployments/cache.ts rename to packages/old-serverless/src/deployments/cache.ts diff --git a/packages/serverless/src/deployments/index.ts b/packages/old-serverless/src/deployments/index.ts similarity index 100% rename from packages/serverless/src/deployments/index.ts rename to packages/old-serverless/src/deployments/index.ts diff --git a/packages/serverless/src/deployments/result.ts b/packages/old-serverless/src/deployments/result.ts similarity index 100% rename from packages/serverless/src/deployments/result.ts rename to packages/old-serverless/src/deployments/result.ts diff --git a/packages/serverless/src/deployments/utils.ts b/packages/old-serverless/src/deployments/utils.ts similarity index 100% rename from packages/serverless/src/deployments/utils.ts rename to packages/old-serverless/src/deployments/utils.ts diff --git a/packages/serverless/src/exporter.ts b/packages/old-serverless/src/exporter.ts similarity index 100% rename from packages/serverless/src/exporter.ts rename to packages/old-serverless/src/exporter.ts diff --git a/packages/serverless/src/index.ts b/packages/old-serverless/src/index.ts similarity index 100% rename from packages/serverless/src/index.ts rename to packages/old-serverless/src/index.ts diff --git a/packages/serverless/src/server.ts b/packages/old-serverless/src/server.ts similarity index 100% rename from packages/serverless/src/server.ts rename to packages/old-serverless/src/server.ts diff --git a/packages/serverless/tsconfig.json b/packages/old-serverless/tsconfig.json similarity index 100% rename from packages/serverless/tsconfig.json rename to packages/old-serverless/tsconfig.json diff --git a/packages/rust-runtime/Cargo.toml b/packages/runtime/Cargo.toml similarity index 65% rename from packages/rust-runtime/Cargo.toml rename to packages/runtime/Cargo.toml index 4952d901b..167622099 100644 --- a/packages/rust-runtime/Cargo.toml +++ b/packages/runtime/Cargo.toml @@ -6,4 +6,4 @@ edition = "2021" [dependencies] v8 = "0.45.0" tokio = { version = "1", features = ["full"] } -reqwest = { version = "0.11", features = ["blocking"] } +hyper = { version = "0.14", features = ["client", "http1", "http2", "tcp"] } diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 31dac92eb..200dfedb3 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,28 +1,10 @@ { "name": "@lagon/runtime", - "version": "0.0.6", + "version": "0.1.0", "description": "JavaScript Serverless Runtime for Lagon", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], + "private": true, "scripts": { - "watch": "tsup src/index.ts --format=esm --dts --watch", - "build": "tsup src/index.ts --format=esm --dts", - "build:runtime": "for file in src/runtime/*; do pnpm esbuild $file --outdir=dist/runtime --bundle --format=esm && pnpm tsc $file --target es2015 --moduleResolution node --declaration --emitDeclarationOnly --outDir dist/runtime; done", - "lint": "eslint --cache --ignore-pattern dist .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "isolated-vm": "^4.4.1", - "web-streams-polyfill": "^3.2.1" - }, - "devDependencies": { - "@types/node": "^17.0.35" - }, - "peerDependencies": { - "isolated-vm": "^4.4.1" + "build": "cargo build", + "test": "cargo test" } } diff --git a/packages/runtime/runtime.js b/packages/runtime/runtime.js new file mode 120000 index 000000000..63ce5a0da --- /dev/null +++ b/packages/runtime/runtime.js @@ -0,0 +1 @@ +../js-runtime/dist/index.js \ No newline at end of file diff --git a/packages/rust-runtime/src/http/mod.rs b/packages/runtime/src/http/mod.rs similarity index 100% rename from packages/rust-runtime/src/http/mod.rs rename to packages/runtime/src/http/mod.rs diff --git a/packages/rust-runtime/src/isolate/allocator.rs b/packages/runtime/src/isolate/allocator.rs similarity index 100% rename from packages/rust-runtime/src/isolate/allocator.rs rename to packages/runtime/src/isolate/allocator.rs diff --git a/packages/rust-runtime/src/isolate/bindings/console.rs b/packages/runtime/src/isolate/bindings/console.rs similarity index 100% rename from packages/rust-runtime/src/isolate/bindings/console.rs rename to packages/runtime/src/isolate/bindings/console.rs diff --git a/packages/rust-runtime/src/isolate/bindings/fetch.rs b/packages/runtime/src/isolate/bindings/fetch.rs similarity index 62% rename from packages/rust-runtime/src/isolate/bindings/fetch.rs rename to packages/runtime/src/isolate/bindings/fetch.rs index 67af6da7e..7bc09a782 100644 --- a/packages/rust-runtime/src/isolate/bindings/fetch.rs +++ b/packages/runtime/src/isolate/bindings/fetch.rs @@ -1,3 +1,5 @@ +use hyper::{body, http::Request, Client}; + use crate::{http::Response, isolate::Isolate}; pub fn fetch_binding( @@ -15,12 +17,20 @@ pub fn fetch_binding( let (sender, receiver) = std::sync::mpsc::channel(); - let join_handle = tokio::task::spawn_blocking(move || { + let join_handle = tokio::task::spawn_local(async move { println!("spawning task"); - let reqwest = reqwest::blocking::get(resource).unwrap(); - let status = reqwest.status().as_u16(); - let body = reqwest.text().unwrap(); + let request = Request::builder() + .method("GET") + .uri(resource) + .body(hyper::Body::empty()) + .unwrap(); + let client = Client::new(); + + let response = client.request(request).await.unwrap(); + let status = response.status().as_u16(); + let body = body::to_bytes(response.into_body()).await.unwrap(); + let body = String::from_utf8(body.to_vec()).unwrap(); sender .send(Response { @@ -31,7 +41,7 @@ pub fn fetch_binding( .unwrap(); }); - state.promises.push(join_handle); + // state.promises.push(join_handle); retval.set(promise.into()); diff --git a/packages/rust-runtime/src/isolate/bindings/mod.rs b/packages/runtime/src/isolate/bindings/mod.rs similarity index 100% rename from packages/rust-runtime/src/isolate/bindings/mod.rs rename to packages/runtime/src/isolate/bindings/mod.rs diff --git a/packages/rust-runtime/src/isolate/mod.rs b/packages/runtime/src/isolate/mod.rs similarity index 97% rename from packages/rust-runtime/src/isolate/mod.rs rename to packages/runtime/src/isolate/mod.rs index 1e0532f5c..913e9e059 100644 --- a/packages/rust-runtime/src/isolate/mod.rs +++ b/packages/runtime/src/isolate/mod.rs @@ -122,16 +122,13 @@ impl Isolate { } } - pub(crate) fn state(isolate: &v8::Isolate) -> Rc> { + pub(self) fn state(isolate: &v8::Isolate) -> Rc> { let s = isolate.get_slot::>>().unwrap(); s.clone() } - pub(crate) fn global_realm(&self) -> GlobalRealm { - let state = self - .isolate - .get_slot::>>() - .unwrap(); + pub(self) fn global_realm(&self) -> GlobalRealm { + let state = Isolate::state(&self.isolate); let state = state.borrow(); state.global.clone() } diff --git a/packages/rust-runtime/src/lib.rs b/packages/runtime/src/lib.rs similarity index 100% rename from packages/rust-runtime/src/lib.rs rename to packages/runtime/src/lib.rs diff --git a/packages/rust-runtime/src/runtime/mod.rs b/packages/runtime/src/runtime/mod.rs similarity index 96% rename from packages/rust-runtime/src/runtime/mod.rs rename to packages/runtime/src/runtime/mod.rs index b50e7f76a..e0befde85 100644 --- a/packages/rust-runtime/src/runtime/mod.rs +++ b/packages/runtime/src/runtime/mod.rs @@ -2,7 +2,7 @@ use v8::V8; use crate::isolate::IsolateOptions; -static JS_RUNTIME: &str = include_str!("../../js/runtime.js"); +static JS_RUNTIME: &str = include_str!("../../runtime.js"); pub struct RuntimeOptions { allow_eval: bool, diff --git a/packages/rust-runtime/src/utils.rs b/packages/runtime/src/utils.rs similarity index 100% rename from packages/rust-runtime/src/utils.rs rename to packages/runtime/src/utils.rs diff --git a/packages/rust-runtime/tests/runtime.rs b/packages/runtime/tests/runtime.rs similarity index 97% rename from packages/rust-runtime/tests/runtime.rs rename to packages/runtime/tests/runtime.rs index 6ad294c10..ef08ace3d 100644 --- a/packages/rust-runtime/tests/runtime.rs +++ b/packages/runtime/tests/runtime.rs @@ -297,8 +297,9 @@ async fn timeout_reached() { #[tokio::test(flavor = "multi_thread")] async fn memory_reached() { setup(); - let mut isolate = Isolate::new(IsolateOptions::new( - "export function handler() { + let mut isolate = Isolate::new( + IsolateOptions::new( + "export function handler() { const storage = []; const twoMegabytes = 1024 * 1024 * 2; while (true) { @@ -310,8 +311,10 @@ async fn memory_reached() { } return new Response('Should not be reached'); }" - .into(), - )); + .into(), + ) + .with_timeout(1000), + ); // Increase timeout for CI assert_eq!( isolate.run(Request { diff --git a/packages/rust-runtime/js/index.ts b/packages/rust-runtime/js/index.ts deleted file mode 100644 index e145051c4..000000000 --- a/packages/rust-runtime/js/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export * from './base64'; -export * from './encoding'; -export * from './Request'; -export * from './Response'; -export * from './URL'; -export * from './parseMultipart'; -export * from './fetch'; -// export * from './streams'; - -import './console'; -import './process'; diff --git a/packages/rust-runtime/js/runtime.js b/packages/rust-runtime/js/runtime.js deleted file mode 100644 index a26cb4556..000000000 --- a/packages/rust-runtime/js/runtime.js +++ /dev/null @@ -1,460 +0,0 @@ -// js/base64.ts -var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; -function atob(encodedData) { - const str = String(encodedData).replace(/[=]+$/, ""); - if (str.length % 4 === 1) { - throw new Error("'atob' failed: The string to be decoded is not correctly encoded."); - } - let output = ""; - let bs = 0; - for (let bc = 0, buffer, idx = 0; buffer = str.charAt(idx++); ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) { - buffer = chars.indexOf(buffer); - } - return output; -} -function btoa(stringToEncode) { - const str = String(stringToEncode); - let output = ""; - let block = 0; - for (let charCode, idx = 0, map = chars; str.charAt(idx | 0) || (map = "=", idx % 1); output += map.charAt(63 & block >> 8 - idx % 1 * 8)) { - charCode = str.charCodeAt(idx += 3 / 4); - if (charCode > 255) { - throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."); - } - block = block << 8 | charCode; - } - return output; -} - -// js/encoding.ts -var TextEncoder = class { - encoding = "utf-8"; - encode(string) { - let pos = 0; - const len = string.length; - let at = 0; - let tlen = Math.max(32, len + (len >> 1) + 7); - let target = new Uint8Array(tlen >> 3 << 3); - while (pos < len) { - let value = string.charCodeAt(pos++); - if (value >= 55296 && value <= 56319) { - if (pos < len) { - const extra = string.charCodeAt(pos); - if ((extra & 64512) === 56320) { - ++pos; - value = ((value & 1023) << 10) + (extra & 1023) + 65536; - } - } - if (value >= 55296 && value <= 56319) { - continue; - } - } - if (at + 4 > target.length) { - tlen += 8; - tlen *= 1 + pos / string.length * 2; - tlen = tlen >> 3 << 3; - const update = new Uint8Array(tlen); - update.set(target); - target = update; - } - if ((value & 4294967168) === 0) { - target[at++] = value; - continue; - } else if ((value & 4294965248) === 0) { - target[at++] = value >> 6 & 31 | 192; - } else if ((value & 4294901760) === 0) { - target[at++] = value >> 12 & 15 | 224; - target[at++] = value >> 6 & 63 | 128; - } else if ((value & 4292870144) === 0) { - target[at++] = value >> 18 & 7 | 240; - target[at++] = value >> 12 & 63 | 128; - target[at++] = value >> 6 & 63 | 128; - } else { - continue; - } - target[at++] = value & 63 | 128; - } - return target.slice(0, at); - } -}; -var TextDecoder = class { - encoding = "utf-8"; - decode(buffer) { - const bytes = new Uint8Array(buffer); - let pos = 0; - const len = bytes.length; - const out = []; - while (pos < len) { - const byte1 = bytes[pos++]; - if (byte1 === 0) { - break; - } - if ((byte1 & 128) === 0) { - out.push(byte1); - } else if ((byte1 & 224) === 192) { - const byte2 = bytes[pos++] & 63; - out.push((byte1 & 31) << 6 | byte2); - } else if ((byte1 & 240) === 224) { - const byte2 = bytes[pos++] & 63; - const byte3 = bytes[pos++] & 63; - out.push((byte1 & 31) << 12 | byte2 << 6 | byte3); - } else if ((byte1 & 248) === 240) { - const byte2 = bytes[pos++] & 63; - const byte3 = bytes[pos++] & 63; - const byte4 = bytes[pos++] & 63; - let codepoint = (byte1 & 7) << 18 | byte2 << 12 | byte3 << 6 | byte4; - if (codepoint > 65535) { - codepoint -= 65536; - out.push(codepoint >>> 10 & 1023 | 55296); - codepoint = 56320 | codepoint & 1023; - } - out.push(codepoint); - } else { - } - } - return String.fromCharCode.apply(null, out); - } -}; - -// js/parseMultipart.ts -var parseMultipart = (headers, body) => { - if (!body) { - return {}; - } - const contentTypeHeader = headers.get("content-type"); - let boundary; - const getBoundary = (header) => header?.split(";")?.[1]?.split("=")?.[1]; - if (Array.isArray(contentTypeHeader)) { - contentTypeHeader.forEach((header) => { - if (!boundary) { - boundary = getBoundary(header); - } - }); - } else { - boundary = getBoundary(contentTypeHeader); - } - if (!boundary) { - return {}; - } - const result = {}; - for (const part of body.split(boundary)) { - if (part?.includes("Content-Disposition")) { - const content = part.split('name="')?.[1].split('"\\r\\n\\r\\n'); - if (content) { - const [name, value] = content; - result[name] = value.replace("\\r\\n\\r\\n--", ""); - } - } - } - return result; -}; - -// js/Response.ts -var Response = class { - body; - headers; - ok; - status; - statusText; - url; - constructor(body, options) { - this.body = body; - if (options?.headers) { - if (options.headers instanceof Headers) { - this.headers = options.headers; - } else { - this.headers = new Headers(options.headers); - } - } else { - this.headers = new Headers(); - } - if (options?.status) { - this.ok = options.status >= 200 && options.status < 300; - } else { - this.ok = true; - } - this.status = options?.status || 200; - this.statusText = options?.statusText || "OK"; - this.url = options?.url || ""; - } - async text() { - return this.body; - } - async json() { - return JSON.parse(this.body); - } - async formData() { - return parseMultipart(this.headers, this.body); - } -}; - -// js/fetch.ts -var Headers = class { - headers = /* @__PURE__ */ new Map(); - constructor(init) { - if (init) { - if (Array.isArray(init)) { - init.forEach(([key, value]) => { - this.addValue(key, value); - }); - } else { - Object.entries(init).forEach(([key, value]) => { - this.addValue(key, value); - }); - } - } - } - addValue(name, value) { - const values = this.headers.get(name); - if (values) { - values.push(value); - } else { - this.headers.set(name, [value]); - } - } - append(name, value) { - this.addValue(name, value); - } - delete(name) { - this.headers.delete(name); - } - *entries() { - for (const [key, values] of this.headers) { - for (const value of values) { - yield [key, value]; - } - } - } - get(name) { - return this.headers.get(name)?.[0]; - } - has(name) { - return this.headers.has(name); - } - keys() { - return this.headers.keys(); - } - set(name, value) { - this.headers.set(name, [value]); - } - *values() { - for (const [, values] of this.headers) { - for (const value of values) { - yield value; - } - } - } -}; -async function fetch(resource, init) { - const response = await Lagon.fetch(resource, init); - return new Response(response.body, {}); -} - -// js/Request.ts -var Request = class { - method; - headers; - body; - url; - constructor(input, options) { - this.method = options?.method || "GET"; - if (options?.headers) { - if (options.headers instanceof Headers) { - this.headers = options.headers; - } else { - this.headers = new Headers(options.headers); - } - } else { - this.headers = new Headers(); - } - this.body = options?.body; - this.url = input; - } - async text() { - return this.body || ""; - } - async json() { - return JSON.parse(this.body || "{}"); - } - async formData() { - return parseMultipart(this.headers, this.body); - } -}; - -// js/URL.ts -var URLSearchParams = class { - params = /* @__PURE__ */ new Map(); - constructor(init) { - if (init) { - if (typeof init === "string") { - init.replace("?", "").split("&").forEach((entry) => { - const [key, value] = entry.split("="); - this.addValue(key, value); - }); - } else if (typeof init === "object") { - if (Array.isArray(init)) { - init.forEach(([key, value]) => { - this.addValue(key, value); - }); - } else { - Object.entries(init).forEach(([key, value]) => { - this.addValue(key, value); - }); - } - } - } - } - addValue(name, value) { - const values = this.params.get(name); - if (values) { - values.push(value); - } else { - this.params.set(name, [value]); - } - } - append(name, value) { - this.addValue(name, value); - } - delete(name) { - this.params.delete(name); - } - *entries() { - for (const [key, values] of this.params) { - for (const value of values) { - yield [key, value]; - } - } - } - forEach(callback, thisArg) { - this.params.forEach((values, key) => { - values.forEach((value) => { - callback.call(thisArg, value, key, this); - }); - }); - } - get(name) { - return this.params.get(name)?.[0]; - } - getAll(name) { - return this.params.get(name); - } - has(name) { - return this.params.has(name); - } - keys() { - return this.params.keys(); - } - set(name, value) { - this.params.set(name, [value]); - } - sort() { - this.params = new Map([...this.params].sort()); - } - toString() { - return Array.from(this.params.entries()).map(([key, value]) => `${key}=${value}`).join("&"); - } - *values() { - for (const [, values] of this.params) { - for (const value of values) { - yield value; - } - } - } -}; -var URL = class { - hash = ""; - host = ""; - hostname = ""; - href = ""; - origin = ""; - password = ""; - pathname = ""; - port = ""; - protocol = ""; - search = ""; - searchParams = null; - username = ""; - constructor(url, base) { - let finalUrl = url; - if (base) { - const baseUrl = new URL(base); - finalUrl = baseUrl.protocol + "//" + baseUrl.host; - if (!url.startsWith("/")) { - finalUrl += "/"; - } - finalUrl += url; - } - const result = /((?:blob|file):)?(https?\:)\/\/(?:(.*):(.*)@)?(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/.exec(finalUrl); - if (result) { - const [href, origin, protocol, username, password, host, hostname, port, pathname, search, hash] = result; - this.hash = hash; - this.host = host; - this.hostname = hostname; - this.href = href; - if (["http:", "https:"].includes(protocol) || ["blob:", "file:"].includes(origin)) { - this.origin = protocol + "//" + hostname; - } - this.password = password; - this.pathname = pathname === "" ? "/" : pathname; - this.port = port; - this.protocol = protocol; - this.search = search; - this.searchParams = new URLSearchParams(search); - this.username = username; - } - } - toString() { - return this.href; - } -}; - -// js/console.ts -((globalThis2) => { - const format = (...args) => { - let str = ""; - for (let i = 0; i < args.length; i++) { - const arg = args[i]; - if (typeof arg === "string") { - str += arg; - } else { - str += JSON.stringify(arg); - } - } - return str; - }; - globalThis2.console.log = (...args) => { - Lagon.log(`[log] ${format(...args)}`); - }; - globalThis2.console.info = (...args) => { - Lagon.log(`[info] ${format(...args)}`); - }; - globalThis2.console.debug = (...args) => { - Lagon.log(`[debug] ${format(...args)}`); - }; - globalThis2.console.error = (...args) => { - Lagon.log(`[error] ${format(...args)}`); - }; - globalThis2.console.warn = (...args) => { - Lagon.log(`[warn] ${format(...args)}`); - }; -})(globalThis); - -// js/process.ts -((globalThis2) => { - globalThis2.process = { - env: {} - }; -})(globalThis); -export { - Headers, - Request, - Response, - TextDecoder, - TextEncoder, - URL, - URLSearchParams, - atob, - btoa, - fetch, - parseMultipart -}; diff --git a/packages/rust-runtime/package.json b/packages/rust-runtime/package.json deleted file mode 100644 index 350dcc998..000000000 --- a/packages/rust-runtime/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "rust-runtime", - "private": true, - "scripts": { - "build": "pnpm esbuild js/index.ts --bundle --outfile=js/runtime.js --format=esm --target=es2022" - }, - "devDependencies": { - "esbuild": "^0.14.41" - }, - "dependencies": { - "web-streams-polyfill": "^3.2.1" - } -} diff --git a/packages/serverless/.env.example b/packages/serverless/.env.example index e8402c637..239998ad4 100644 --- a/packages/serverless/.env.example +++ b/packages/serverless/.env.example @@ -5,6 +5,7 @@ LAGON_REGION= SENTRY_DSN= SENTRY_ENVIRONMENT=development +DATABASE_URL=mysql://root:mysql@localhost:3306/lagon REDIS_URL=redis://localhost:6379 S3_REGION= diff --git a/packages/rust-serverless/Cargo.toml b/packages/serverless/Cargo.toml similarity index 88% rename from packages/rust-serverless/Cargo.toml rename to packages/serverless/Cargo.toml index 8b86ca95b..7cac4f0f2 100644 --- a/packages/rust-serverless/Cargo.toml +++ b/packages/serverless/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] hyper = { version = "0.14", features = ["server", "http1", "http2", "runtime"] } tokio = { version = "1", features = ["rt-multi-thread", "macros"] } -lagon-runtime = { path = "../rust-runtime" } +lagon-runtime = { path = "../runtime" } flume = "0.10.14" mysql = "22.2.0" dotenv = "0.15.0" diff --git a/packages/serverless/package.json b/packages/serverless/package.json index 2d0d6436d..e79d9e95c 100644 --- a/packages/serverless/package.json +++ b/packages/serverless/package.json @@ -1,30 +1,9 @@ { "name": "@lagon/serverless", - "version": "0.0.4", + "version": "0.1.0", + "description": "Serverless software using Lagon Runtime", "private": true, - "type": "module", "scripts": { - "watch": "tsup src/index.ts src/exporter.ts --format=esm --watch", - "build": "tsup src/index.ts src/exporter.ts --format=esm", - "dev": "nodemon dist/index.js", - "start": "node dist/index.js", - "lint": "eslint --cache --ignore-pattern dist .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@aws-sdk/client-s3": "^3.100.0", - "@lagon/prisma": "workspace:0.0.1", - "@lagon/runtime": "workspace:0.0.6", - "@sentry/node": "^7.1.1", - "@sentry/tracing": "^7.1.1", - "cron-parser": "^4.4.0", - "dotenv": "^16.0.1", - "fastify": "^3.29.0", - "isolated-vm": "^4.4.1", - "redis": "^4.1.0" - }, - "devDependencies": { - "@lagon/common": "workspace:0.0.2", - "@types/node": "^17.0.35" + "build": "cargo build" } } diff --git a/packages/rust-serverless/src/deployments/assets.rs b/packages/serverless/src/deployments/assets.rs similarity index 100% rename from packages/rust-serverless/src/deployments/assets.rs rename to packages/serverless/src/deployments/assets.rs diff --git a/packages/rust-serverless/src/deployments/filesystem.rs b/packages/serverless/src/deployments/filesystem.rs similarity index 87% rename from packages/rust-serverless/src/deployments/filesystem.rs rename to packages/serverless/src/deployments/filesystem.rs index 0cf8bbfaa..0a6a14270 100644 --- a/packages/rust-serverless/src/deployments/filesystem.rs +++ b/packages/serverless/src/deployments/filesystem.rs @@ -3,6 +3,16 @@ use std::{env, fs, io, path::Path}; use super::Deployment; +pub fn create_deployments_folder() -> io::Result<()> { + let path = Path::new("deployments"); + + if !path.exists() { + fs::create_dir(path)?; + } + + Ok(()) +} + pub fn has_deployment_code(deployment: &Deployment) -> bool { let path = Path::new("deployments").join(deployment.id.clone() + ".js"); diff --git a/packages/rust-serverless/src/deployments/mod.rs b/packages/serverless/src/deployments/mod.rs similarity index 94% rename from packages/rust-serverless/src/deployments/mod.rs rename to packages/serverless/src/deployments/mod.rs index 6e74bd537..9b9610dbd 100644 --- a/packages/rust-serverless/src/deployments/mod.rs +++ b/packages/serverless/src/deployments/mod.rs @@ -6,7 +6,9 @@ use tokio::sync::RwLock; use crate::deployments::filesystem::has_deployment_code; -use self::filesystem::{rm_deployment, write_deployment, write_deployment_asset}; +use self::filesystem::{ + create_deployments_folder, rm_deployment, write_deployment, write_deployment_asset, +}; pub mod assets; pub mod filesystem; @@ -63,7 +65,9 @@ pub async fn get_deployments( ) .unwrap(); - println!("Deployments: {:?}", deployments_list); + if let Err(error) = create_deployments_folder() { + println!("Could not create deployments folder: {}", error); + } if let Err(error) = delete_old_deployments(&deployments_list).await { println!("Failed to delete old deployments: {:?}", error); diff --git a/packages/rust-serverless/src/deployments/pubsub.rs b/packages/serverless/src/deployments/pubsub.rs similarity index 100% rename from packages/rust-serverless/src/deployments/pubsub.rs rename to packages/serverless/src/deployments/pubsub.rs diff --git a/packages/rust-serverless/src/http/mod.rs b/packages/serverless/src/http/mod.rs similarity index 100% rename from packages/rust-serverless/src/http/mod.rs rename to packages/serverless/src/http/mod.rs diff --git a/packages/rust-serverless/src/main.rs b/packages/serverless/src/main.rs similarity index 100% rename from packages/rust-serverless/src/main.rs rename to packages/serverless/src/main.rs diff --git a/packages/website/lib/api/deployments.ts b/packages/website/lib/api/deployments.ts index 095a4bfe0..6c085c5ec 100644 --- a/packages/website/lib/api/deployments.ts +++ b/packages/website/lib/api/deployments.ts @@ -1,11 +1,11 @@ import { DeleteObjectCommand, DeleteObjectsCommand, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3'; import redis from 'lib/redis'; import s3 from 'lib/s3'; -import prisma from '@lagon/prisma'; -import { envStringToObject } from '@lagon/common'; +import prisma from 'lib/prisma'; import { Readable } from 'node:stream'; import * as trpc from '@trpc/server'; import fs from 'node:fs'; +import { envStringToObject } from 'lib/utils'; export async function createDeployment( func: { diff --git a/packages/website/lib/constants.ts b/packages/website/lib/constants.ts index 454a43088..608ae8866 100644 --- a/packages/website/lib/constants.ts +++ b/packages/website/lib/constants.ts @@ -4,3 +4,11 @@ export const ORGANIZATION_DESCRIPTION_MAX_LENGTH = 200; export const FUNCTION_NAME_MIN_LENGTH = 5; export const FUNCTION_NAME_MAX_LENGTH = 20; + +export const FUNCTION_DEFAULT_MEMORY = 128; // 128MB +export const FUNCTION_DEFAULT_TIMEOUT = 50; // 50ms +export const REGIONS = { + 'EU-WEST-3': 'eu-west-3 (Paris)', +}; + +export type Regions = keyof typeof REGIONS; diff --git a/packages/website/lib/pages/function/FunctionSettings.tsx b/packages/website/lib/pages/function/FunctionSettings.tsx index a3866ae00..56768bd1b 100644 --- a/packages/website/lib/pages/function/FunctionSettings.tsx +++ b/packages/website/lib/pages/function/FunctionSettings.tsx @@ -17,13 +17,12 @@ import { requiredValidator, } from 'lib/form/validators'; import Dialog from 'lib/components/Dialog'; -import { FUNCTION_NAME_MAX_LENGTH, FUNCTION_NAME_MIN_LENGTH } from 'lib/constants'; +import { FUNCTION_NAME_MAX_LENGTH, FUNCTION_NAME_MIN_LENGTH, Regions, REGIONS } from 'lib/constants'; import { trpc } from 'lib/trpc'; import useFunction from 'lib/hooks/useFunction'; import { QueryObserverBaseResult } from 'react-query'; import { useI18n } from 'locales'; import Menu from 'lib/components/Menu'; -import { Regions, REGIONS } from '@lagon/common'; type FunctionSettingsProps = { func: ReturnType['data']; diff --git a/packages/website/lib/prisma.ts b/packages/website/lib/prisma.ts new file mode 100644 index 000000000..e86216729 --- /dev/null +++ b/packages/website/lib/prisma.ts @@ -0,0 +1,14 @@ +import { PrismaClient } from '@prisma/client'; + +// @ts-expect-error NodeJS.Global does not exists +interface CustomNodeJsGlobal extends NodeJS.Global { + prisma: PrismaClient; +} + +declare const global: CustomNodeJsGlobal; + +const prisma = global.prisma || new PrismaClient(); + +if (process.env.NODE_ENV === 'development') global.prisma = prisma; + +export default prisma; diff --git a/packages/website/lib/trpc/accountsRouter.ts b/packages/website/lib/trpc/accountsRouter.ts index 12a2a8ccc..f4702e71c 100644 --- a/packages/website/lib/trpc/accountsRouter.ts +++ b/packages/website/lib/trpc/accountsRouter.ts @@ -1,4 +1,4 @@ -import prisma from '@lagon/prisma'; +import prisma from 'lib/prisma'; import { createRouter } from 'pages/api/trpc/[trpc]'; import { z } from 'zod'; diff --git a/packages/website/lib/trpc/deploymentsRouter.ts b/packages/website/lib/trpc/deploymentsRouter.ts index b78ddfed5..b97891f08 100644 --- a/packages/website/lib/trpc/deploymentsRouter.ts +++ b/packages/website/lib/trpc/deploymentsRouter.ts @@ -1,5 +1,5 @@ import { removeDeployment, setCurrentDeployment } from 'lib/api/deployments'; -import prisma from '@lagon/prisma'; +import prisma from 'lib/prisma'; import * as trpc from '@trpc/server'; import { createRouter } from 'pages/api/trpc/[trpc]'; import { z } from 'zod'; diff --git a/packages/website/lib/trpc/functionsRouter.ts b/packages/website/lib/trpc/functionsRouter.ts index bfe93854b..b88efed3a 100644 --- a/packages/website/lib/trpc/functionsRouter.ts +++ b/packages/website/lib/trpc/functionsRouter.ts @@ -1,10 +1,14 @@ import { z } from 'zod'; -import prisma from '@lagon/prisma'; +import prisma from 'lib/prisma'; import { createRouter } from 'pages/api/trpc/[trpc]'; import { LOG_LEVELS, TIMEFRAMES } from 'lib/types'; import { getDeploymentCode, removeFunction, updateDomains } from 'lib/api/deployments'; -import { FUNCTION_NAME_MAX_LENGTH, FUNCTION_NAME_MIN_LENGTH } from 'lib/constants'; -import { FUNCTION_DEFAULT_MEMORY, FUNCTION_DEFAULT_TIMEOUT } from '@lagon/common'; +import { + FUNCTION_DEFAULT_MEMORY, + FUNCTION_DEFAULT_TIMEOUT, + FUNCTION_NAME_MAX_LENGTH, + FUNCTION_NAME_MIN_LENGTH, +} from 'lib/constants'; import * as trpc from '@trpc/server'; export const functionsRouter = () => diff --git a/packages/website/lib/trpc/organizationsRouter.ts b/packages/website/lib/trpc/organizationsRouter.ts index fb9f65bbd..94b985d6f 100644 --- a/packages/website/lib/trpc/organizationsRouter.ts +++ b/packages/website/lib/trpc/organizationsRouter.ts @@ -4,7 +4,7 @@ import { ORGANIZATION_NAME_MAX_LENGTH, ORGANIZATION_NAME_MIN_LENGTH, } from 'lib/constants'; -import prisma from '@lagon/prisma'; +import prisma from 'lib/prisma'; import { createRouter } from 'pages/api/trpc/[trpc]'; import { z } from 'zod'; diff --git a/packages/website/lib/trpc/tokensRouter.ts b/packages/website/lib/trpc/tokensRouter.ts index b46f37e81..051b27a46 100644 --- a/packages/website/lib/trpc/tokensRouter.ts +++ b/packages/website/lib/trpc/tokensRouter.ts @@ -1,4 +1,4 @@ -import prisma from '@lagon/prisma'; +import prisma from 'lib/prisma'; import { createRouter } from 'pages/api/trpc/[trpc]'; import { z } from 'zod'; import * as trpc from '@trpc/server'; diff --git a/packages/website/lib/utils.ts b/packages/website/lib/utils.ts index 27200cebf..15e80bcc0 100644 --- a/packages/website/lib/utils.ts +++ b/packages/website/lib/utils.ts @@ -24,3 +24,12 @@ export function reloadSession() { const event = new Event('visibilitychange'); document.dispatchEvent(event); } + +export function envStringToObject(env: { key: string; value: string }[]): Record { + return env.reduce((acc, { key, value }) => { + return { + ...acc, + [key]: value, + }; + }, {}); +} diff --git a/packages/website/next.config.js b/packages/website/next.config.js index 255f86da4..2fc3f2a24 100644 --- a/packages/website/next.config.js +++ b/packages/website/next.config.js @@ -5,7 +5,6 @@ // eslint-disable-next-line const { withSentryConfig } = require('@sentry/nextjs'); -const withTM = require('next-transpile-modules')(['@lagon/prisma', '@lagon/common']); /** @type {import('next').NextConfig} */ const nextConfig = { @@ -31,4 +30,4 @@ const sentryWebpackPluginOptions = { // Make sure adding Sentry options is the last code to run before exporting, to // ensure that your source maps include changes from all other Webpack plugins -module.exports = withTM(withSentryConfig(nextConfig, sentryWebpackPluginOptions)); +module.exports = withSentryConfig(nextConfig, sentryWebpackPluginOptions); diff --git a/packages/website/package.json b/packages/website/package.json index 323bcd14a..d482c8e2b 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -9,16 +9,16 @@ "storybook": "start-storybook -p 6006", "build-storybook": "build-storybook", "lint": "eslint --cache --ignore-pattern dist .", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "postinstall": "prisma generate" }, "dependencies": { "@aws-sdk/client-s3": "^3.100.0", "@headlessui/react": "^1.6.4", "@heroicons/react": "^1.0.6", - "@lagon/common": "workspace:0.0.2", - "@lagon/prisma": "workspace:0.0.1", "@monaco-editor/react": "^4.4.5", "@next-auth/prisma-adapter": "^1.0.3", + "@prisma/client": "^3.15.2", "@radix-ui/react-alert-dialog": "^0.1.7", "@radix-ui/react-tabs": "^0.1.5", "@scaleway/use-random-name": "^0.2.3", @@ -34,7 +34,6 @@ "next": "12.1.6", "next-auth": "^4.3.4", "next-international": "^0.2.0", - "next-transpile-modules": "^9.0.0", "react": "18.1.0", "react-chartjs-2": "^4.2.0", "react-dom": "18.1.0", @@ -63,6 +62,7 @@ "eslint-config-next": "12.1.6", "eslint-plugin-storybook": "^0.5.12", "postcss": "^8.4.14", + "prisma": "^3.15.2", "tailwindcss": "^3.0.24", "tsconfig-paths-webpack-plugin": "^3.5.2", "typescript": "^4.6.4" diff --git a/packages/website/pages/api/auth/[...nextauth].ts b/packages/website/pages/api/auth/[...nextauth].ts index 7af7c8c75..0cdf948b7 100644 --- a/packages/website/pages/api/auth/[...nextauth].ts +++ b/packages/website/pages/api/auth/[...nextauth].ts @@ -1,7 +1,7 @@ import NextAuth, { Session, NextAuthOptions } from 'next-auth'; import GithubProvider from 'next-auth/providers/github'; import { PrismaAdapter } from '@next-auth/prisma-adapter'; -import prisma from '@lagon/prisma'; +import prisma from 'lib/prisma'; import apiHandler from 'lib/api'; import * as Sentry from '@sentry/nextjs'; diff --git a/packages/website/pages/api/deployment.ts b/packages/website/pages/api/deployment.ts index 44ecb1af5..b61bf7bec 100644 --- a/packages/website/pages/api/deployment.ts +++ b/packages/website/pages/api/deployment.ts @@ -1,7 +1,7 @@ import apiHandler from 'lib/api'; import { NextApiRequest, NextApiResponse } from 'next'; import { IncomingForm } from 'formidable'; -import prisma from '@lagon/prisma'; +import prisma from 'lib/prisma'; import { createDeployment, removeCurrentDeployment } from 'lib/api/deployments'; import fs from 'node:fs'; import { getSession } from 'next-auth/react'; diff --git a/packages/website/pages/api/trpc/[trpc].ts b/packages/website/pages/api/trpc/[trpc].ts index e21a290b0..9619ff987 100644 --- a/packages/website/pages/api/trpc/[trpc].ts +++ b/packages/website/pages/api/trpc/[trpc].ts @@ -6,7 +6,7 @@ import { functionsRouter } from 'lib/trpc/functionsRouter'; import { organizationsRouter } from 'lib/trpc/organizationsRouter'; import { tokensRouter } from 'lib/trpc/tokensRouter'; import { deploymentsRouter } from 'lib/trpc/deploymentsRouter'; -import prisma from '@lagon/prisma'; +import prisma from 'lib/prisma'; import { Session } from 'next-auth'; import * as Sentry from '@sentry/nextjs'; import { accountsRouter } from 'lib/trpc/accountsRouter'; diff --git a/packages/website/prisma/migrations/20220704063811_init/migration.sql b/packages/website/prisma/migrations/20220704063811_init/migration.sql new file mode 100644 index 000000000..89febe69c --- /dev/null +++ b/packages/website/prisma/migrations/20220704063811_init/migration.sql @@ -0,0 +1,139 @@ +-- CreateTable +CREATE TABLE `Account` ( + `id` VARCHAR(191) NOT NULL, + `userId` VARCHAR(191) NOT NULL, + `type` VARCHAR(191) NOT NULL, + `provider` VARCHAR(191) NOT NULL, + `providerAccountId` VARCHAR(191) NOT NULL, + `refresh_token` TEXT NULL, + `access_token` TEXT NULL, + `expires_at` INTEGER NULL, + `token_type` VARCHAR(191) NULL, + `scope` VARCHAR(191) NULL, + `id_token` TEXT NULL, + `session_state` VARCHAR(191) NULL, + + UNIQUE INDEX `Account_provider_providerAccountId_key`(`provider`, `providerAccountId`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `VerificationToken` ( + `identifier` VARCHAR(191) NOT NULL, + `token` VARCHAR(191) NOT NULL, + `expires` DATETIME(3) NOT NULL, + + UNIQUE INDEX `VerificationToken_token_key`(`token`), + UNIQUE INDEX `VerificationToken_identifier_token_key`(`identifier`, `token`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Session` ( + `id` VARCHAR(191) NOT NULL, + `sessionToken` VARCHAR(191) NOT NULL, + `userId` VARCHAR(191) NOT NULL, + `expires` DATETIME(3) NOT NULL, + + UNIQUE INDEX `Session_sessionToken_key`(`sessionToken`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `User` ( + `id` VARCHAR(191) NOT NULL, + `name` VARCHAR(191) NULL, + `email` VARCHAR(191) NULL, + `emailVerified` DATETIME(3) NULL, + `image` VARCHAR(191) NULL, + `verificationCode` VARCHAR(191) NULL, + `currentOrganizationId` VARCHAR(191) NULL, + + UNIQUE INDEX `User_email_key`(`email`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Organization` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `description` VARCHAR(191) NULL, + `ownerId` VARCHAR(191) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Function` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `memory` INTEGER NOT NULL, + `timeout` INTEGER NOT NULL, + `cron` VARCHAR(191) NULL, + `organizationId` VARCHAR(191) NOT NULL, + + UNIQUE INDEX `Function_name_key`(`name`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Domain` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `domain` VARCHAR(191) NOT NULL, + `functionId` VARCHAR(191) NOT NULL, + + UNIQUE INDEX `Domain_domain_key`(`domain`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `EnvVariable` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `key` VARCHAR(191) NOT NULL, + `value` VARCHAR(191) NOT NULL, + `functionId` VARCHAR(191) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Deployment` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `isCurrent` BOOLEAN NOT NULL, + `functionId` VARCHAR(191) NOT NULL, + `triggerer` VARCHAR(191) NOT NULL DEFAULT 'Lagon', + `commit` VARCHAR(191) NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Asset` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `deploymentId` VARCHAR(191) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Token` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `value` VARCHAR(191) NOT NULL, + `userId` VARCHAR(191) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/packages/website/prisma/migrations/20220704165222_add_stats_and_logs/migration.sql b/packages/website/prisma/migrations/20220704165222_add_stats_and_logs/migration.sql new file mode 100644 index 000000000..211037f99 --- /dev/null +++ b/packages/website/prisma/migrations/20220704165222_add_stats_and_logs/migration.sql @@ -0,0 +1,28 @@ +-- CreateTable +CREATE TABLE `Stat` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `functionId` VARCHAR(191) NOT NULL, + `deploymentId` VARCHAR(191) NOT NULL, + `cpuTime` INTEGER NOT NULL, + `memory` INTEGER NOT NULL, + `sendBytes` INTEGER NOT NULL, + `receiveBytes` INTEGER NOT NULL, + `requests` INTEGER NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Log` ( + `id` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + `functionId` VARCHAR(191) NOT NULL, + `deploymentId` VARCHAR(191) NOT NULL, + `level` ENUM('LOG', 'ERROR', 'INFO', 'WARN', 'DEBUG') NOT NULL, + `message` VARCHAR(191) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/packages/website/prisma/migrations/20220704170242_typo/migration.sql b/packages/website/prisma/migrations/20220704170242_typo/migration.sql new file mode 100644 index 000000000..d549fcc5f --- /dev/null +++ b/packages/website/prisma/migrations/20220704170242_typo/migration.sql @@ -0,0 +1,10 @@ +/* + Warnings: + + - You are about to drop the column `receiveBytes` on the `Stat` table. All the data in the column will be lost. + - Added the required column `receivedBytes` to the `Stat` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE `Stat` DROP COLUMN `receiveBytes`, + ADD COLUMN `receivedBytes` INTEGER NOT NULL; diff --git a/packages/website/prisma/migrations/20220709142006_remove_memory_from_stats/migration.sql b/packages/website/prisma/migrations/20220709142006_remove_memory_from_stats/migration.sql new file mode 100644 index 000000000..37a8445c9 --- /dev/null +++ b/packages/website/prisma/migrations/20220709142006_remove_memory_from_stats/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - You are about to drop the column `memory` on the `Stat` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE `Stat` DROP COLUMN `memory`; diff --git a/packages/website/prisma/migrations/migration_lock.toml b/packages/website/prisma/migrations/migration_lock.toml new file mode 100644 index 000000000..e5a788a7a --- /dev/null +++ b/packages/website/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "mysql" \ No newline at end of file diff --git a/packages/website/prisma/schema.prisma b/packages/website/prisma/schema.prisma new file mode 100644 index 000000000..88c3ea627 --- /dev/null +++ b/packages/website/prisma/schema.prisma @@ -0,0 +1,199 @@ +generator client { + provider = "prisma-client-js" + previewFeatures = ["referentialIntegrity"] +} + +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + referentialIntegrity = "prisma" +} + +model Account { + id String @id @default(cuid()) + userId String + type String + provider String + providerAccountId String + refresh_token String? @db.Text + access_token String? @db.Text + expires_at Int? + token_type String? + scope String? + id_token String? @db.Text + session_state String? + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@unique([provider, providerAccountId]) +} + +model VerificationToken { + identifier String + token String @unique + expires DateTime + + @@unique([identifier, token]) +} + +model Session { + id String @id @default(cuid()) + sessionToken String @unique + userId String + expires DateTime + user User @relation(fields: [userId], references: [id], onDelete: Cascade) +} + +model User { + id String @id @default(cuid()) + name String? + email String? @unique + emailVerified DateTime? + image String? + accounts Account[] + sessions Session[] + verificationCode String? + + currentOrganizationId String? + organizations Organization[] + tokens Token[] +} + +model Organization { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + name String + description String? + + owner User @relation(fields: [ownerId], references: [id]) + ownerId String + + functions Function[] +} + +model Function { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + name String @unique + domains Domain[] + memory Int + timeout Int + cron String? + cronRegion String @default("EU-WEST-3") + env EnvVariable[] + + organization Organization @relation(fields: [organizationId], references: [id]) + organizationId String + + deployments Deployment[] + stats Stat[] + logs Log[] +} + +model Domain { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + domain String @unique + + function Function @relation(fields: [functionId], references: [id]) + functionId String +} + +model EnvVariable { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + key String + value String + + function Function @relation(fields: [functionId], references: [id]) + functionId String +} + +model Deployment { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + isCurrent Boolean + assets Asset[] + + function Function @relation(fields: [functionId], references: [id]) + functionId String + + triggerer String @default("Lagon") + commit String? + + stats Stat[] + logs Log[] +} + +model Asset { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + name String + // TODO: sha + + deployment Deployment @relation(fields: [deploymentId], references: [id]) + deploymentId String +} + +model Token { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + value String + + user User @relation(fields: [userId], references: [id]) + userId String +} + +model Stat { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + function Function @relation(fields: [functionId], references: [id]) + functionId String + + deployment Deployment @relation(fields: [deploymentId], references: [id]) + deploymentId String + + cpuTime Int + sendBytes Int + receivedBytes Int + requests Int +} + +enum LogLevel { + LOG + ERROR + INFO + WARN + DEBUG +} + +model Log { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + function Function @relation(fields: [functionId], references: [id]) + functionId String + + deployment Deployment @relation(fields: [deploymentId], references: [id]) + deploymentId String + + level LogLevel + message String +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d91a8ac08..38d079fa0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,7 +21,7 @@ importers: nodemon: ^2.0.16 prettier: ^2.6.2 tsup: ^6.0.1 - turbo: ^1.3.1 + turbo: ^1.5.2 typescript: ^4.6.4 vite-tsconfig-paths: ^3.5.0 vitest: ^0.15.1 @@ -43,7 +43,7 @@ importers: nodemon: 2.0.19 prettier: 2.7.1 tsup: 6.1.3_typescript@4.7.4 - turbo: 1.3.1 + turbo: 1.5.2 typescript: 4.7.4 vite-tsconfig-paths: 3.5.0 vitest: 0.15.2_c8@7.12.0 @@ -151,99 +151,19 @@ importers: astro: 1.0.0-rc.7 packages/cli: - specifiers: - '@lagon/common': workspace:0.0.2 - '@lagon/runtime': workspace:0.0.6 - '@trpc/client': ^9.25.3 - '@types/inquirer': ^8.2.1 - '@types/update-notifier': ^5.1.0 - chalk: ^5.0.1 - commander: ^9.3.0 - esbuild: ^0.14.41 - fastify: ^3.29.0 - inquirer: ^9.0.0 - node-fetch: ^3.2.6 - open: ^8.4.0 - update-notifier: ^6.0.1 - dependencies: - '@lagon/runtime': link:../runtime - '@trpc/client': 9.25.3 - chalk: 5.0.1 - commander: 9.3.0 - esbuild: 0.14.48 - fastify: 3.29.1 - inquirer: 9.0.0 - node-fetch: 3.2.6 - open: 8.4.0 - update-notifier: 6.0.2 - devDependencies: - '@lagon/common': link:../common - '@types/inquirer': 8.2.1 - '@types/update-notifier': 5.1.0 - - packages/common: - specifiers: - mrmime: ^1.0.1 - dependencies: - mrmime: 1.0.1 - - packages/prisma: - specifiers: - '@prisma/client': ^3.15.2 - prisma: ^3.15.2 - dependencies: - '@prisma/client': 3.15.2_prisma@3.15.2 - devDependencies: - prisma: 3.15.2 + specifiers: {} - packages/runtime: + packages/js-runtime: specifiers: - '@types/node': ^17.0.35 - isolated-vm: ^4.4.1 web-streams-polyfill: ^3.2.1 dependencies: - isolated-vm: 4.4.1 web-streams-polyfill: 3.2.1 - devDependencies: - '@types/node': 17.0.35 - packages/rust-runtime: - specifiers: - esbuild: ^0.14.41 - web-streams-polyfill: ^3.2.1 - dependencies: - web-streams-polyfill: 3.2.1 - devDependencies: - esbuild: 0.14.48 + packages/runtime: + specifiers: {} packages/serverless: - specifiers: - '@aws-sdk/client-s3': ^3.100.0 - '@lagon/common': workspace:0.0.2 - '@lagon/prisma': workspace:0.0.1 - '@lagon/runtime': workspace:0.0.6 - '@sentry/node': ^7.1.1 - '@sentry/tracing': ^7.1.1 - '@types/node': ^17.0.35 - cron-parser: ^4.4.0 - dotenv: ^16.0.1 - fastify: ^3.29.0 - isolated-vm: ^4.4.1 - redis: ^4.1.0 - dependencies: - '@aws-sdk/client-s3': 3.121.0 - '@lagon/prisma': link:../prisma - '@lagon/runtime': link:../runtime - '@sentry/node': 7.5.0 - '@sentry/tracing': 7.5.0 - cron-parser: 4.6.0 - dotenv: 16.0.1 - fastify: 3.29.1 - isolated-vm: 4.4.1 - redis: 4.2.0 - devDependencies: - '@lagon/common': link:../common - '@types/node': 17.0.35 + specifiers: {} packages/types: specifiers: @@ -257,10 +177,9 @@ importers: '@babel/core': ^7.18.2 '@headlessui/react': ^1.6.4 '@heroicons/react': ^1.0.6 - '@lagon/common': workspace:0.0.2 - '@lagon/prisma': workspace:0.0.1 '@monaco-editor/react': ^4.4.5 '@next-auth/prisma-adapter': ^1.0.3 + '@prisma/client': ^3.15.2 '@radix-ui/react-alert-dialog': ^0.1.7 '@radix-ui/react-tabs': ^0.1.5 '@scaleway/use-random-name': ^0.2.3 @@ -292,8 +211,8 @@ importers: next: 12.1.6 next-auth: ^4.3.4 next-international: ^0.2.0 - next-transpile-modules: ^9.0.0 postcss: ^8.4.14 + prisma: ^3.15.2 react: 18.1.0 react-chartjs-2: ^4.2.0 react-dom: 18.1.0 @@ -309,10 +228,9 @@ importers: '@aws-sdk/client-s3': 3.121.0 '@headlessui/react': 1.6.5_ef5jwxihqo6n7gxfmzogljlgcm '@heroicons/react': 1.0.6_react@18.1.0 - '@lagon/common': link:../common - '@lagon/prisma': link:../prisma '@monaco-editor/react': 4.4.5_d24t5d2y775ybedwi37th2htxm - '@next-auth/prisma-adapter': 1.0.3_next-auth@4.8.0 + '@next-auth/prisma-adapter': 1.0.3_tl25cndjt3hldaanbvhdxcx6uq + '@prisma/client': 3.15.2_prisma@3.15.2 '@radix-ui/react-alert-dialog': 0.1.7_iupzlfzo47c7rghj3avw7kmjhq '@radix-ui/react-tabs': 0.1.5_react@18.1.0 '@scaleway/use-random-name': 0.2.4_react@18.1.0 @@ -328,7 +246,6 @@ importers: next: 12.1.6_yz5u6557yqtbarbugy7nmayfrq next-auth: 4.8.0_ef5jwxihqo6n7gxfmzogljlgcm next-international: 0.2.0_next@12.1.6+react@18.1.0 - next-transpile-modules: 9.0.0 react: 18.1.0 react-chartjs-2: 4.2.0_3loy6czceob3hzurpbyqxprqge react-dom: 18.1.0_react@18.1.0 @@ -356,6 +273,7 @@ importers: eslint-config-next: 12.1.6_qu5xcsxwwf75pejx4fklajr4oe eslint-plugin-storybook: 0.5.13_4x5o4skxv6sl53vpwefgt23khm postcss: 8.4.14 + prisma: 3.15.2 tailwindcss: 3.1.4 tsconfig-paths-webpack-plugin: 3.5.2 typescript: 4.7.4 @@ -3130,16 +3048,6 @@ packages: - supports-color dev: true - /@fastify/ajv-compiler/1.1.0: - resolution: {integrity: sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==} - dependencies: - ajv: 6.12.6 - dev: false - - /@fastify/error/2.0.0: - resolution: {integrity: sha512-wI3fpfDT0t7p8E6dA2eTECzzOd+bZsZCJ2Hcv+Onn2b7ZwK3RwD27uW2QDaMtQhAfWQQP+WNK7nKf0twLsBf9w==} - dev: false - /@gar/promisify/1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true @@ -3371,12 +3279,13 @@ packages: glob-to-regexp: 0.3.0 dev: true - /@next-auth/prisma-adapter/1.0.3_next-auth@4.8.0: + /@next-auth/prisma-adapter/1.0.3_tl25cndjt3hldaanbvhdxcx6uq: resolution: {integrity: sha512-3Lq1cD3ytKM3EGKJZ4UZvlqshLtlPvYxLeCrUV9ifYwYlq51kmDaHjsIawlp8EbH5pE1UhlsvtlXMery7RghtA==} peerDependencies: '@prisma/client': '>=2.26.0 || >=3' next-auth: ^4.0.1 dependencies: + '@prisma/client': 3.15.2_prisma@3.15.2 next-auth: 4.8.0_ef5jwxihqo6n7gxfmzogljlgcm dev: false @@ -3569,21 +3478,6 @@ packages: webpack: 5.73.0 dev: true - /@pnpm/network.ca-file/1.0.1: - resolution: {integrity: sha512-gkINruT2KUhZLTaiHxwCOh1O4NVnFT0wLjWFBHmTz9vpKag/C/noIMJXBxFe4F0mYpUVX2puLwAieLYFg2NvoA==} - engines: {node: '>=12.22.0'} - dependencies: - graceful-fs: 4.2.10 - dev: false - - /@pnpm/npm-conf/1.0.4: - resolution: {integrity: sha512-o5YFq/+ksEJMbSzzkaQDHlp00aonLDU5xNPVTRL12hTWBbVSSeWXxPukq75h+mvXnoOWT95vV2u1HSTw2C4XOw==} - engines: {node: '>=12'} - dependencies: - '@pnpm/network.ca-file': 1.0.1 - config-chain: 1.1.13 - dev: false - /@polka/url/1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true @@ -4093,11 +3987,6 @@ packages: - supports-color dev: false - /@sindresorhus/is/4.6.0: - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - dev: false - /@storybook/addon-actions/6.5.9_ef5jwxihqo6n7gxfmzogljlgcm: resolution: {integrity: sha512-wDYm3M1bN+zcYZV3Q24M03b/P8DDpvj1oSoY6VLlxDAi56h8qZB/voeIS2I6vWXOB79C5tbwljYNQO0GsufS0g==} peerDependencies: @@ -5543,13 +5432,6 @@ packages: resolve-from: 5.0.0 dev: true - /@szmarczak/http-timer/5.0.1: - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - dependencies: - defer-to-connect: 2.0.1 - dev: false - /@testing-library/dom/8.14.0: resolution: {integrity: sha512-m8FOdUo77iMTwVRCyzWcqxlEIk+GnopbrRI15a0EaLbpZSCinIVI4kSQzWhkShK83GogvEFJSsHF3Ws0z1vrqA==} engines: {node: '>=12'} @@ -5574,14 +5456,6 @@ packages: '@testing-library/dom': 8.14.0 dev: true - /@trpc/client/9.25.3: - resolution: {integrity: sha512-4R+IK3cCDjoOTwHDyu+uN0bF3mYQI34i6aDNU3D/dJJxcA8PX5f8yb++nnR4RT6oTnu3yiR3PFC4KslvBtyi9w==} - peerDependencies: - '@trpc/server': 9.25.3 - dependencies: - '@babel/runtime': 7.18.6 - dev: false - /@trpc/client/9.25.3_@trpc+server@9.25.3: resolution: {integrity: sha512-4R+IK3cCDjoOTwHDyu+uN0bF3mYQI34i6aDNU3D/dJJxcA8PX5f8yb++nnR4RT6oTnu3yiR3PFC4KslvBtyi9w==} peerDependencies: @@ -5644,15 +5518,6 @@ packages: resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} dev: true - /@types/cacheable-request/6.0.2: - resolution: {integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==} - dependencies: - '@types/http-cache-semantics': 4.0.1 - '@types/keyv': 3.1.4 - '@types/node': 17.0.35 - '@types/responselike': 1.0.0 - dev: false - /@types/chai-subset/1.3.3: resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: @@ -5663,10 +5528,6 @@ packages: resolution: {integrity: sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==} dev: true - /@types/configstore/6.0.0: - resolution: {integrity: sha512-GUvNiia85zTDDIx0iPrtF3pI8dwrQkfuokEqxqPDE55qxH0U5SZz4awVZjiJLWN2ZZRkXCUqgsMUbygXY+kytA==} - dev: true - /@types/debug/4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: @@ -5746,17 +5607,6 @@ packages: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} dev: true - /@types/http-cache-semantics/4.0.1: - resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - dev: false - - /@types/inquirer/8.2.1: - resolution: {integrity: sha512-wKW3SKIUMmltbykg4I5JzCVzUhkuD9trD6efAmYgN2MrSntY0SMRQzEnD3mkyJ/rv9NLbTC7g3hKKE86YwEDLw==} - dependencies: - '@types/through': 0.0.30 - rxjs: 7.5.5 - dev: true - /@types/is-ci/3.0.0: resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} dependencies: @@ -5783,10 +5633,6 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/json-buffer/3.0.0: - resolution: {integrity: sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==} - dev: false - /@types/json-schema/7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true @@ -5799,12 +5645,6 @@ packages: resolution: {integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==} dev: true - /@types/keyv/3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 17.0.35 - dev: false - /@types/lodash/4.14.182: resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==} dev: true @@ -5860,6 +5700,7 @@ packages: /@types/node/17.0.35: resolution: {integrity: sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==} + dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -5918,12 +5759,6 @@ packages: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true - /@types/responselike/1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - dependencies: - '@types/node': 17.0.35 - dev: false - /@types/scheduler/0.16.2: resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} @@ -5939,12 +5774,6 @@ packages: resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==} dev: true - /@types/through/0.0.30: - resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} - dependencies: - '@types/node': 17.0.35 - dev: true - /@types/uglify-js/3.16.0: resolution: {integrity: sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g==} dependencies: @@ -5955,13 +5784,6 @@ packages: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} dev: true - /@types/update-notifier/5.1.0: - resolution: {integrity: sha512-aGY5pH1Q/DcToKXl4MCj1c0uDUB+zSVFDRCI7Q7js5sguzBTqJV/5kJA2awofbtWYF3xnon1TYdZYnFditRPtQ==} - dependencies: - '@types/configstore': 6.0.0 - boxen: 4.2.0 - dev: true - /@types/webpack-env/1.17.0: resolution: {integrity: sha512-eHSaNYEyxRA5IAG0Ym/yCyf86niZUIF/TpWKofQI/CVfh5HsMEUyfE2kwFxha4ow0s5g0LfISQxpDKjbRDrizw==} dev: true @@ -6400,10 +6222,6 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true - /abstract-logging/2.0.1: - resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} - dev: false - /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -6534,20 +6352,13 @@ packages: fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - - /ajv/8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false + dev: true /ansi-align/3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: string-width: 4.2.3 + dev: true /ansi-colors/3.2.4: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} @@ -6566,13 +6377,6 @@ packages: type-fest: 0.21.3 dev: true - /ansi-escapes/5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} - dependencies: - type-fest: 1.4.0 - dev: false - /ansi-html-community/0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} @@ -6590,6 +6394,7 @@ packages: /ansi-regex/6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} + dev: true /ansi-styles/3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -6612,6 +6417,7 @@ packages: /ansi-styles/6.1.0: resolution: {integrity: sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==} engines: {node: '>=12'} + dev: true /ansi-to-html/0.6.15: resolution: {integrity: sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==} @@ -6653,10 +6459,6 @@ packages: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} dev: true - /archy/1.0.0: - resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} - dev: false - /are-we-there-yet/1.1.7: resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} dependencies: @@ -6954,11 +6756,6 @@ packages: hasBin: true dev: true - /atomic-sleep/1.0.0: - resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} - engines: {node: '>=8.0.0'} - dev: false - /autoprefixer/10.4.7_postcss@8.4.14: resolution: {integrity: sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==} engines: {node: ^10 || ^12 || >=14} @@ -6988,17 +6785,6 @@ packages: postcss-value-parser: 4.2.0 dev: true - /avvio/7.2.5: - resolution: {integrity: sha512-AOhBxyLVdpOad3TujtC9kL/9r3HnTkxwQ5ggOsYrvvZP1cCFvzHWJd5XxZDFuTn+IN8vkKSG5SEJrd27vCSbeA==} - dependencies: - archy: 1.0.0 - debug: 4.3.4 - fastq: 1.13.0 - queue-microtask: 1.2.3 - transitivePeerDependencies: - - supports-color - dev: false - /axe-core/4.4.2: resolution: {integrity: sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==} engines: {node: '>=12'} @@ -7188,6 +6974,7 @@ packages: /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true /better-opn/2.1.1: resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==} @@ -7235,6 +7022,7 @@ packages: buffer: 6.0.3 inherits: 2.0.4 readable-stream: 3.6.0 + dev: true /bluebird/3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} @@ -7276,20 +7064,6 @@ packages: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} dev: false - /boxen/4.2.0: - resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} - engines: {node: '>=8'} - dependencies: - ansi-align: 3.0.1 - camelcase: 5.3.1 - chalk: 3.0.0 - cli-boxes: 2.2.1 - string-width: 4.2.3 - term-size: 2.2.1 - type-fest: 0.8.1 - widest-line: 3.1.0 - dev: true - /boxen/5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} @@ -7318,20 +7092,6 @@ packages: wrap-ansi: 8.0.1 dev: true - /boxen/7.0.0: - resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} - engines: {node: '>=14.16'} - dependencies: - ansi-align: 3.0.1 - camelcase: 7.0.0 - chalk: 5.0.1 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.16.0 - widest-line: 4.0.1 - wrap-ansi: 8.0.1 - dev: false - /bplist-parser/0.1.1: resolution: {integrity: sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q==} dependencies: @@ -7489,6 +7249,7 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true /builtin-status-codes/3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -7618,24 +7379,6 @@ packages: unset-value: 1.0.0 dev: true - /cacheable-lookup/6.0.4: - resolution: {integrity: sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==} - engines: {node: '>=10.6.0'} - dev: false - - /cacheable-request/7.0.2: - resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} - engines: {node: '>=8'} - dependencies: - clone-response: 1.0.2 - get-stream: 5.2.0 - http-cache-semantics: 4.1.0 - keyv: 4.3.2 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.0 - dev: false - /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: @@ -7698,11 +7441,6 @@ packages: engines: {node: '>=10'} dev: true - /camelcase/7.0.0: - resolution: {integrity: sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==} - engines: {node: '>=14.16'} - dev: false - /caniuse-lite/1.0.30001363: resolution: {integrity: sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==} @@ -7747,14 +7485,6 @@ packages: escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk/3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -7766,6 +7496,7 @@ packages: /chalk/5.0.1: resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true /character-entities-html4/2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -7797,6 +7528,7 @@ packages: /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true /chart.js/3.8.0: resolution: {integrity: sha512-cr8xhrXjLIXVLOBZPkBZVF6NDeiVIrPLHcMhnON7UufudL+CNeRrD+wpYanswlm8NpudMdrt3CHoLMQMxJhHRg==} @@ -7863,6 +7595,7 @@ packages: /ci-info/3.3.2: resolution: {integrity: sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==} + dev: true /cipher-base/1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} @@ -7908,6 +7641,7 @@ packages: /cli-boxes/3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + dev: true /cli-cursor/3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} @@ -7921,10 +7655,12 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: restore-cursor: 4.0.0 + dev: true /cli-spinners/2.6.1: resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} engines: {node: '>=6'} + dev: true /cli-table3/0.6.2: resolution: {integrity: sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==} @@ -7951,11 +7687,6 @@ packages: string-width: 5.1.2 dev: true - /cli-width/4.0.0: - resolution: {integrity: sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==} - engines: {node: '>= 12'} - dev: false - /cliui/6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: @@ -7981,15 +7712,10 @@ packages: shallow-clone: 3.0.1 dev: true - /clone-response/1.0.2: - resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} - dependencies: - mimic-response: 1.0.1 - dev: false - /clone/1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + dev: true /clsx/1.1.0: resolution: {integrity: sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==} @@ -8093,6 +7819,7 @@ packages: /commander/9.3.0: resolution: {integrity: sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==} engines: {node: ^12.20.0 || >=14} + dev: true /common-ancestor-path/1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -8110,14 +7837,6 @@ packages: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true - /compress-brotli/1.3.8: - resolution: {integrity: sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==} - engines: {node: '>= 12'} - dependencies: - '@types/json-buffer': 3.0.0 - json-buffer: 3.0.1 - dev: false - /compressible/2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -8169,24 +7888,6 @@ packages: yargs: 17.5.1 dev: true - /config-chain/1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - dev: false - - /configstore/6.0.0: - resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} - engines: {node: '>=12'} - dependencies: - dot-prop: 6.0.1 - graceful-fs: 4.2.10 - unique-string: 3.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 5.1.0 - dev: false - /console-browserify/1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true @@ -8227,6 +7928,7 @@ packages: /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} + dev: true /copy-concurrently/1.0.5: resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} @@ -8341,13 +8043,6 @@ packages: sha.js: 2.4.11 dev: true - /cron-parser/4.6.0: - resolution: {integrity: sha512-guZNLMGUgg6z4+eGhmHGw7ft+v6OQeuHzd1gcLxCo9Yg/qoxmG3nindp2/uwGCLizEisf2H0ptqeVXeoCpP6FA==} - engines: {node: '>=12.0.0'} - dependencies: - luxon: 3.0.1 - dev: false - /cross-spawn/5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -8392,13 +8087,6 @@ packages: randomfill: 1.0.4 dev: true - /crypto-random-string/4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - dependencies: - type-fest: 1.4.0 - dev: false - /css-loader/3.6.0: resolution: {integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==} engines: {node: '>= 8.9.0'} @@ -8526,6 +8214,7 @@ packages: /data-uri-to-buffer/4.0.0: resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} engines: {node: '>= 12'} + dev: true /dataloader/1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} @@ -8605,13 +8294,6 @@ packages: engines: {node: '>=0.10'} dev: true - /decompress-response/6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - dependencies: - mimic-response: 3.1.0 - dev: false - /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true @@ -8623,11 +8305,6 @@ packages: type-detect: 4.0.8 dev: true - /deep-extend/0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: false - /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -8635,6 +8312,7 @@ packages: /deepmerge/4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} + dev: true /default-browser-id/1.0.4: resolution: {integrity: sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==} @@ -8652,15 +8330,12 @@ packages: resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} dependencies: clone: 1.0.4 - - /defer-to-connect/2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - dev: false + dev: true /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + dev: true /define-properties/1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} @@ -8882,22 +8557,10 @@ packages: tslib: 2.4.0 dev: true - /dot-prop/6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} - dependencies: - is-obj: 2.0.0 - dev: false - /dotenv-expand/5.1.0: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} dev: true - /dotenv/16.0.1: - resolution: {integrity: sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==} - engines: {node: '>=12'} - dev: false - /dotenv/8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -8923,6 +8586,7 @@ packages: /eastasianwidth/0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -8955,6 +8619,7 @@ packages: /emoji-regex/9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true /emojis-list/3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} @@ -8970,6 +8635,7 @@ packages: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 + dev: true /endent/2.1.0: resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} @@ -8994,6 +8660,7 @@ packages: dependencies: graceful-fs: 4.2.10 tapable: 2.2.1 + dev: true /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} @@ -9297,11 +8964,6 @@ packages: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-goat/4.0.0: - resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} - engines: {node: '>=12'} - dev: false - /escape-html/1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true @@ -9318,6 +8980,7 @@ packages: /escape-string-regexp/5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + dev: true /escodegen/2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} @@ -9853,6 +9516,7 @@ packages: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 + dev: true /extglob/2.0.4: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} @@ -9870,12 +9534,9 @@ packages: - supports-color dev: true - /fast-decode-uri-component/1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - dev: false - /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true /fast-diff/1.2.0: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} @@ -9912,61 +9573,22 @@ packages: /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - /fast-json-stringify/2.7.13: - resolution: {integrity: sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==} - engines: {node: '>= 10.0.0'} - dependencies: - ajv: 6.12.6 - deepmerge: 4.2.2 - rfdc: 1.3.0 - string-similarity: 4.0.4 - dev: false + dev: true /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-redact/3.1.1: - resolution: {integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==} - engines: {node: '>=6'} - dev: false - - /fast-safe-stringify/2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - dev: false - - /fast-xml-parser/3.19.0: - resolution: {integrity: sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==} - hasBin: true - dev: false - - /fastify/3.29.1: - resolution: {integrity: sha512-UhGmh0/J0YQetqULYfv/utvut0R6ICQvO6Oh81JvG75UbjVgueqoE6EPChB3gR5aF3dVKpT/qFTgc7zvpGTYNg==} - dependencies: - '@fastify/ajv-compiler': 1.1.0 - '@fastify/error': 2.0.0 - abstract-logging: 2.0.1 - avvio: 7.2.5 - fast-json-stringify: 2.7.13 - find-my-way: 4.5.1 - flatstr: 1.0.12 - light-my-request: 4.10.1 - pino: 6.14.0 - process-warning: 1.0.0 - proxy-addr: 2.0.7 - rfdc: 1.3.0 - secure-json-parse: 2.4.0 - semver: 7.3.7 - tiny-lru: 8.0.2 - transitivePeerDependencies: - - supports-color + /fast-xml-parser/3.19.0: + resolution: {integrity: sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==} + hasBin: true dev: false /fastq/1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 + dev: true /fault/1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} @@ -9986,6 +9608,7 @@ packages: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 + dev: true /fetch-retry/5.0.3: resolution: {integrity: sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==} @@ -9999,14 +9622,6 @@ packages: resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} dev: true - /figures/4.0.1: - resolution: {integrity: sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==} - engines: {node: '>=12'} - dependencies: - escape-string-regexp: 5.0.0 - is-unicode-supported: 1.2.0 - dev: false - /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -10093,16 +9708,6 @@ packages: pkg-dir: 4.2.0 dev: true - /find-my-way/4.5.1: - resolution: {integrity: sha512-kE0u7sGoUFbMXcOG/xpkmz4sRLCklERnBcg7Ftuu1iAxsfEt2S46RLJ3Sq7vshsEy2wJT2hZxE58XZK27qa8kg==} - engines: {node: '>=10'} - dependencies: - fast-decode-uri-component: 1.0.1 - fast-deep-equal: 3.1.3 - safe-regex2: 2.0.0 - semver-store: 0.3.0 - dev: false - /find-up/1.1.2: resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} engines: {node: '>=0.10.0'} @@ -10157,10 +9762,6 @@ packages: rimraf: 3.0.2 dev: true - /flatstr/1.0.12: - resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} - dev: false - /flatted/3.2.6: resolution: {integrity: sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==} dev: true @@ -10284,10 +9885,6 @@ packages: webpack: 5.73.0 dev: true - /form-data-encoder/1.7.1: - resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} - dev: false - /form-data/3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} @@ -10307,6 +9904,7 @@ packages: engines: {node: '>=12.20.0'} dependencies: fetch-blob: 3.1.5 + dev: true /formidable/2.0.1: resolution: {integrity: sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==} @@ -10320,6 +9918,7 @@ packages: /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + dev: true /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} @@ -10527,16 +10126,10 @@ packages: pump: 3.0.0 dev: true - /get-stream/5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: false - /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + dev: true /get-symbol-description/1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} @@ -10630,13 +10223,6 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /global-dirs/3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} - engines: {node: '>=10'} - dependencies: - ini: 2.0.0 - dev: false - /global/4.4.0: resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} dependencies: @@ -10711,27 +10297,9 @@ packages: csstype: ^3.0.10 dev: false - /got/12.1.0: - resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} - engines: {node: '>=14.16'} - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 5.0.1 - '@types/cacheable-request': 6.0.2 - '@types/responselike': 1.0.0 - cacheable-lookup: 6.0.4 - cacheable-request: 7.0.2 - decompress-response: 6.0.0 - form-data-encoder: 1.7.1 - get-stream: 6.0.1 - http2-wrapper: 2.1.11 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 2.0.0 - dev: false - /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} @@ -10843,11 +10411,6 @@ packages: kind-of: 4.0.0 dev: true - /has-yarn/3.0.0: - resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} @@ -11153,10 +10716,6 @@ packages: entities: 2.2.0 dev: true - /http-cache-semantics/4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} - dev: false - /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -11168,14 +10727,6 @@ packages: toidentifier: 1.0.1 dev: true - /http2-wrapper/2.1.11: - resolution: {integrity: sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==} - engines: {node: '>=10.19.0'} - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - dev: false - /https-browserify/1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true @@ -11215,6 +10766,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: true /icss-utils/4.1.1: resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==} @@ -11234,6 +10786,7 @@ packages: /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true /iferr/0.1.5: resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} @@ -11265,14 +10818,10 @@ packages: resolve-from: 4.0.0 dev: true - /import-lazy/4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - dev: false - /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + dev: true /indent-string/2.1.0: resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==} @@ -11308,40 +10857,10 @@ packages: /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini/1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: false - - /ini/2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: false - /inline-style-parser/0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: true - /inquirer/9.0.0: - resolution: {integrity: sha512-eYTDdTYr/YPwRenOzLZTvaJUDXDW8GQgxvzBppuXLj/kauTRLfV8bCPVbGh2staP7edrqL+rGwjaOa+JVxBWsg==} - engines: {node: '>=12.0.0'} - dependencies: - ansi-escapes: 5.0.0 - chalk: 5.0.1 - cli-cursor: 4.0.0 - cli-width: 4.0.0 - external-editor: 3.1.0 - figures: 4.0.1 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 6.1.2 - run-async: 2.4.1 - rxjs: 7.5.5 - string-width: 5.1.2 - strip-ansi: 7.0.1 - through: 2.3.8 - wrap-ansi: 8.0.1 - dev: false - /internal-slot/1.0.3: resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} engines: {node: '>= 0.4'} @@ -11373,6 +10892,7 @@ packages: /ipaddr.js/1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + dev: true /is-absolute-url/3.0.3: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} @@ -11482,6 +11002,7 @@ packages: hasBin: true dependencies: ci-info: 3.3.2 + dev: true /is-core-module/2.9.0: resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} @@ -11540,6 +11061,7 @@ packages: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true + dev: true /is-docker/3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} @@ -11619,17 +11141,10 @@ packages: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} dev: true - /is-installed-globally/0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - dependencies: - global-dirs: 3.0.0 - is-path-inside: 3.0.3 - dev: false - /is-interactive/2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} + dev: true /is-map/2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -11640,11 +11155,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-npm/6.0.0: - resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - /is-number-object/1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -11664,20 +11174,10 @@ packages: engines: {node: '>=0.12.0'} dev: true - /is-obj/2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: false - /is-object/1.0.2: resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} dev: true - /is-path-inside/3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: false - /is-plain-obj/1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -11761,10 +11261,12 @@ packages: /is-typedarray/1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true /is-unicode-supported/1.2.0: resolution: {integrity: sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==} engines: {node: '>=12'} + dev: true /is-utf8/0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} @@ -11804,11 +11306,7 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - - /is-yarn-global/0.4.0: - resolution: {integrity: sha512-HneQBCrXGBy15QnaDfcn6OLoU8AQPAa0Qn0IeJR/QCo4E8dNZaGGwxpCwWyEBQC5QvFonP8d6t60iGpAHVAfNA==} - engines: {node: '>=12'} - dev: false + dev: true /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -11837,12 +11335,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /isolated-vm/4.4.1: - resolution: {integrity: sha512-5aDwxQGm78vHS+qJeUli2ILroG7OS/k3D/Mc0kcT9vyujiL4bV7PYYix1mAvuBm3v44nz2qcfAOqgAbhuACc/w==} - engines: {node: '>=10.4.0'} - requiresBuild: true - dev: false - /isomorphic-unfetch/3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} dependencies: @@ -12018,10 +11510,6 @@ packages: engines: {node: '>=4'} hasBin: true - /json-buffer/3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: false - /json-parse-better-errors/1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true @@ -12032,10 +11520,7 @@ packages: /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - /json-schema-traverse/1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false + dev: true /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -12088,13 +11573,6 @@ packages: engines: {node: '>=8'} dev: true - /keyv/4.3.2: - resolution: {integrity: sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==} - dependencies: - compress-brotli: 1.3.8 - json-buffer: 3.0.1 - dev: false - /kind-of/3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} @@ -12144,13 +11622,6 @@ packages: language-subtag-registry: 0.3.22 dev: true - /latest-version/7.0.0: - resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} - engines: {node: '>=14.16'} - dependencies: - package-json: 8.1.0 - dev: false - /lazy-universal-dotenv/3.0.1: resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} engines: {node: '>=6.0.0', npm: '>=6.0.0', yarn: '>=1.0.0'} @@ -12184,15 +11655,6 @@ packages: immediate: 3.0.6 dev: false - /light-my-request/4.10.1: - resolution: {integrity: sha512-l+zWk0HXGhGzY7IYTZnYEqIpj3Mpcyk2f8+FkKUyREywvaiWCf2jyQVxpasKRsploY/nVpoqTlxx72CIeQNcIQ==} - dependencies: - ajv: 8.11.0 - cookie: 0.5.0 - process-warning: 1.0.0 - set-cookie-parser: 2.5.0 - dev: false - /lilconfig/2.0.5: resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} engines: {node: '>=10'} @@ -12362,6 +11824,7 @@ packages: /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true /log-symbols/5.1.0: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} @@ -12369,6 +11832,7 @@ packages: dependencies: chalk: 5.0.1 is-unicode-supported: 1.2.0 + dev: true /log-update/4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} @@ -12411,16 +11875,6 @@ packages: tslib: 2.4.0 dev: true - /lowercase-keys/2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: false - - /lowercase-keys/3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - /lowlight/1.20.0: resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} dependencies: @@ -12451,11 +11905,6 @@ packages: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} dev: false - /luxon/3.0.1: - resolution: {integrity: sha512-hF3kv0e5gwHQZKz4wtm4c+inDtyc7elkanAsBq+fundaCdUBNJB1dHEGUZIM6SfSBUlbVFduPwEtNjFK8wLtcw==} - engines: {node: '>=12'} - dev: false - /lz-string/1.4.4: resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} hasBin: true @@ -13191,6 +12640,7 @@ packages: /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + dev: true /mimic-fn/3.1.0: resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} @@ -13202,16 +12652,6 @@ packages: engines: {node: '>=12'} dev: true - /mimic-response/1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: false - - /mimic-response/3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: false - /min-document/2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} dependencies: @@ -13353,6 +12793,7 @@ packages: /mrmime/1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} + dev: true /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -13369,10 +12810,6 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /mute-stream/0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: false - /mz/2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -13468,13 +12905,6 @@ packages: react: 18.1.0 dev: false - /next-transpile-modules/9.0.0: - resolution: {integrity: sha512-VCNFOazIAnXn1hvgYYSTYMnoWgKgwlYh4lm1pKbSfiB3kj5ZYLcKVhfh3jkPOg1cnd9DP+pte9yCUocdPEUBTQ==} - dependencies: - enhanced-resolve: 5.10.0 - escalade: 3.1.1 - dev: false - /next/12.1.6_ef5jwxihqo6n7gxfmzogljlgcm: resolution: {integrity: sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A==} engines: {node: '>=12.22.0'} @@ -13589,6 +13019,7 @@ packages: /node-domexception/1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} + dev: true /node-fetch/2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} @@ -13608,6 +13039,7 @@ packages: data-uri-to-buffer: 4.0.0 fetch-blob: 3.1.5 formdata-polyfill: 4.0.10 + dev: true /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -13695,11 +13127,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /normalize-url/6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: false - /npm-run-path/2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} @@ -13893,6 +13320,7 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 + dev: true /onetime/6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} @@ -13916,6 +13344,7 @@ packages: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + dev: true /openid-client/5.1.8: resolution: {integrity: sha512-EPxJY6bT7YIYQEXSGxRC5flQ3GUhLy98ufdto6+BVBrFGPmwjUpy4xBcYuU/Wt9nPkO/3EgljBrr6Ezx4lp1RQ==} @@ -13964,6 +13393,7 @@ packages: log-symbols: 5.1.0 strip-ansi: 7.0.1 wcwidth: 1.0.1 + dev: true /os-browserify/0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} @@ -13978,6 +13408,7 @@ packages: /os-tmpdir/1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} + dev: true /outdent/0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} @@ -13990,11 +13421,6 @@ packages: p-map: 2.1.0 dev: true - /p-cancelable/3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - dev: false - /p-defer/1.0.0: resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} engines: {node: '>=4'} @@ -14104,16 +13530,6 @@ packages: engines: {node: '>=6'} dev: true - /package-json/8.1.0: - resolution: {integrity: sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==} - engines: {node: '>=14.16'} - dependencies: - got: 12.1.0 - registry-auth-token: 5.0.1 - registry-url: 6.0.1 - semver: 7.3.7 - dev: false - /pako/1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true @@ -14376,23 +13792,6 @@ packages: dev: true optional: true - /pino-std-serializers/3.2.0: - resolution: {integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==} - dev: false - - /pino/6.14.0: - resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==} - hasBin: true - dependencies: - fast-redact: 3.1.1 - fast-safe-stringify: 2.1.1 - flatstr: 1.0.12 - pino-std-serializers: 3.2.0 - process-warning: 1.0.0 - quick-format-unescaped: 4.0.4 - sonic-boom: 1.4.1 - dev: false - /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -14771,10 +14170,6 @@ packages: /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - /process-warning/1.0.0: - resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} - dev: false - /process/0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -14851,16 +14246,13 @@ packages: resolution: {integrity: sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==} dev: true - /proto-list/1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - dev: false - /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 + dev: true /proxy-from-env/1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -14909,6 +14301,7 @@ packages: dependencies: end-of-stream: 1.4.4 once: 1.4.0 + dev: true /pumpify/1.5.1: resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} @@ -14929,13 +14322,7 @@ packages: /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} - - /pupa/3.1.0: - resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} - engines: {node: '>=12.20'} - dependencies: - escape-goat: 4.0.0 - dev: false + dev: true /qs/6.10.3: resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} @@ -14975,10 +14362,7 @@ packages: /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - /quick-format-unescaped/4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - dev: false + dev: true /quick-lru/4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} @@ -14988,6 +14372,7 @@ packages: /quick-lru/5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + dev: true /ramda/0.28.0: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} @@ -15032,16 +14417,6 @@ packages: webpack: 4.46.0 dev: true - /rc/1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.6 - strip-json-comments: 2.0.1 - dev: false - /react-chartjs-2/4.2.0_3loy6czceob3hzurpbyqxprqge: resolution: {integrity: sha512-9Vm9Sg9XAKiR579/FnBkesofjW9goaaFLfS7XlGTzUJlWFZGSE6A/pBI6+i/bP3pobKZoFcWJdFnjShytToqXw==} peerDependencies: @@ -15331,6 +14706,7 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: true /readdirp/2.2.1: resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} @@ -15460,20 +14836,6 @@ packages: unicode-match-property-value-ecmascript: 2.0.0 dev: true - /registry-auth-token/5.0.1: - resolution: {integrity: sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==} - engines: {node: '>=14'} - dependencies: - '@pnpm/npm-conf': 1.0.4 - dev: false - - /registry-url/6.0.1: - resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} - engines: {node: '>=12'} - dependencies: - rc: 1.2.8 - dev: false - /regjsgen/0.6.0: resolution: {integrity: sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==} dev: true @@ -15678,11 +15040,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /require-from-string/2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: false - /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true @@ -15692,10 +15049,6 @@ packages: engines: {node: '>=0.10.5'} dev: true - /resolve-alpn/1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: false - /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -15729,12 +15082,6 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /responselike/2.0.0: - resolution: {integrity: sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==} - dependencies: - lowercase-keys: 2.0.0 - dev: false - /restore-cursor/3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -15749,17 +15096,13 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + dev: true /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} dev: true - /ret/0.2.2: - resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} - engines: {node: '>=4'} - dev: false - /retext-latin/3.1.0: resolution: {integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==} dependencies: @@ -15798,9 +15141,11 @@ packages: /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true /rfdc/1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: true /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} @@ -15839,11 +15184,6 @@ packages: engines: {node: 6.* || >= 7.*} dev: true - /run-async/2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: false - /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -15860,6 +15200,7 @@ packages: resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} dependencies: tslib: 2.4.0 + dev: true /sade/1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -15877,6 +15218,7 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true /safe-regex/1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} @@ -15884,14 +15226,9 @@ packages: ret: 0.1.15 dev: true - /safe-regex2/2.0.0: - resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} - dependencies: - ret: 0.2.2 - dev: false - /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true /sane/4.1.0: resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} @@ -15961,21 +15298,6 @@ packages: kind-of: 6.0.3 dev: true - /secure-json-parse/2.4.0: - resolution: {integrity: sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==} - dev: false - - /semver-diff/4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} - dependencies: - semver: 7.3.7 - dev: false - - /semver-store/0.3.0: - resolution: {integrity: sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==} - dev: false - /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true @@ -15996,6 +15318,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /send/0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -16062,10 +15385,6 @@ packages: /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - /set-cookie-parser/2.5.0: - resolution: {integrity: sha512-cHMAtSXilfyBePduZEBVPTCftTQWz6ehWJD5YNUg4mqvRosrrjKbo4WS8JkB0/RxonMoohHm7cOGH60mDkRQ9w==} - dev: false - /set-value/2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} @@ -16252,13 +15571,6 @@ packages: - supports-color dev: true - /sonic-boom/1.4.1: - resolution: {integrity: sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==} - dependencies: - atomic-sleep: 1.0.0 - flatstr: 1.0.12 - dev: false - /source-list-map/2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true @@ -16466,10 +15778,6 @@ packages: engines: {node: '>=0.6.19'} dev: true - /string-similarity/4.0.4: - resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} - dev: false - /string-width/1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} @@ -16494,6 +15802,7 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.0.1 + dev: true /string.prototype.matchall/4.0.7: resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==} @@ -16551,6 +15860,7 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: true /stringify-entities/4.0.3: resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} @@ -16576,6 +15886,7 @@ packages: engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 + dev: true /strip-bom-string/1.0.0: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} @@ -16631,11 +15942,6 @@ packages: min-indent: 1.0.1 dev: true - /strip-json-comments/2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: false - /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -16808,6 +16114,7 @@ packages: /tapable/2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + dev: true /tar/6.1.11: resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} @@ -16951,6 +16258,7 @@ packages: /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -16966,11 +16274,6 @@ packages: setimmediate: 1.0.5 dev: true - /tiny-lru/8.0.2: - resolution: {integrity: sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==} - engines: {node: '>=6'} - dev: false - /tinypool/0.1.3: resolution: {integrity: sha512-2IfcQh7CP46XGWGGbdyO4pjcKqsmVqFAPcXfPxcPXmOWt9cYkTP9HcDmGgsfijYoAEc4z9qcpM/BaBz46Y9/CQ==} engines: {node: '>=14.0.0'} @@ -16986,6 +16289,7 @@ packages: engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 + dev: true /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -17228,137 +16532,65 @@ packages: yargs: 17.5.1 dev: true - /turbo-android-arm64/1.3.1: - resolution: {integrity: sha512-JcnZh9tLbZDpKaXaao/s/k4qXt3TbNEc1xEYYXurVWnqiMueGeS7QAtThVB85ZSqzj7djk+ngSrZabPy5RG25Q==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /turbo-darwin-64/1.3.1: - resolution: {integrity: sha512-TIGDradVFoGck86VIuM38KaDeNxdKaP2ti93UpQeFw26ZhPIeTAa6wUgnz4DQP6bjIvQmXlYJ16ETZb4tFYygg==} + /turbo-darwin-64/1.5.2: + resolution: {integrity: sha512-NFOHgYKsuhuF6KRiUM3GzLx1wNTerFcZbIGhANsmeaOo48zSpOhNaKpRsS+DbLuBcxF6WZFwF4qngtduKGZqUw==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64/1.3.1: - resolution: {integrity: sha512-aLBq8KiMMmop7uKBkvDt/y+eER2UzxZyUzh1KWcZ7DZB5tFZnknEUyf2qggY2vd2WcDVfQ1EUjZ0MFxhhVaVzA==} + /turbo-darwin-arm64/1.5.2: + resolution: {integrity: sha512-mrd7TIFT+U+mblJtKX2ZIDh5NZ6qIG5rc/I2T+PFL1qIZvuRAOCs1JLCUB4m+IusNOYIzYKQWbupX4JWzPfm0w==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-freebsd-64/1.3.1: - resolution: {integrity: sha512-BOr/ifmxjlBeuDkDQLUJtzqzXQ2zPHHcI14U9Ys+z4Mza1uzQn/oSJqQvU5RuyRBVai7noMrpPS7QuKtDz0Cyg==} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /turbo-freebsd-arm64/1.3.1: - resolution: {integrity: sha512-bHPZjK4xnGLz6/oxl5XmWhdYOdtBMSadrGhptWSZ0wBGNn/gQzDTeZAkQeqhh25AD0eM1hzDe8QUz8GlS43lrA==} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /turbo-linux-32/1.3.1: - resolution: {integrity: sha512-c5okimusfvivu9wS8MKSr+rXpQAV+M4TyR9JX+spIK8B1I7AjfECAqiK2D5WFWO1bQ33bUAuxXOEpUuLpgEm+g==} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /turbo-linux-64/1.3.1: - resolution: {integrity: sha512-O0pNX+N5gbmRcyZT+jsCPUNCN3DpIZHqNN35j7MT5nr0IkZa83CGbZnrEc+7Qws//jFJ26EngqD/JyRB2E8nwQ==} + /turbo-linux-64/1.5.2: + resolution: {integrity: sha512-KjQzYLxgPyDBD8Uye+Tst0rYmJkjbqWl1l5QwuZaVtSmyss+U3hF7Nd9Dk93EhXXEEKIhzXfdqOVcW2+zKAPrA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm/1.3.1: - resolution: {integrity: sha512-f+r6JIwv/7ylxxJtgVi8cVw+6oNoD/r1IMTU6ejH8bfyMZZko4kkNwH9VYribQ44KDkJEgzdltnzFG5f6Hz10g==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /turbo-linux-arm64/1.3.1: - resolution: {integrity: sha512-D6+1MeS/x+/VCCooHPU4NIpB8qI/eW70eMRA79bqTPaxxluP0g2CaxXgucco05P51YtNsSxeVcH7X76iadON6Q==} + /turbo-linux-arm64/1.5.2: + resolution: {integrity: sha512-cbcRTt9hJMK7aLHSpk4hHjekm5A5fVL71NSgNxvaRKI47qXJTc4aAeWSpHBWSe4KNKhMg/DyJ8D3aTfnnqx4rA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-mips64le/1.3.1: - resolution: {integrity: sha512-yL64jgwVCziOpBcdpMxIsczkgwwOvmaqKObFKWyCNlk/LOl5NKODLwXEaryLaALtpwUAoS4ltMSI64gKqmLrOA==} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /turbo-linux-ppc64le/1.3.1: - resolution: {integrity: sha512-tjnM+8RosykS1lBpOPLDXGOz/Po2h796ty17uBd7IFslWPOI16a/akFOFoLH8PCiGGJMe3CYgRhEKn4sPWNxFA==} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /turbo-windows-32/1.3.1: - resolution: {integrity: sha512-Snnv+TVigulqwK6guHKndMlrLw88NXj8BtHRGrEksPR0QkyuHlwLf+tHYB4HmvpUl4W9lnXQf4hsljWP64BEdw==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /turbo-windows-64/1.3.1: - resolution: {integrity: sha512-gLeohHG07yIhON1Pp0YNE00i/yzip2GFhkA6HdJaK95uE5bKULpqxuO414hOS/WzGwrGVXBKCImfe24XXh5T+Q==} + /turbo-windows-64/1.5.2: + resolution: {integrity: sha512-ntLpZ86wJCVEHdwTrz4JWZ12+LkiWt0teEcXpxlmL6hKHMEmHcf2v5rnEPbVFqo5TMkuXRUgfXSZ2SZ0meJzPg==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64/1.3.1: - resolution: {integrity: sha512-0MWcHLvYgs/qdcoTFZ55nu8HhrpeiwXEMw9cbNfgqTlzy3OsrAsovYEJFyQ8KSxeploiD+QJlCdvhxx+5C0tlA==} + /turbo-windows-arm64/1.5.2: + resolution: {integrity: sha512-ghCC2MjC1obxv/wPXM9H7JklnxNtxNlZ6HjnDHNOg3LSUF2NCPd6X52uOXb9JtEpIq+bL3EhtDCth9Z61nWpuA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo/1.3.1: - resolution: {integrity: sha512-DXckoGKlZgvTn/PrHpBI/57aeXR7tfyPf2dK+4LmBczt24ELA3o6eYHeA7KzfpSYhB2LE9qveYFQ6mJ1OzGjjg==} + /turbo/1.5.2: + resolution: {integrity: sha512-id1q+kFjFhuwmrP4E0EWrPTKsJ5HDZtFkFF7XNwZl/Q0idVTwq+4feg3Xn96AyXXDNca50lafhjIUxrq3Q2cIA==} hasBin: true requiresBuild: true optionalDependencies: - turbo-android-arm64: 1.3.1 - turbo-darwin-64: 1.3.1 - turbo-darwin-arm64: 1.3.1 - turbo-freebsd-64: 1.3.1 - turbo-freebsd-arm64: 1.3.1 - turbo-linux-32: 1.3.1 - turbo-linux-64: 1.3.1 - turbo-linux-arm: 1.3.1 - turbo-linux-arm64: 1.3.1 - turbo-linux-mips64le: 1.3.1 - turbo-linux-ppc64le: 1.3.1 - turbo-windows-32: 1.3.1 - turbo-windows-64: 1.3.1 - turbo-windows-arm64: 1.3.1 + turbo-darwin-64: 1.5.2 + turbo-darwin-arm64: 1.5.2 + turbo-linux-64: 1.5.2 + turbo-linux-arm64: 1.5.2 + turbo-windows-64: 1.5.2 + turbo-windows-arm64: 1.5.2 dev: true /type-check/0.3.2: @@ -17405,14 +16637,10 @@ packages: engines: {node: '>=8'} dev: true - /type-fest/1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: false - /type-fest/2.16.0: resolution: {integrity: sha512-qpaThT2HQkFb83gMOrdKVsfCN7LKxP26Yq+smPzY1FqoHRjqmjqHXA7n5Gkxi8efirtbeEUxzfEdePthQWCuHw==} engines: {node: '>=12.20'} + dev: true /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} @@ -17426,6 +16654,7 @@ packages: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 + dev: true /typedarray/0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -17547,13 +16776,6 @@ packages: imurmurhash: 0.1.4 dev: true - /unique-string/3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - dependencies: - crypto-random-string: 4.0.0 - dev: false - /unist-builder/2.0.3: resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==} dev: true @@ -17727,30 +16949,11 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 - /update-notifier/6.0.2: - resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} - engines: {node: '>=14.16'} - dependencies: - boxen: 7.0.0 - chalk: 5.0.1 - configstore: 6.0.0 - has-yarn: 3.0.0 - import-lazy: 4.0.0 - is-ci: 3.0.1 - is-installed-globally: 0.4.0 - is-npm: 6.0.0 - is-yarn-global: 0.4.0 - latest-version: 7.0.0 - pupa: 3.1.0 - semver: 7.3.7 - semver-diff: 4.0.0 - xdg-basedir: 5.1.0 - dev: false - /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 + dev: true /urix/0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} @@ -18151,6 +17354,7 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.3 + dev: true /web-namespaces/1.1.4: resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} @@ -18402,6 +17606,7 @@ packages: engines: {node: '>=12'} dependencies: string-width: 5.1.2 + dev: true /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} @@ -18449,6 +17654,7 @@ packages: ansi-styles: 6.1.0 string-width: 5.1.2 strip-ansi: 7.0.1 + dev: true /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -18460,6 +17666,7 @@ packages: is-typedarray: 1.0.0 signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + dev: true /ws/8.8.0: resolution: {integrity: sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==} @@ -18481,11 +17688,6 @@ packages: default-browser-id: 1.0.4 dev: true - /xdg-basedir/5.1.0: - resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} - engines: {node: '>=12'} - dev: false - /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 364f21e69..a2e44988d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: - 'packages/*' + - '!packages/old-*' - 'examples/*' - 'www' \ No newline at end of file diff --git a/turbo.json b/turbo.json index 6aff3abb6..8a51143fe 100644 --- a/turbo.json +++ b/turbo.json @@ -1,32 +1,28 @@ { "$schema": "https://turborepo.org/schema.json", - "baseBranch": "origin/main", "pipeline": { - "lint": { + "typecheck": { "dependsOn": [], "outputs": [] }, - "typecheck": { + "test": { "dependsOn": [ "^build" ], "outputs": [] }, + "lint": { + "dependsOn": [], + "outputs": [] + }, "build": { "dependsOn": [ "^build" ], "outputs": [ "dist/**", - ".next/**" - ] - }, - "build:runtime": { - "dependsOn": [ - "^build:runtime" - ], - "outputs": [ - "dist/**" + ".next/**", + "target/debug/**" ] } } diff --git a/vitest.config.ts b/vitest.config.mts similarity index 90% rename from vitest.config.ts rename to vitest.config.mts index 7164e94ca..cd38e29e3 100644 --- a/vitest.config.ts +++ b/vitest.config.mts @@ -4,7 +4,6 @@ import tsconfigPaths from 'vite-tsconfig-paths'; export default defineConfig({ test: { silent: true, - threads: false, }, plugins: [tsconfigPaths()], });