From 3433a68bbd56347b681d122dd3e3077e79166c0b Mon Sep 17 00:00:00 2001 From: Jacob Hands Date: Thu, 13 Feb 2025 07:08:37 -0600 Subject: [PATCH] chore(http-codex): Switch from esbuild to tsc --- .changeset/late-wolves-tan.md | 5 + .changeset/sharp-insects-decide.md | 5 + .changeset/swift-files-push.md | 5 + .vscode/settings.json | 3 +- package.json | 3 +- packages/http-codex/package.json | 14 +- packages/http-codex/scripts/build-types.ts | 24 -- packages/http-codex/scripts/build.ts | 23 -- packages/http-codex/scripts/entrypoints.ts | 5 - packages/http-codex/src/combined.spec.ts | 4 +- packages/http-codex/src/combined.ts | 4 +- packages/http-codex/src/index.ts | 6 +- packages/http-codex/src/status.spec.ts | 2 +- packages/http-codex/src/statusText.ts | 4 +- packages/http-codex/tsconfig.json | 2 +- packages/tools/src/bin/runx.ts | 2 + packages/tools/src/cmd/build.ts | 49 ++++ packages/tools/src/cmd/check.ts | 116 +++++++++ packages/tools/src/cmd/parse-changeset.ts | 2 +- packages/tools/src/cmd/release.ts | 2 +- packages/tools/src/cmd/update-pnpm.ts | 2 +- packages/tools/src/config.ts | 2 +- packages/tools/src/path.ts | 11 +- packages/tools/src/proc.ts | 7 + packages/typescript-config/lib-emit.json | 35 +++ packages/typescript-config/workers.json | 3 +- pnpm-lock.yaml | 282 ++++++++++++++++++++- turbo.json | 2 +- 28 files changed, 533 insertions(+), 91 deletions(-) create mode 100644 .changeset/late-wolves-tan.md create mode 100644 .changeset/sharp-insects-decide.md create mode 100644 .changeset/swift-files-push.md delete mode 100644 packages/http-codex/scripts/build-types.ts delete mode 100644 packages/http-codex/scripts/build.ts delete mode 100644 packages/http-codex/scripts/entrypoints.ts create mode 100644 packages/tools/src/cmd/check.ts create mode 100644 packages/tools/src/proc.ts create mode 100644 packages/typescript-config/lib-emit.json diff --git a/.changeset/late-wolves-tan.md b/.changeset/late-wolves-tan.md new file mode 100644 index 0000000..3fb51ea --- /dev/null +++ b/.changeset/late-wolves-tan.md @@ -0,0 +1,5 @@ +--- +'@repo/typescript-config': minor +--- + +Add lib-emit.json diff --git a/.changeset/sharp-insects-decide.md b/.changeset/sharp-insects-decide.md new file mode 100644 index 0000000..544d626 --- /dev/null +++ b/.changeset/sharp-insects-decide.md @@ -0,0 +1,5 @@ +--- +'@repo/tools': patch +--- + +Add / improve scripts diff --git a/.changeset/swift-files-push.md b/.changeset/swift-files-push.md new file mode 100644 index 0000000..1955ade --- /dev/null +++ b/.changeset/swift-files-push.md @@ -0,0 +1,5 @@ +--- +'http-codex': minor +--- + +chore: Switch from esbuild to tsc diff --git a/.vscode/settings.json b/.vscode/settings.json index 2101b04..8473c79 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,7 +16,8 @@ ], "github-actions.workflows.pinned.refresh.enabled": true, "files.associations": { - "**/packages/tools/bin/*": "shellscript" + "**/packages/tools/bin/*": "shellscript", + "**/packages/typescript-config/*.json": "jsonc" }, "eslint.workingDirectories": [ { diff --git a/package.json b/package.json index 509abe2..cb12964 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "changeset:new": "run-changeset-new", "check:ci": "turbo check:ci --log-order=grouped", "test:ci": "run-vitest-ci", - "check:deps": "syncpack lint", + "check:deps": "runx check -l", "check:format": "prettier . --check --cache --ignore-unknown", "chore:update:deps": "run-update-deps", "chore:update:tools": "run-s chore:update:tools:* fix:deps", @@ -29,6 +29,7 @@ "publish": "changeset publish" }, "devDependencies": { + "@arethetypeswrong/cli": "0.17.3", "@changesets/cli": "2.27.11", "@ianvs/prettier-plugin-sort-imports": "4.4.0", "@repo/eslint-config": "workspace:*", diff --git a/packages/http-codex/package.json b/packages/http-codex/package.json index f1c7012..203499b 100644 --- a/packages/http-codex/package.json +++ b/packages/http-codex/package.json @@ -25,25 +25,26 @@ ".": { "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.mjs" + "default": "./dist/index.js" } }, "./status": { "import": { "types": "./dist/status.d.ts", - "default": "./dist/status.mjs" + "default": "./dist/status.js" } } }, - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", + "main": "./dist/index.js", + "module": "./dist/index.js", "files": [ "dist" ], "scripts": { - "build": "bun ./scripts/build.ts", + "build": "runx build tsc", + "check:exports": "runx check -e", "check:lint": "run-eslint-workers", - "check:types": "run-tsc", + "check:types": "run-s build check:exports", "test": "run-vitest" }, "devDependencies": { @@ -51,7 +52,6 @@ "@cloudflare/workers-types": "4.20250109.0", "@repo/tools": "workspace:*", "@repo/typescript-config": "workspace:*", - "esbuild": "0.24.2", "rimraf": "6.0.1", "typescript": "5.5.4", "vitest": "2.1.1", diff --git a/packages/http-codex/scripts/build-types.ts b/packages/http-codex/scripts/build-types.ts deleted file mode 100644 index 8a49221..0000000 --- a/packages/http-codex/scripts/build-types.ts +++ /dev/null @@ -1,24 +0,0 @@ -import 'zx/globals' - -import { inspect } from 'util' -import ts from 'typescript' - -import { entryPoints } from './entrypoints' - -function buildDeclarationFiles(fileNames: string[], options: ts.CompilerOptions): void { - options = { - ...options, - declaration: true, - emitDeclarationOnly: true, - outDir: './dist/', - } - const program = ts.createProgram(fileNames, options) - program.emit() -} - -const tsconfig = ts.readConfigFile('./tsconfig.json', ts.sys.readFile) -if (tsconfig.error) { - throw new Error(`failed to read tsconfig: ${inspect(tsconfig)}`) -} - -buildDeclarationFiles(entryPoints, tsconfig.config) diff --git a/packages/http-codex/scripts/build.ts b/packages/http-codex/scripts/build.ts deleted file mode 100644 index 604805c..0000000 --- a/packages/http-codex/scripts/build.ts +++ /dev/null @@ -1,23 +0,0 @@ -import 'zx/globals' - -import * as esbuild from 'esbuild' - -import { entryPoints } from './entrypoints' - -await fs.rm('./dist/', { force: true, recursive: true }) - -await Promise.all([ - $`bun ./scripts/build-types.ts`, - esbuild.build({ - entryPoints, - outdir: './dist/', - logLevel: 'info', - outExtension: { - '.js': '.mjs', - }, - target: 'es2022', - format: 'esm', - bundle: true, - treeShaking: true, - }), -]) diff --git a/packages/http-codex/scripts/entrypoints.ts b/packages/http-codex/scripts/entrypoints.ts deleted file mode 100644 index 06128ab..0000000 --- a/packages/http-codex/scripts/entrypoints.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const entryPoints = [ - // entrypoints - './src/index.ts', - './src/status.ts', -] as const satisfies string[] diff --git a/packages/http-codex/src/combined.spec.ts b/packages/http-codex/src/combined.spec.ts index 5c2f714..a9f2e21 100644 --- a/packages/http-codex/src/combined.spec.ts +++ b/packages/http-codex/src/combined.spec.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from 'vitest' import { z } from 'zod' -import { httpStatus } from './combined' +import { httpStatus } from './combined.js' -import type { HttpStatusCodeName } from '.' +import type { HttpStatusCodeName } from './index.js' describe('httpStatus', () => { const all = Object.keys(httpStatus).filter((key) => (key as keyof typeof httpStatus) !== 'text') diff --git a/packages/http-codex/src/combined.ts b/packages/http-codex/src/combined.ts index f528567..117889c 100644 --- a/packages/http-codex/src/combined.ts +++ b/packages/http-codex/src/combined.ts @@ -1,5 +1,5 @@ -import { httpStatus as statusCodes } from './status' -import { text } from './statusText' +import { httpStatus as statusCodes } from './status.js' +import { text } from './statusText.js' /** * HTTP status codes as registered with IANA. diff --git a/packages/http-codex/src/index.ts b/packages/http-codex/src/index.ts index 2ab8e0b..6640959 100644 --- a/packages/http-codex/src/index.ts +++ b/packages/http-codex/src/index.ts @@ -1,4 +1,4 @@ -export type { HttpStatusCodeName, HttpStatusCode } from './status' +export type { HttpStatusCodeName, HttpStatusCode } from './status.js' -export { isNullBodyStatus } from './status' -export { httpStatus } from './combined' +export { isNullBodyStatus } from './status.js' +export { httpStatus } from './combined.js' diff --git a/packages/http-codex/src/status.spec.ts b/packages/http-codex/src/status.spec.ts index 68c6b77..6027fd0 100644 --- a/packages/http-codex/src/status.spec.ts +++ b/packages/http-codex/src/status.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import { httpStatus, isNullBodyStatus, nullBodyStatuses } from './status' +import { httpStatus, isNullBodyStatus, nullBodyStatuses } from './status.js' describe('isNullBodyStatus()', () => { const nonNullBodyStatuses = Object.values(httpStatus).filter( diff --git a/packages/http-codex/src/statusText.ts b/packages/http-codex/src/statusText.ts index da0dfd3..8fc6645 100644 --- a/packages/http-codex/src/statusText.ts +++ b/packages/http-codex/src/statusText.ts @@ -4,9 +4,9 @@ * Commit: 55590f3a2b89f001bcadf0df6eb2dde62618302b */ -import { httpStatus } from './status' +import { httpStatus } from './status.js' -import type { HttpStatusCode } from './status' +import type { HttpStatusCode } from './status.js' /** * statusText returns a text for the HTTP status code. It returns the empty diff --git a/packages/http-codex/tsconfig.json b/packages/http-codex/tsconfig.json index 848d8ac..8d634a4 100644 --- a/packages/http-codex/tsconfig.json +++ b/packages/http-codex/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@repo/typescript-config/workers-lib.json", + "extends": "@repo/typescript-config/lib-emit.json", "include": ["**/*.ts"], "exclude": ["node_modules", "dist", "tsconfig.json"] } diff --git a/packages/tools/src/bin/runx.ts b/packages/tools/src/bin/runx.ts index 940fb96..81c3c0d 100644 --- a/packages/tools/src/bin/runx.ts +++ b/packages/tools/src/bin/runx.ts @@ -3,6 +3,7 @@ import 'zx/globals' import { program } from '@commander-js/extra-typings' import { buildCmd } from '../cmd/build' +import { checkCmd } from '../cmd/check' import { deployCmd } from '../cmd/deploy' import { parseChangesetCmd } from '../cmd/parse-changeset' import { pkgCmd } from '../cmd/pkg/pkg' @@ -16,6 +17,7 @@ program .addCommand(updatePnpmCmd) .addCommand(parseChangesetCmd) + .addCommand(checkCmd) .addCommand(buildCmd) .addCommand(deployCmd) .addCommand(sentryCmd) diff --git a/packages/tools/src/cmd/build.ts b/packages/tools/src/cmd/build.ts index 6380eed..0f27bdc 100644 --- a/packages/tools/src/cmd/build.ts +++ b/packages/tools/src/cmd/build.ts @@ -1,4 +1,7 @@ +import { inspect } from 'util' import { Command } from '@commander-js/extra-typings' +import ts from 'typescript' +import { z } from 'zod' export const buildCmd = new Command('build').description('Build Workers/etc.') @@ -10,3 +13,49 @@ buildCmd await $`rm -rf ./dist` // Make sure we don't have any previous artifacts await $`wrangler deploy --minify --outdir ./dist --dry-run` }) + +buildCmd + .command('tsc') + .description('Build a library with tsc') + .option('-r, --root-dir ', 'Root dir for tsc to use (overrides tsconfig.json)', 'src') + .action(async ({ rootDir }) => { + await $`rm -rf ./dist` // Make sure we don't have any previous artifacts + + // Read the parent config so that we don't get + // weird path issues from being in a monorepo + const parentTsConfig = z + .object({ extends: z.string() }) + .parse(JSON.parse(fs.readFileSync('./tsconfig.json').toString())).extends + + const tsconfig = ts.readConfigFile(`./node_modules/${parentTsConfig}`, ts.sys.readFile) + if (tsconfig.error) { + throw new Error(`failed to read tsconfig: ${inspect(tsconfig)}`) + } + + const jsonCompopts = getCompilerOptionsJSONFollowExtends('tsconfig.json') + const tmp = ts.convertCompilerOptionsFromJson(jsonCompopts, '') + if (tmp.errors.length > 0) { + throw new Error(`failed parse config: ${inspect(tmp)}`) + } + const tsCompopts: ts.CompilerOptions = tmp.options + + const config = { + ...tsCompopts, + rootDir: rootDir, + } satisfies ts.CompilerOptions + + ts.createProgram(['./src/index.ts', './src/status.ts'], config).emit() + }) + +function getCompilerOptionsJSONFollowExtends(filename: string): { [key: string]: unknown } { + let compopts = {} + const config = ts.readConfigFile(filename, ts.sys.readFile).config + if (config.extends !== undefined) { + const rqrpath = require.resolve(config.extends) + compopts = getCompilerOptionsJSONFollowExtends(rqrpath) + } + return { + ...compopts, + ...config.compilerOptions, + } +} diff --git a/packages/tools/src/cmd/check.ts b/packages/tools/src/cmd/check.ts new file mode 100644 index 0000000..ce97236 --- /dev/null +++ b/packages/tools/src/cmd/check.ts @@ -0,0 +1,116 @@ +import { Command } from '@commander-js/extra-typings' +import Table from 'cli-table3' + +import { getRepoRoot } from '../path' +import { getOutcome } from '../proc' + +export const checkCmd = new Command('check') + .description( + 'Check for issues with deps/lint/types/format. If no options are provided, all default checks are run.' + ) + + .option('-r, --root', 'Run checks from root of repo. Defaults to cwd', false) + + // Default checks + .option('-d, --deps', 'Check for dependency issues with Syncpack') + .option('-l, --lint', 'Check for eslint issues') + .option('-t, --types', 'Check for TypeScript issues') + .option('-f, --format', 'Check for formatting issues with prettier') + + // Non-default checks + .option('-e, --exports', 'Checks package exports') + + .action(async ({ root, deps, lint, types, format, exports }) => { + const repoRoot = getRepoRoot() + if (root) { + cd(repoRoot) + } + // Run all default checks if none are selected + if (!deps && !lint && !types && !format && !exports) { + deps = true + lint = true + types = true + format = true + } + + const cwd = process.cwd() + const runFromRoot = cwd === repoRoot + const cwdName = path.basename(cwd) + + const checks = { + deps: ['syncpack', 'lint'], + lint: ['turbo', 'check:lint'], + format: ['runx', 'prettier', 'check'], + types: ['turbo', 'check:types'], + exports: ['attw', '--pack', '.', '--profile=esm-only'], + } as const satisfies { [key: string]: string[] } + + type TableRow = [string, string, string, string] + const table = new Table({ + head: [ + chalk.whiteBright('Name'), + chalk.whiteBright('Command'), + chalk.whiteBright('Outcome'), + chalk.whiteBright('Ran From'), + ] satisfies TableRow, + }) + + $.stdio = 'inherit' + $.verbose = true + $.nothrow = true + + if (deps) { + await within(async () => { + cd(repoRoot) // Must be run from root + const exitCode = await $`${checks.deps}`.exitCode + table.push(['deps', `${checks.deps}`, getOutcome(exitCode), 'Root'] satisfies TableRow) + }) + } + + if (lint) { + const exitCode = await $`${checks.lint}`.exitCode + table.push([ + 'lint', + checks.lint.join(' '), + getOutcome(exitCode), + runFromRoot ? 'Root' : `cwd (${cwdName})`, + ] satisfies TableRow) + } + + if (types) { + const exitCode = await $`${checks.types}`.exitCode + table.push([ + 'types', + checks.types.join(' '), + getOutcome(exitCode), + runFromRoot ? 'Root' : `cwd (${cwdName})`, + ] satisfies TableRow) + } + + if (format) { + await within(async () => { + cd(repoRoot) // Must be run from root + const exitCode = await $`${checks.format}`.exitCode + table.push([ + 'format', + checks.format.join(' '), + getOutcome(exitCode), + 'Root', + ] satisfies TableRow) + }) + } + + if (exports) { + await within(async () => { + const exitCode = await $`${checks.exports}`.exitCode + table.push([ + 'exports', + checks.exports.join(' '), + getOutcome(exitCode), + 'Root', + ] satisfies TableRow) + }) + } + + echo(table.toString()) + }) diff --git a/packages/tools/src/cmd/parse-changeset.ts b/packages/tools/src/cmd/parse-changeset.ts index 0334ec0..437f8db 100644 --- a/packages/tools/src/cmd/parse-changeset.ts +++ b/packages/tools/src/cmd/parse-changeset.ts @@ -7,7 +7,7 @@ export const parseChangesetCmd = new Command('parse-changeset') .option('--strip-packages', 'Strip packages from changeset') .option('-v, --verbose', 'Verbose output') .action(async (path, { stripPackages, verbose }) => { - const repoRoot = await getRepoRoot() + const repoRoot = getRepoRoot() cd(repoRoot) verbose && echo(chalk.blue(`Parsing changeset from ${path}`)) let changeset = (await fs.readFile(path)).toString() diff --git a/packages/tools/src/cmd/release.ts b/packages/tools/src/cmd/release.ts index b4d3d76..681fa4d 100644 --- a/packages/tools/src/cmd/release.ts +++ b/packages/tools/src/cmd/release.ts @@ -8,7 +8,7 @@ releaseCmd .command('clean') .description(`Remove files we don't want ending up in npm tarballs`) .action(async () => { - const repoRoot = await getRepoRoot() + const repoRoot = getRepoRoot() const turboDirs = await glob('packages/*/.turbo/', { cwd: repoRoot, onlyDirectories: true }) await Promise.all(turboDirs.map((d) => fs.remove(d))) diff --git a/packages/tools/src/cmd/update-pnpm.ts b/packages/tools/src/cmd/update-pnpm.ts index 5027881..4fbe674 100644 --- a/packages/tools/src/cmd/update-pnpm.ts +++ b/packages/tools/src/cmd/update-pnpm.ts @@ -6,7 +6,7 @@ import { z } from 'zod' import { getRepoRoot } from '../path' export const updatePnpmCmd = new Command('update-pnpm').action(async () => { - const repoRoot = await getRepoRoot() + const repoRoot = getRepoRoot() cd(repoRoot) echo(chalk.white(`Checking for pnpm updates...`)) const res = await fetch('https://registry.npmjs.org/pnpm') diff --git a/packages/tools/src/config.ts b/packages/tools/src/config.ts index 635a84c..e41ad90 100644 --- a/packages/tools/src/config.ts +++ b/packages/tools/src/config.ts @@ -3,7 +3,7 @@ import { z } from 'zod' import { getRepoRoot } from './path' export async function getConfig(): Promise { - const repoRoot = await getRepoRoot() + const repoRoot = getRepoRoot() const version = await getReleaseVersion() return Config.parse({ repoRoot, version } satisfies Config) } diff --git a/packages/tools/src/path.ts b/packages/tools/src/path.ts index e81ec61..5e251db 100644 --- a/packages/tools/src/path.ts +++ b/packages/tools/src/path.ts @@ -1,14 +1,17 @@ import { createHash } from 'node:crypto' +import * as find from 'empathic/find' import memoizeOne from 'memoize-one' import { z } from 'zod' -export const getRepoRoot = memoizeOne(async () => - z +export const getRepoRoot = memoizeOne(() => { + const pnpmLock = z .string() .trim() .startsWith('/') - .parse(await $`git rev-parse --show-toplevel`.text()) -) + .endsWith('/pnpm-lock.yaml') + .parse(find.up('pnpm-lock.yaml')) + return path.dirname(pnpmLock) +}) export async function getMD5OfDir(dir: string): Promise { const files = await fs diff --git a/packages/tools/src/proc.ts b/packages/tools/src/proc.ts new file mode 100644 index 0000000..db1eada --- /dev/null +++ b/packages/tools/src/proc.ts @@ -0,0 +1,7 @@ +export function getOutcome(exitCode: number | null): string { + if (exitCode === 0) { + return chalk.green('Success!') + } else { + return chalk.red(`Failed with code: ${exitCode}`) + } +} diff --git a/packages/typescript-config/lib-emit.json b/packages/typescript-config/lib-emit.json new file mode 100644 index 0000000..6a7cb4b --- /dev/null +++ b/packages/typescript-config/lib-emit.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + // https://www.totaltypescript.com/how-to-create-an-npm-package#32-set-up-a-tsconfigjson + "compilerOptions": { + // Base Options: + "esModuleInterop": true, + "skipLibCheck": true, + "target": "es2022", + "allowJs": true, + "resolveJsonModule": true, + "moduleDetection": "force", + "isolatedModules": true, + "verbatimModuleSyntax": true, + + // Strictness + "strict": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "forceConsistentCasingInFileNames": true, + + // If transpiling with TypeScript: + "module": "NodeNext", + "outDir": "dist", + // "rootDir": "src", + "sourceMap": true, + + // AND if you're building for a library: + "declaration": true, + + // AND if you're building for a library in a monorepo: + "declarationMap": true, + // https://www.totaltypescript.com/tsconfig-cheat-sheet#building-for-a-library-in-a-monorepo + "composite": true + } +} diff --git a/packages/typescript-config/workers.json b/packages/typescript-config/workers.json index ba1080e..ab4b8dc 100644 --- a/packages/typescript-config/workers.json +++ b/packages/typescript-config/workers.json @@ -16,6 +16,7 @@ "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, - "noUncheckedIndexedAccess": true + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e1385f..e81a25f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: .: devDependencies: + '@arethetypeswrong/cli': + specifier: 0.17.3 + version: 0.17.3 '@changesets/cli': specifier: 2.27.11 version: 2.27.11 @@ -286,9 +289,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../typescript-config - esbuild: - specifier: 0.24.2 - version: 0.24.2 rimraf: specifier: 6.0.1 version: 6.0.1 @@ -436,6 +436,18 @@ packages: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} + '@andrewbranch/untar.js@1.0.3': + resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + + '@arethetypeswrong/cli@0.17.3': + resolution: {integrity: sha512-wI9ZSTweunmzHboSyYtWRFpba9fM9mpX1g7EUoRr+86zHSd7NR7svb6EmJD2hv1V+SoisB2fERu6EQGGEfQ8oQ==} + engines: {node: '>=18'} + hasBin: true + + '@arethetypeswrong/core@0.17.3': + resolution: {integrity: sha512-2TB7O5JmC7UX7QHRGGftxRVQjV4Ce6oOIDGIDDERyT9dQ8lK/tRGfFubzO80rWeXm/gSrA8jirlXSWSE1i5ynQ==} + engines: {node: '>=18'} + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -1787,6 +1799,10 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} @@ -2200,6 +2216,10 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2208,6 +2228,10 @@ packages: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -2220,6 +2244,9 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -2407,9 +2434,17 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@3.1.0: resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -2440,6 +2475,11 @@ packages: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} @@ -2452,6 +2492,9 @@ packages: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -2681,6 +2724,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + empathic@1.0.0: resolution: {integrity: sha512-qtKgI1Mv8rTacvpaTkh28HM2Lbf+IOjXb7rhpt/42kZxRm8TBb/IVlo5iL2ztT19kc/EHAFN0fZ641avlXAgdg==} engines: {node: '>=16'} @@ -2697,6 +2743,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -2767,6 +2817,10 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -2981,6 +3035,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -3057,6 +3114,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.2.0: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} @@ -3212,6 +3273,9 @@ packages: header-case@1.0.1: resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + hono@4.6.16: resolution: {integrity: sha512-iE6xOPwDYlfnZFwk6BfIMMIH4WZm3pPhz6rc1uJM/OPew0pjG5K6p8WTLaMBY1/szF/T0TaEjprMpwn16BA0NQ==} engines: {node: '>=16.9.0'} @@ -3657,9 +3721,8 @@ packages: lower-case@1.1.4: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@11.0.1: resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} @@ -3685,6 +3748,17 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + marked-terminal@7.3.0: + resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} + engines: {node: '>=16.0.0'} + peerDependencies: + marked: '>=1 <16' + + marked@9.1.6: + resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} + engines: {node: '>= 16'} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -3767,6 +3841,9 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3789,6 +3866,10 @@ packages: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} + node-emoji@2.2.0: + resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} + engines: {node: '>=18'} + node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3968,6 +4049,15 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + pascal-case@2.0.1: resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} @@ -4165,6 +4255,10 @@ packages: resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} engines: {node: '>=0.10.0'} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -4347,6 +4441,10 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -4510,6 +4608,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4537,6 +4639,13 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -4703,6 +4812,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.6.1-rc: + resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} @@ -4725,6 +4839,10 @@ packages: unenv-nightly@2.0.0-20241218-183400-5d6aec3: resolution: {integrity: sha512-7Xpi29CJRbOV1/IrC03DawMJ0hloklDLq/cigSe+J2jkcC+iDres2Cy0r4ltj5f0x7DqsaGaB4/dLuCPPFZnZA==} + unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} @@ -4921,11 +5039,23 @@ packages: xxhash-wasm@1.0.2: resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yaml@2.7.0: resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -4949,6 +5079,28 @@ snapshots: '@aashutoshrathi/word-wrap@1.2.6': {} + '@andrewbranch/untar.js@1.0.3': {} + + '@arethetypeswrong/cli@0.17.3': + dependencies: + '@arethetypeswrong/core': 0.17.3 + chalk: 4.1.2 + cli-table3: 0.6.5 + commander: 10.0.1 + marked: 9.1.6 + marked-terminal: 7.3.0(marked@9.1.6) + semver: 7.6.3 + + '@arethetypeswrong/core@0.17.3': + dependencies: + '@andrewbranch/untar.js': 1.0.3 + cjs-module-lexer: 1.3.1 + fflate: 0.8.2 + lru-cache: 10.4.3 + semver: 7.6.3 + typescript: 5.6.1-rc + validate-npm-package-name: 5.0.0 + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -6399,6 +6551,8 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@sindresorhus/is@4.6.0': {} + '@sindresorhus/merge-streams@2.3.0': {} '@smithy/abort-controller@4.0.1': @@ -6982,10 +7136,16 @@ snapshots: dependencies: type-fest: 0.21.3 + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} + ansi-regex@6.1.0: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -6996,6 +7156,8 @@ snapshots: ansi-styles@6.2.1: {} + any-promise@1.3.0: {} + arg@4.1.3: {} argparse@1.0.10: @@ -7232,6 +7394,8 @@ snapshots: chalk@5.3.0: {} + chalk@5.4.1: {} + change-case@3.1.0: dependencies: camel-case: 3.0.0 @@ -7253,6 +7417,8 @@ snapshots: upper-case: 1.1.3 upper-case-first: 1.1.2 + char-regex@1.0.2: {} + chardet@0.7.0: {} check-error@2.1.1: {} @@ -7275,6 +7441,15 @@ snapshots: dependencies: restore-cursor: 4.0.0 + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + cli-spinners@2.9.2: {} cli-table3@0.6.5: @@ -7285,6 +7460,12 @@ snapshots: cli-width@3.0.0: {} + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + clone@1.0.4: {} color-convert@1.9.3: @@ -7488,6 +7669,8 @@ snapshots: emoji-regex@9.2.2: {} + emojilib@2.4.0: {} + empathic@1.0.0: {} enhanced-resolve@5.15.1: @@ -7502,6 +7685,8 @@ snapshots: env-paths@2.2.1: {} + environment@1.1.0: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -7775,6 +7960,8 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 + escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} @@ -8058,6 +8245,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -8150,6 +8339,8 @@ snapshots: functions-have-names@1.2.3: {} + get-caller-file@2.0.5: {} + get-east-asian-width@1.2.0: {} get-func-name@2.0.2: {} @@ -8341,11 +8532,13 @@ snapshots: no-case: 2.3.2 upper-case: 1.1.3 + highlight.js@10.7.3: {} + hono@4.6.16: {} hosted-git-info@7.0.2: dependencies: - lru-cache: 10.2.0 + lru-cache: 10.4.3 http-proxy-agent@7.0.2: dependencies: @@ -8768,7 +8961,7 @@ snapshots: log-symbols@6.0.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 is-unicode-supported: 1.3.0 long@5.2.3: {} @@ -8787,7 +8980,7 @@ snapshots: lower-case@1.1.4: {} - lru-cache@10.2.0: {} + lru-cache@10.4.3: {} lru-cache@11.0.1: {} @@ -8809,6 +9002,19 @@ snapshots: make-error@1.3.6: {} + marked-terminal@7.3.0(marked@9.1.6): + dependencies: + ansi-escapes: 7.0.0 + ansi-regex: 6.1.0 + chalk: 5.4.1 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 + marked: 9.1.6 + node-emoji: 2.2.0 + supports-hyperlinks: 3.2.0 + + marked@9.1.6: {} + math-intrinsics@1.1.0: {} memoize-one@6.0.0: {} @@ -8889,6 +9095,12 @@ snapshots: mute-stream@0.0.8: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.7: {} natural-compare@1.4.0: {} @@ -8903,6 +9115,13 @@ snapshots: node-domexception@1.0.0: {} + node-emoji@2.2.0: + dependencies: + '@sindresorhus/is': 4.6.0 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 + node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -9147,6 +9366,14 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + pascal-case@2.0.1: dependencies: camel-case: 3.0.0 @@ -9367,6 +9594,8 @@ snapshots: dependencies: rc: 1.2.8 + require-directory@2.1.1: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -9608,6 +9837,10 @@ snapshots: sisteransi@1.0.5: {} + skin-tone@2.0.0: + dependencies: + unicode-emoji-modifier-base: 1.0.0 + slash@3.0.0: {} slash@5.1.0: {} @@ -9791,6 +10024,11 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} swap-case@1.1.2: @@ -9832,6 +10070,14 @@ snapshots: text-table@0.2.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + through@2.3.8: {} tightrope@0.2.0: {} @@ -10015,6 +10261,8 @@ snapshots: typescript@5.5.4: {} + typescript@5.6.1-rc: {} + ufo@1.5.4: {} uglify-js@3.17.4: @@ -10046,6 +10294,8 @@ snapshots: pathe: 1.1.2 ufo: 1.5.4 + unicode-emoji-modifier-base@1.0.0: {} + unicorn-magic@0.1.0: {} universalify@0.1.2: {} @@ -10290,8 +10540,22 @@ snapshots: xxhash-wasm@1.0.2: {} + y18n@5.0.8: {} + yaml@2.7.0: {} + yargs-parser@20.2.9: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + yn@3.1.1: {} yocto-queue@0.1.0: {} diff --git a/turbo.json b/turbo.json index 4ae34fe..cc21778 100644 --- a/turbo.json +++ b/turbo.json @@ -56,7 +56,7 @@ "outputLogs": "new-only" }, "test:ci": { - "dependsOn": ["^build"], + "dependsOn": ["build", "^build"], "outputLogs": "new-only" }, "//#build": {