diff --git a/apps/server/build.ts b/apps/server/build.ts index d77ced3..6bd2d7f 100644 --- a/apps/server/build.ts +++ b/apps/server/build.ts @@ -1,289 +1,111 @@ -import { Schema } from '@effect/schema' -import { $ } from 'bun' -import { Console, Context, Data, Effect, Layer } from 'effect' +import { rm } from 'node:fs/promises' +import path from 'node:path' +import process from 'node:process' -// ============================================================================ -// Domain Models & Schema -// ============================================================================ - -const BunTargetSchema = Schema.Literal( +const ALL_TARGETS = [ 'bun-windows-x64', 'bun-darwin-arm64', 'bun-darwin-x64', 'bun-linux-x64', 'bun-linux-arm64', -) +] as const -/** - * 将 bun target 转换为文件后缀 (去掉 'bun-' 前缀) - */ -const getTargetSuffix = (target: BunTarget): string => { - return target.replace('bun-', '') -} +type BunTarget = (typeof ALL_TARGETS)[number] -type BunTarget = Schema.Schema.Type +const ENTRYPOINT = '.output/server/index.mjs' +const OUTDIR = 'out' +const OUTFILE_BASE = 'server' -const BuildConfigSchema = Schema.Struct({ - entrypoint: Schema.String.pipe(Schema.nonEmptyString()), - outputDir: Schema.String.pipe(Schema.nonEmptyString()), - outfile: Schema.String.pipe(Schema.nonEmptyString()), - targets: Schema.Array(BunTargetSchema).pipe(Schema.minItems(1)), -}) +const DEFAULT_TARGETS: BunTarget[] = [ + 'bun-windows-x64', + 'bun-darwin-arm64', + 'bun-linux-x64', +] -type BuildConfig = Schema.Schema.Type +const suffixFor = (target: BunTarget) => target.replace('bun-', '') -const BuildResultSchema = Schema.Struct({ - target: BunTargetSchema, - outputs: Schema.Array(Schema.String), -}) +const isTarget = (value: string): value is BunTarget => + (ALL_TARGETS as readonly string[]).includes(value) -type BuildResult = Schema.Schema.Type +const parseTargets = (): BunTarget[] => { + const args = process.argv.slice(2) + const targets: string[] = [] -// ============================================================================ -// Error Models (使用 Data.TaggedError) -// ============================================================================ + for (let i = 0; i < args.length; i++) { + const arg = args[i] + const next = args[i + 1] + if (arg === '--target' && next) { + targets.push(next) + i++ + } else if (arg === '--targets' && next) { + targets.push(...next.split(',')) + i++ + } + } -class CleanError extends Data.TaggedError('CleanError')<{ - readonly dir: string - readonly cause: unknown -}> {} + if (targets.length === 0) return DEFAULT_TARGETS -class BuildError extends Data.TaggedError('BuildError')<{ - readonly target: BunTarget - readonly cause: unknown -}> {} - -class ConfigError extends Data.TaggedError('ConfigError')<{ - readonly message: string - readonly cause: unknown -}> {} - -// ============================================================================ -// Services -// ============================================================================ - -/** - * 配置服务 - */ -class BuildConfigService extends Context.Tag('BuildConfigService')< - BuildConfigService, - BuildConfig ->() { - /** - * 从原始数据创建并验证配置 - */ - static fromRaw = (raw: unknown) => - Effect.gen(function* () { - const decoded = yield* Schema.decodeUnknown(BuildConfigSchema)(raw) - return decoded - }).pipe( - Effect.catchAll((error) => - Effect.fail( - new ConfigError({ - message: '配置验证失败', - cause: error, - }), - ), - ), + const invalid = targets.filter((t) => !isTarget(t)) + if (invalid.length) { + throw new Error( + `Unknown target(s): ${invalid.join(', ')}\nAllowed: ${ALL_TARGETS.join(', ')}`, ) - - /** - * 默认配置 Layer - */ - static readonly Live = Layer.effect( - BuildConfigService, - BuildConfigService.fromRaw({ - entrypoint: '.output/server/index.mjs', - outputDir: 'out', - outfile: 'server', - targets: ['bun-windows-x64', 'bun-darwin-arm64', 'bun-linux-x64'], - } satisfies BuildConfig), - ) -} - -/** - * 文件系统服务 - */ -class FileSystemService extends Context.Tag('FileSystemService')< - FileSystemService, - { - readonly cleanDir: (dir: string) => Effect.Effect } ->() { - static readonly Live = Layer.succeed(FileSystemService, { - cleanDir: (dir: string) => - Effect.tryPromise({ - try: async () => { - await $`rm -rf ${dir}` - }, - catch: (cause: unknown) => - new CleanError({ - dir, - cause, - }), - }), - }) + return targets as BunTarget[] } -/** - * 构建服务 - */ -class BuildService extends Context.Tag('BuildService')< - BuildService, - { - readonly buildForTarget: ( - config: BuildConfig, - target: BunTarget, - ) => Effect.Effect - readonly buildAll: ( - config: BuildConfig, - ) => Effect.Effect, BuildError> +const buildOne = async (target: BunTarget) => { + const suffix = suffixFor(target) + const outfile = `${OUTFILE_BASE}-${suffix}` + + const result = await Bun.build({ + entrypoints: [ENTRYPOINT], + outdir: OUTDIR, + compile: { + outfile, + target, + }, + }) + + if (!result.success) { + throw new Error( + `Build failed for ${target}:\n${result.logs.map(String).join('\n')}`, + ) } ->() { - static readonly Live = Layer.succeed(BuildService, { - buildForTarget: (config: BuildConfig, target: BunTarget) => - Effect.gen(function* () { - yield* Console.log(`🔨 开始构建: ${target}`) - const output = yield* Effect.tryPromise({ - try: () => - Bun.build({ - entrypoints: [config.entrypoint], - compile: { - outfile: `${config.outfile}-${getTargetSuffix(target)}`, - target: target, - }, - outdir: config.outputDir, - }), - catch: (cause: unknown) => - new BuildError({ - target, - cause, - }), - }) - - const paths = output.outputs.map((item: { path: string }) => item.path) - - return { - target, - outputs: paths, - } satisfies BuildResult - }), - - buildAll: (config: BuildConfig) => - Effect.gen(function* () { - const effects = config.targets.map((target) => - Effect.gen(function* () { - yield* Console.log(`🔨 开始构建: ${target}`) - - const output = yield* Effect.tryPromise({ - try: () => - Bun.build({ - entrypoints: [config.entrypoint], - compile: { - outfile: `${config.outfile}-${getTargetSuffix(target)}`, - target: target, - }, - outdir: config.outputDir, - }), - catch: (cause: unknown) => - new BuildError({ - target, - cause, - }), - }) - - const paths = output.outputs.map( - (item: { path: string }) => item.path, - ) - - return { - target, - outputs: paths, - } satisfies BuildResult - }), - ) - return yield* Effect.all(effects, { concurrency: 'unbounded' }) - }), - }) -} - -/** - * 报告服务 - */ -class ReporterService extends Context.Tag('ReporterService')< - ReporterService, - { - readonly printSummary: ( - results: ReadonlyArray, - ) => Effect.Effect + return { + target, + outputs: result.outputs.map((o) => path.relative('.', o.path)), } ->() { - static readonly Live = Layer.succeed(ReporterService, { - printSummary: (results: ReadonlyArray) => - Effect.gen(function* () { - yield* Console.log('\n📦 构建完成:') - for (const result of results) { - yield* Console.log(` ${result.target}:`) - for (const path of result.outputs) { - yield* Console.log(` - ${path}`) - } - } - }), - }) } -// ============================================================================ -// Main Program -// ============================================================================ +const main = async () => { + const targets = parseTargets() -const program = Effect.gen(function* () { - const config = yield* BuildConfigService - const fs = yield* FileSystemService - const builder = yield* BuildService - const reporter = yield* ReporterService + await rm(OUTDIR, { recursive: true, force: true }) + console.log(`✓ 已清理输出目录: ${OUTDIR}`) - // 1. 清理输出目录 - yield* fs.cleanDir(config.outputDir) - yield* Console.log(`✓ 已清理输出目录: ${config.outputDir}`) + // Bun cross-compile 不支持真正并行,逐目标串行构建 + const results: Awaited>[] = [] + for (const target of targets) { + const start = Date.now() + process.stdout.write(`🔨 构建 ${target}... `) + const result = await buildOne(target) + results.push(result) + console.log(`完成 (${Date.now() - start}ms)`) + } - // 2. 并行构建所有目标 - const results = yield* builder.buildAll(config) + console.log('\n📦 构建完成:') + for (const r of results) { + console.log(` ${r.target}:`) + for (const p of r.outputs) { + console.log(` - ${p}`) + } + } +} - // 3. 输出构建摘要 - yield* reporter.printSummary(results) - - return results -}) - -// ============================================================================ -// Layer Composition -// ============================================================================ - -const MainLayer = Layer.mergeAll( - BuildConfigService.Live, - FileSystemService.Live, - BuildService.Live, - ReporterService.Live, -) - -// ============================================================================ -// Runner -// ============================================================================ - -const runnable = program.pipe( - Effect.provide(MainLayer), - Effect.catchTags({ - CleanError: (error) => - Console.error(`❌ 清理目录失败: ${error.dir}`, error.cause), - BuildError: (error) => - Console.error(`❌ 构建失败 [${error.target}]:`, error.cause), - ConfigError: (error) => - Console.error(`❌ 配置错误: ${error.message}`, error.cause), - }), - Effect.tapErrorCause((cause) => Console.error('❌ 未预期的错误:', cause)), -) - -Effect.runPromise(runnable).catch(() => { +main().catch((err) => { + console.error('\n❌ 构建失败:') + console.error(err instanceof Error ? err.message : err) process.exit(1) }) diff --git a/apps/server/package.json b/apps/server/package.json index 991297f..a6f6e23 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -36,8 +36,6 @@ "zod": "catalog:" }, "devDependencies": { - "@effect/platform": "catalog:", - "@effect/schema": "catalog:", "@furtherverse/tsconfig": "workspace:*", "@tailwindcss/vite": "catalog:", "@tanstack/devtools-vite": "catalog:", @@ -48,7 +46,6 @@ "@vitejs/plugin-react": "catalog:", "babel-plugin-react-compiler": "catalog:", "drizzle-kit": "catalog:", - "effect": "catalog:", "nitro": "catalog:", "tailwindcss": "catalog:", "vite": "catalog:", diff --git a/bun.lock b/bun.lock index 990a0d6..4e054a3 100644 --- a/bun.lock +++ b/bun.lock @@ -46,8 +46,6 @@ "zod": "catalog:", }, "devDependencies": { - "@effect/platform": "catalog:", - "@effect/schema": "catalog:", "@furtherverse/tsconfig": "workspace:*", "@tailwindcss/vite": "catalog:", "@tanstack/devtools-vite": "catalog:", @@ -58,7 +56,6 @@ "@vitejs/plugin-react": "catalog:", "babel-plugin-react-compiler": "catalog:", "drizzle-kit": "catalog:", - "effect": "catalog:", "nitro": "catalog:", "tailwindcss": "catalog:", "vite": "catalog:", @@ -86,8 +83,6 @@ }, "catalog": { "@biomejs/biome": "^2.3.11", - "@effect/platform": "^0.94.3", - "@effect/schema": "^0.75.5", "@orpc/client": "^1.13.4", "@orpc/contract": "^1.13.4", "@orpc/openapi": "^1.13.4", @@ -111,7 +106,6 @@ "drizzle-kit": "^0.31.8", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.8.3", - "effect": "^3.19.16", "electrobun": "0.8.0", "nitro": "npm:nitro-nightly@3.0.1-20260206-171553-bc737c0c", "ohash": "^2.0.11", @@ -190,10 +184,6 @@ "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="], - "@effect/platform": ["@effect/platform@0.94.3", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.4", "multipasta": "^0.2.7" }, "peerDependencies": { "effect": "^3.19.16" } }, "sha512-bvTR8xLQoRpKgHuprZDOeQdPkhyVw+WT05iI9jl2s8Qiblyk5Dz2JLwJU+EFeksIBaPYz49xa635Om91T1CefQ=="], - - "@effect/schema": ["@effect/schema@0.75.5", "", { "dependencies": { "fast-check": "^3.21.0" }, "peerDependencies": { "effect": "^3.9.2" } }, "sha512-TQInulTVCuF+9EIbJpyLP6dvxbQJMphrnRqgexm/Ze39rSjfhJuufF7XvU3SxTgg3HnL7B/kpORTJbHhlE6thw=="], - "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], @@ -276,18 +266,6 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="], - - "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw=="], - - "@msgpackr-extract/msgpackr-extract-linux-arm": ["@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3", "", { "os": "linux", "cpu": "arm" }, "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw=="], - - "@msgpackr-extract/msgpackr-extract-linux-arm64": ["@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg=="], - - "@msgpackr-extract/msgpackr-extract-linux-x64": ["@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg=="], - - "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], "@oneidentity/zstd-js": ["@oneidentity/zstd-js@1.0.3", "", { "dependencies": { "@types/emscripten": "^1.39.4" } }, "sha512-Jm6sawqxLzBrjC4sg2BeXToa33yPzUmq20CKsehKY2++D/gHb/oSwVjNgT+RH4vys+r8FynrgcNzGwhZWMLzfQ=="], @@ -630,8 +608,6 @@ "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - "effect": ["effect@3.19.16", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-7+XC3vGrbAhCHd8LTFHvnZjRpZKZ8YHRZqJTkpNoxcJ2mCyNs2SwI+6VkV/ij8Y3YW7wfBN4EbU06/F5+m/wkQ=="], - "electrobun": ["electrobun@0.8.0", "", { "dependencies": { "@oneidentity/zstd-js": "^1.0.3", "archiver": "^7.0.1", "rpc-anywhere": "1.5.0", "tar": "^6.2.1" }, "bin": { "electrobun": "bin/electrobun.cjs" } }, "sha512-tjYmWyp9NIR80ejVUrqeMHu/H0QR2nb7zC79MJxSOfQYk6uKE5XCgr9UBURiIdnX71LfTd4Mb+R9A/Oo7vxxUg=="], "electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="], @@ -662,16 +638,12 @@ "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], - "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], - "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "find-my-way-ts": ["find-my-way-ts@0.1.6", "", {}, "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA=="], - "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], @@ -780,20 +752,12 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "msgpackr": ["msgpackr@1.11.8", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA=="], - - "msgpackr-extract": ["msgpackr-extract@3.0.3", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA=="], - - "multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], "nf3": ["nf3@0.3.10", "", {}, "sha512-UlqmHkZiHGgSkRj17yrOXEsSu5ECvtlJ3Xm1W5WsWrTKgu9m7OjrMZh9H/ME2LcWrTlMD0/vmmNVpyBG4yRdGg=="], "nitro": ["nitro-nightly@3.0.1-20260206-171553-bc737c0c", "", { "dependencies": { "consola": "^3.4.2", "crossws": "^0.4.4", "db0": "^0.3.4", "h3": "^2.0.1-rc.14", "jiti": "^2.6.1", "nf3": "^0.3.10", "ofetch": "^2.0.0-alpha.3", "ohash": "^2.0.11", "rolldown": "^1.0.0-rc.3", "srvx": "^0.11.2", "unenv": "^2.0.0-rc.24", "unstorage": "^2.0.0-alpha.5" }, "peerDependencies": { "rollup": "^4.57.0", "vite": "^7 || ^8 || >=8.0.0-0", "xml2js": "^0.6.2" }, "optionalPeers": ["rollup", "vite", "xml2js"], "bin": { "nitro": "dist/cli/index.mjs" } }, "sha512-fqne2eTFStLkCODKJ2PWuN6mWv0HNL8mb0xYH/W14cNqbFPiwWQQPWPG9BWARfXm8q/QjN93kTyIYMwRgE5tag=="], - "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], - "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], @@ -834,8 +798,6 @@ "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], - "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], - "radash": ["radash@12.1.1", "", {}, "sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA=="], "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], diff --git a/package.json b/package.json index dbb1d4b..05ee4cd 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,6 @@ }, "catalog": { "@biomejs/biome": "^2.3.11", - "@effect/platform": "^0.94.3", - "@effect/schema": "^0.75.5", "@orpc/client": "^1.13.4", "@orpc/contract": "^1.13.4", "@orpc/openapi": "^1.13.4", @@ -46,7 +44,6 @@ "drizzle-kit": "^0.31.8", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.8.3", - "effect": "^3.19.16", "electrobun": "0.8.0", "nitro": "npm:nitro-nightly@3.0.1-20260206-171553-bc737c0c", "ohash": "^2.0.11",