diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..fa3cd3c --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "ignorePatterns": [], + "experimentalSortImports": { + "sortSideEffects": true, + "groups": ["type"] + } +} diff --git a/.oxlintrc.jsonc b/.oxlintrc.jsonc new file mode 100644 index 0000000..11cac31 --- /dev/null +++ b/.oxlintrc.jsonc @@ -0,0 +1,178 @@ +// Unsupported BiomeJS-specific rules: +// - useNamingConvention (custom naming patterns) +// - noImplicitAnyLet (implicit any on let) +// - noMisleadingInstantiator (misleading constructors) +// - noUnsafeDeclarationMerging (unsafe declaration merging) +// - useImportExtensions (import extensions) +// - useExportType + +// Unsupported ESLint rules: +// unsupported rule: import/newline-after-import +// unsupported rule: typescript/no-unnecessary-condition (now included) +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["import", "typescript", "unicorn", "react"], + "categories": { + "correctness": "error", + }, + "env": { + "builtin": true, + }, + "ignorePatterns": [ + "node_modules/", + "dist/", + "*.config.js", + "*.config.mjs", + "*.config.mts", + "*.config.ts", + "**/*.test.ts", + "**/*.tst.ts", + "**/tests/*.ts", + "**/tests/**/*.ts", + "**/*.test.tsx", + "**/*.spec.ts", + "**/*.spec.tsx", + "**/*.d.ts", + ], + "rules": { + // Base ESLint rules (existing) + "no-return-assign": "error", + "no-extend-native": "error", + "prefer-promise-reject-errors": "error", + + // Complexity rules (existing + BiomeJS equivalents) + "complexity": ["warn", 6], + "max-depth": ["warn", 3], + "max-lines": ["warn", 300], + "max-lines-per-function": [ + "warn", + { + "max": 85, + "skipComments": true, + "skipBlankLines": true, + }, + ], + "max-nested-callbacks": ["warn", 5], + + // BiomeJS complexity equivalents + "no-sequences": "error", // noCommaOperator + "dot-notation": "warn", // useLiteralKeys + "prefer-optional-chaining": "warn", // useOptionalChain + + // Import rules (existing) + "import/no-mutable-exports": "error", + "import/no-absolute-path": "error", + "import/first": "error", + + // BiomeJS correctness equivalents + "no-const-assign": "error", // noConstAssign + "no-use-before-define": "error", // noInvalidUseBeforeDeclaration + "no-unused-vars": [ + "error", + { + "varsIgnorePattern": "^_", + "ignoreRestSiblings": true, + }, + ], // noUnusedVariables + + // BiomeJS security equivalents + "no-eval": "error", // noGlobalEval + + // BiomeJS style equivalents + "no-param-reassign": "error", // noParameterAssign + "no-template-curly-in-string": "warn", // noUnusedTemplateLiteral + "no-else-return": "warn", // noUselessElse + "yoda": ["warn", "never"], // noYodaExpression + "curly": ["warn", "all"], // useBlockStatements + "prefer-const": "warn", // useConst + "prefer-destructuring": "off", // Allow flexible destructuring + "prefer-exponentiation-operator": "warn", // useExponentiationOperator + "prefer-for-of": "warn", // useForOf + "prefer-template": "warn", // useTemplate + + // BiomeJS suspicious equivalents + "no-console": [ + "warn", + { + "allow": ["error"], + }, + ], // noConsole + "eqeqeq": "error", // noDoubleEquals + "no-dupe-class-members": "error", // noDuplicateClassMembers + "no-implicit-globals": "error", // noGlobalAssign + "no-label-var": "error", // noLabelVar + "no-self-compare": "error", // noSelfCompare + "no-undef-init": "error", // noUnsafeNegation + "no-var": "error", // noVar + "require-await": "error", // useAwait + "default-case-last": "error", // useDefaultSwitchClauseLast + "prefer-array-isarray": "warn", // useIsArray + "no-empty": "error", // noEmptyBlockStatements + "no-empty-function": "error", + "no-empty-file": "error", + // BiomeJS performance equivalents + "no-barrel-files": "off", // noBarrelFile (custom rule, not available) + + "sort-imports": "off", + + "react/no-array-index-key": "warn", + + "unicorn/prefer-node-protocol": "error", + "unicorn/filename-case": [ + "error", + { + "cases": { + "camelCase": true, + "pascalCase": true, + }, + }, + ], + "import/extensions": [ + "error", + "ignorePackages", + { + "ts": "never", + "tsx": "never", + "js": "never", + "jsx": "never", + "mjs": "never", + "cjs": "never", + }, + ], + + "typescript/consistent-type-imports": "error", + + // TypeScript rules (existing) + "typescript/no-floating-promises": "error", + "typescript/no-misused-promises": [ + "error", + { + "checksVoidReturn": false, + }, + ], + "typescript/no-unsafe-argument": "error", + "typescript/no-unsafe-assignment": "error", + "typescript/no-unsafe-call": "error", + "typescript/no-unsafe-member-access": "error", + "typescript/no-unsafe-return": "error", + "typescript/consistent-type-definitions": ["error", "interface"], + "typescript/no-explicit-any": "error", + "typescript/no-unnecessary-type-arguments": "warn", + "typescript/restrict-template-expressions": "warn", + + // TypeScript BiomeJS equivalents + "typescript/prefer-for-of": "warn", + "typescript/prefer-optional-chaining": "warn", + "typescript/prefer-nullish-coalescing": "warn", + "typescript/prefer-string-starts-ends-with": "warn", + "typescript/no-useless-constructor": "error", + "typescript/unified-signatures": "warn", + "typescript/switch-exhaustiveness-check": "warn", + "typescript/require-array-sort-compare": "error", + "no-loop-func": "error", + }, + "globals": { + "node": "readonly", + "es2021": "readonly", + }, +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..af78621 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "editor.defaultFormatter": "oxc.oxc-vscode", + "editor.formatOnSave": true, + "[typescript]": { + "editor.defaultFormatter": "oxc.oxc-vscode" + } +} diff --git a/package.json b/package.json index d324464..7ef6fb6 100644 --- a/package.json +++ b/package.json @@ -1,87 +1,66 @@ { - "name": "@emergente-labs/effect-sql-model", - "version": "0.1.1", - "description": "Compile Effect Schema models into Drizzle ORM table definitions", + "name": "@sellhub/sql-model-drizzle", + "version": "0.0.0", + "private": true, "type": "module", - "license": "MIT", - "author": "Emergente Labs", - "repository": { - "type": "git", - "url": "https://github.com/emergente-labs/effect-sql-model" - }, - "bugs": "https://github.com/emergente-labs/effect-sql-model/issues", - "homepage": "https://github.com/emergente-labs/effect-sql-model#readme", - "keywords": [ - "effect", - "effect-ts", - "schema", - "drizzle", - "orm", - "postgres", - "sql", - "compiler" - ], - "engines": { - "node": ">=18.0.0" - }, - "files": [ - "dist", - "README.md", - "LICENSE" - ], - "main": "./dist/index.mjs", - "types": "./dist/index.d.mts", - "scripts": { - "prepare": "pnpm build", - "build": "tsdown", - "test": "vitest run", - "test:types": "tstyche", - "typecheck": "tsc --noEmit", - "madge": "madge --circular src/index.ts", - "prepublishOnly": "pnpm run build && pnpm run test && pnpm run test:types" - }, + "main": "./src/index.ts", + "types": "./src/index.ts", "exports": { ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" }, "./*": { - "types": "./dist/*.d.mts", - "import": "./dist/*.mjs", - "default": "./dist/*.mjs" + "types": "./dist/*.d.ts", + "import": "./dist/*.js", + "default": "./dist/*.js" }, "./pg": { - "types": "./dist/pg/index.d.mts", - "import": "./dist/pg/index.mjs", - "default": "./dist/pg/index.mjs" + "types": "./dist/pg/index.d.ts", + "import": "./dist/pg/index.js", + "default": "./dist/pg/index.js" + }, + "./annotations": { + "types": "./dist/annotations.d.ts", + "import": "./dist/annotations.js", + "default": "./dist/annotations.js" } }, + "scripts": { + "test": "vitest run && tstyche", + "typecheck": "tsgo --noEmit", + "build": "tsc", + "lint": "oxlint --type-aware", + "lint:json": "oxlint --type-aware -f json" + }, "dependencies": { "@amar4enko/effect-schema-compiler": "~0.2.0" }, - "peerDependencies": { - "@effect/experimental": "^0.57.11", - "@effect/sql": "^0.48.6", - "@effect/sql-drizzle": "^0.47.0", - "@effect/sql-pg": "^0.49.7", - "drizzle-orm": "^0.44.7", - "effect": "^3.19.8", - "pg": "^8.18.0" - }, "devDependencies": { - "@effect/vitest": "^0.27.0", + "@effect/vitest": "~0.27.0", "@electric-sql/pglite": "0.3.14", "@types/pg": "^8.11.10", + "@typescript/native-preview": "^7.0.0-dev.20260113.1", "drizzle-kit": "^0.28.1", "drizzle-orm": "^0.44.7", "effect": "^3.19.8", - "madge": "^8.0.0", + "oxfmt": "^0.34.0", + "oxlint": "^1.49.0", + "oxlint-tsgolint": "^0.14.1", "pg": "^8.18.0", "postgres": "^3.4.5", - "tstyche": "^5.0.2", - "tsdown": "^0.20.0-beta.2", + "tstyche": "^6.2.0", "typescript": "^5.9.3", "vitest": "^4.0.16" + }, + "peerDependencies": { + "@effect/experimental": "^0.57.11", + "@effect/sql": "^0.48.6", + "@effect/sql-drizzle": "^0.47.0", + "@effect/sql-pg": "^0.49.7", + "drizzle-orm": "^0.44.7", + "effect": "^3.19.8", + "pg": "^8.18.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b276bab..51976ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: version: 0.49.7(@effect/experimental@0.57.11(@effect/platform@0.93.8(effect@3.19.17))(effect@3.19.17))(@effect/platform@0.93.8(effect@3.19.17))(@effect/sql@0.48.6(@effect/experimental@0.57.11(@effect/platform@0.93.8(effect@3.19.17))(effect@3.19.17))(@effect/platform@0.93.8(effect@3.19.17))(effect@3.19.17))(effect@3.19.17) devDependencies: '@effect/vitest': - specifier: ^0.27.0 + specifier: ~0.27.0 version: 0.27.0(effect@3.19.17)(vitest@4.0.18(@types/node@25.2.3)) '@electric-sql/pglite': specifier: 0.3.14 @@ -33,6 +33,9 @@ importers: '@types/pg': specifier: ^8.11.10 version: 8.16.0 + '@typescript/native-preview': + specifier: ^7.0.0-dev.20260113.1 + version: 7.0.0-dev.20260219.1 drizzle-kit: specifier: ^0.28.1 version: 0.28.1 @@ -42,21 +45,24 @@ importers: effect: specifier: ^3.19.8 version: 3.19.17 - madge: - specifier: ^8.0.0 - version: 8.0.0(typescript@5.9.3) + oxfmt: + specifier: ^0.34.0 + version: 0.34.0 + oxlint: + specifier: ^1.49.0 + version: 1.49.0(oxlint-tsgolint@0.14.1) + oxlint-tsgolint: + specifier: ^0.14.1 + version: 0.14.1 pg: specifier: ^8.18.0 version: 8.18.0 postgres: specifier: ^3.4.5 version: 3.4.8 - tsdown: - specifier: ^0.20.0-beta.2 - version: 0.20.3(typescript@5.9.3) tstyche: - specifier: ^5.0.2 - version: 5.0.2(typescript@5.9.3) + specifier: ^6.2.0 + version: 6.2.0(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -75,48 +81,6 @@ packages: typescript: optional: true - '@babel/generator@8.0.0-rc.1': - resolution: {integrity: sha512-3ypWOOiC4AYHKr8vYRVtWtWmyvcoItHtVqF8paFax+ydpmUdPsJpLBkBBs5ItmhdrwC3a0ZSqqFAdzls4ODP3w==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@8.0.0-rc.2': - resolution: {integrity: sha512-noLx87RwlBEMrTzncWd/FvTxoJ9+ycHNg0n8yyYydIoDsLZuxknKgWRJUqcrVkNrJ74uGyhWQzQaS3q8xfGAhQ==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@8.0.0-rc.1': - resolution: {integrity: sha512-I4YnARytXC2RzkLNVnf5qFNFMzp679qZpmtw/V3Jt2uGnWiIxyJtaukjG7R8pSx8nG2NamICpGfljQsogj+FbQ==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@8.0.0-rc.1': - resolution: {integrity: sha512-6HyyU5l1yK/7h9Ki52i5h6mDAx4qJdiLQO4FdCyJNoB/gy3T3GGJdhQzzbZgvgZCugYBvwtQiWRt94QKedHnkA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} - - '@babel/types@8.0.0-rc.1': - resolution: {integrity: sha512-ubmJ6TShyaD69VE9DQrlXcdkvJbmwWPB8qYj0H2kaJi29O7vJT9ajSdBd2W8CG34pwL9pYA74fi7RHC1qbLoVQ==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@dependents/detective-less@5.0.1': - resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} - engines: {node: '>=18'} - '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} @@ -169,15 +133,6 @@ packages: '@electric-sql/pglite@0.3.14': resolution: {integrity: sha512-3DB258dhqdsArOI1fIt7cb9RpUOgcDg5hXWVgVHAeqVQ/qxtFy605QKs4gx6mFq3jWsSPqDN8TgSEsqC3OfV9Q==} - '@emnapi/core@1.8.1': - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} deprecated: 'Merged into tsx: https://tsx.is' @@ -612,19 +567,9 @@ packages: cpu: [x64] os: [win32] - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} cpu: [arm64] @@ -655,94 +600,263 @@ packages: cpu: [x64] os: [win32] - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} - - '@oxc-project/types@0.112.0': - resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==} - - '@quansync/fs@1.0.0': - resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + '@oxfmt/binding-android-arm-eabi@0.34.0': + resolution: {integrity: sha512-sqkqjh/Z38l+duOb1HtVqJTAj1grt2ttkobCopC/72+a4Xxz4xUgZPFyQ4HxrYMvyqO/YA0tvM1QbfOu70Gk1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] - '@rolldown/binding-android-arm64@1.0.0-rc.3': - resolution: {integrity: sha512-0T1k9FinuBZ/t7rZ8jN6OpUKPnUjNdYHoj/cESWrQ3ZraAJ4OMm6z7QjSfCxqj8mOp9kTKc1zHK3kGz5vMu+nQ==} + '@oxfmt/binding-android-arm64@0.34.0': + resolution: {integrity: sha512-1KRCtasHcVcGOMwfOP9d5Bus2NFsN8yAYM5cBwi8LBg5UtXC3C49WHKrlEa8iF1BjOS6CR2qIqiFbGoA0DJQNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.3': - resolution: {integrity: sha512-JWWLzvcmc/3pe7qdJqPpuPk91SoE/N+f3PcWx/6ZwuyDVyungAEJPvKm/eEldiDdwTmaEzWfIR+HORxYWrCi1A==} + '@oxfmt/binding-darwin-arm64@0.34.0': + resolution: {integrity: sha512-b+Rmw9Bva6e/7PBES2wLO8sEU7Mi0+/Kv+pXSe/Y8i4fWNftZZlGwp8P01eECaUqpXATfSgNxdEKy7+ssVNz7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.3': - resolution: {integrity: sha512-MTakBxfx3tde5WSmbHxuqlDsIW0EzQym+PJYGF4P6lG2NmKzi128OGynoFUqoD5ryCySEY85dug4v+LWGBElIw==} + '@oxfmt/binding-darwin-x64@0.34.0': + resolution: {integrity: sha512-QGjpevWzf1T9COEokZEWt80kPOtthW1zhRbo7x4Qoz646eTTfi6XsHG2uHeDWJmTbgBoJZPMgj2TAEV/ppEZaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.3': - resolution: {integrity: sha512-jje3oopyOLs7IwfvXoS6Lxnmie5JJO7vW29fdGFu5YGY1EDbVDhD+P9vDihqS5X6fFiqL3ZQZCMBg6jyHkSVww==} + '@oxfmt/binding-freebsd-x64@0.34.0': + resolution: {integrity: sha512-VMSaC02cG75qL59M9M/szEaqq/RsLfgpzQ4nqUu8BUnX1zkiZIW2gTpUv3ZJ6qpWnHxIlAXiRZjQwmcwpvtbcg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3': - resolution: {integrity: sha512-A0n8P3hdLAaqzSFrQoA42p23ZKBYQOw+8EH5r15Sa9X1kD9/JXe0YT2gph2QTWvdr0CVK2BOXiK6ENfy6DXOag==} + '@oxfmt/binding-linux-arm-gnueabihf@0.34.0': + resolution: {integrity: sha512-Klm367PFJhH6vYK3vdIOxFepSJZHPaBfIuqwxdkOcfSQ4qqc/M8sgK0UTFnJWWTA/IkhMIh1kW6uEqiZ/xtQqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.34.0': + resolution: {integrity: sha512-nqn0QueVXRfbN9m58/E9Zij0Ap8lzayx591eWBYn0sZrGzY1IRv9RYS7J/1YUXbb0Ugedo0a8qIWzUHU9bWQuA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3': - resolution: {integrity: sha512-kWXkoxxarYISBJ4bLNf5vFkEbb4JvccOwxWDxuK9yee8lg5XA7OpvlTptfRuwEvYcOZf+7VS69Uenpmpyo5Bjw==} + '@oxfmt/binding-linux-arm64-gnu@0.34.0': + resolution: {integrity: sha512-DDn+dcqW+sMTCEjvLoQvC/VWJjG7h8wcdN/J+g7ZTdf/3/Dx730pQElxPPGsCXPhprb11OsPyMp5FwXjMY3qvA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3': - resolution: {integrity: sha512-Z03/wrqau9Bicfgb3Dbs6SYTHliELk2PM2LpG2nFd+cGupTMF5kanLEcj2vuuJLLhptNyS61rtk7SOZ+lPsTUA==} + '@oxfmt/binding-linux-arm64-musl@0.34.0': + resolution: {integrity: sha512-H+F8+71gHQoGTFPPJ6z4dD0Fzfzi0UP8Zx94h5kUmIFThLvMq5K1Y/bUUubiXwwHfwb5C3MPjUpYijiy0rj51Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3': - resolution: {integrity: sha512-iSXXZsQp08CSilff/DCTFZHSVEpEwdicV3W8idHyrByrcsRDVh9sGC3sev6d8BygSGj3vt8GvUKBPCoyMA4tgQ==} + '@oxfmt/binding-linux-ppc64-gnu@0.34.0': + resolution: {integrity: sha512-dIGnzTNhCXqQD5pzBwduLg8pClm+t8R53qaE9i5h8iua1iaFAJyLffh4847CNZSlASb7gn1Ofuv7KoG/EpoGZg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxfmt/binding-linux-riscv64-gnu@0.34.0': + resolution: {integrity: sha512-FGQ2GTTooilDte/ogwWwkHuuL3lGtcE3uKM2EcC7kOXNWdUfMY6Jx3JCodNVVbFoybv4A+HuCj8WJji2uu1Ceg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxfmt/binding-linux-riscv64-musl@0.34.0': + resolution: {integrity: sha512-2dGbGneJ7ptOIVKMwEIHdCkdZEomh74X3ggo4hCzEXL/rl9HwfsZDR15MkqfQqAs6nVXMvtGIOMxjDYa5lwKaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxfmt/binding-linux-s390x-gnu@0.34.0': + resolution: {integrity: sha512-cCtGgmrTrxq3OeSG0UAO+w6yLZTMeOF4XM9SAkNrRUxYhRQELSDQ/iNPCLyHhYNi38uHJQbS5RQweLUDpI4ajA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxfmt/binding-linux-x64-gnu@0.34.0': + resolution: {integrity: sha512-7AvMzmeX+k7GdgitXp99GQoIV/QZIpAS7rwxQvC/T541yWC45nwvk4mpnU8N+V6dE5SPEObnqfhCjO80s7qIsg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.3': - resolution: {integrity: sha512-qaj+MFudtdCv9xZo9znFvkgoajLdc+vwf0Kz5N44g+LU5XMe+IsACgn3UG7uTRlCCvhMAGXm1XlpEA5bZBrOcw==} + '@oxfmt/binding-linux-x64-musl@0.34.0': + resolution: {integrity: sha512-uNiglhcmivJo1oDMh3hoN/Z0WsbEXOpRXZdQ3W/IkOpyV8WF308jFjSC1ZxajdcNRXWej0zgge9QXba58Owt+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.3': - resolution: {integrity: sha512-U662UnMETyjT65gFmG9ma+XziENrs7BBnENi/27swZPYagubfHRirXHG2oMl+pEax2WvO7Kb9gHZmMakpYqBHQ==} + '@oxfmt/binding-openharmony-arm64@0.34.0': + resolution: {integrity: sha512-5eFsTjCyji25j6zznzlMc+wQAZJoL9oWy576xhqd2efv+N4g1swIzuSDcb1dz4gpcVC6veWe9pAwD7HnrGjLwg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.3': - resolution: {integrity: sha512-gekrQ3Q2HiC1T5njGyuUJoGpK/l6B/TNXKed3fZXNf9YRTJn3L5MOZsFBn4bN2+UX+8+7hgdlTcEsexX988G4g==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@oxfmt/binding-win32-arm64-msvc@0.34.0': + resolution: {integrity: sha512-6id8kK0t5hKfbV6LHDzRO21wRTA6ctTlKGTZIsG/mcoir0rssvaYsedUymF4HDj7tbCUlnxCX/qOajKlEuqbIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.34.0': + resolution: {integrity: sha512-QHaz+w673mlYqn9v/+fuiKZpjkmagleXQ+NygShDv8tdHpRYX2oYhTJwwt9j1ZfVhRgza1EIUW3JmzCXmtPdhQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3': - resolution: {integrity: sha512-85y5JifyMgs8m5K2XzR/VDsapKbiFiohl7s5lEj7nmNGO0pkTXE7q6TQScei96BNAsoK7JC3pA7ukA8WRHVJpg==} + '@oxfmt/binding-win32-x64-msvc@0.34.0': + resolution: {integrity: sha512-CXKQM/VaF+yuvGru8ktleHLJoBdjBtTFmAsLGePiESiTN0NjCI/PiaiOCfHMJ1HdP1LykvARUwMvgaN3tDhcrg==} engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint-tsgolint/darwin-arm64@0.14.1': + resolution: {integrity: sha512-PRV1nI1N7OQd4YBzdZGTv9JaBnu8aLWE30zoF4IHDiiQewqMK1U5gT5an20A7g32301Ddr2jIOGgbgTEHi7e8A==} + cpu: [arm64] + os: [darwin] + + '@oxlint-tsgolint/darwin-x64@0.14.1': + resolution: {integrity: sha512-5wiV9kqrEqYhgdHWwF7k9BbprLfcqOVfLOY1wCgtMRWco91WAq+JgGsr362237iTRDfMyDbSBqsCO2ff2kFm0A==} + cpu: [x64] + os: [darwin] + + '@oxlint-tsgolint/linux-arm64@0.14.1': + resolution: {integrity: sha512-xBDRBNjkvekf/iXc00/DXZv5WOElBRBQeZnvQ106P+P1d5bqaN/QHX6kDhZU8g9cLmsp3b+TZm3oJzOf9q9lbQ==} + cpu: [arm64] + os: [linux] + + '@oxlint-tsgolint/linux-x64@0.14.1': + resolution: {integrity: sha512-pUPo7UMShtIUJvOwRxrcIqvTg1tzzJMYZDIIAGIC8pN71UIqWu+yvMJEkY1X9ua1RxxBxDneomBRr+OEt/1I9w==} + cpu: [x64] + os: [linux] + + '@oxlint-tsgolint/win32-arm64@0.14.1': + resolution: {integrity: sha512-N999HgAKg+YKwlywyBMHkYpvHAl6DgFax04KOJQR/wL8UHeA/MKtuFRXafLiUzyuALanxlFky3fMtC1RAr0ZEw==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3': - resolution: {integrity: sha512-a4VUQZH7LxGbUJ3qJ/TzQG8HxdHvf+jOnqf7B7oFx1TEBm+j2KNL2zr5SQ7wHkNAcaPevF6gf9tQnVBnC4mD+A==} + '@oxlint-tsgolint/win32-x64@0.14.1': + resolution: {integrity: sha512-C4JD7oGC/wG+eygEeiqJRl1d3TRPmyA3aNqGf8KqJG6/MPjx7w1lZppMUcoyfED9HIlZTMLj7KHmtcbZJWR5rg==} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.49.0': + resolution: {integrity: sha512-2WPoh/2oK9r/i2R4o4J18AOrm3HVlWiHZ8TnuCaS4dX8m5ZzRmHW0I3eLxEurQLHWVruhQN7fHgZnah+ag5iQg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.49.0': + resolution: {integrity: sha512-YqJAGvNB11EzoKm1euVhZntb79alhMvWW/j12bYqdvVxn6xzEQWrEDCJg9BPo3A3tBCSUBKH7bVkAiCBqK/L1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.49.0': + resolution: {integrity: sha512-WFocCRlvVkMhChCJ2qpJfp1Gj/IjvyjuifH9Pex8m8yHonxxQa3d8DZYreuDQU3T4jvSY8rqhoRqnpc61Nlbxw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.49.0': + resolution: {integrity: sha512-BN0KniwvehbUfYztOMwEDkYoojGm/narf5oJf+/ap+6PnzMeWLezMaVARNIS0j3OdMkjHTEP8s3+GdPJ7WDywQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.49.0': + resolution: {integrity: sha512-SnkAc/DPIY6joMCiP/+53Q+N2UOGMU6ULvbztpmvPJNF/jYPGhNbKtN982uj2Gs6fpbxYkmyj08QnpkD4fbHJA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.49.0': + resolution: {integrity: sha512-6Z3EzRvpQVIpO7uFhdiGhdE8Mh3S2VWKLL9xuxVqD6fzPhyI3ugthpYXlCChXzO8FzcYIZ3t1+Kau+h2NY1hqA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.49.0': + resolution: {integrity: sha512-wdjXaQYAL/L25732mLlngfst4Jdmi/HLPVHb3yfCoP5mE3lO/pFFrmOJpqWodgv29suWY74Ij+RmJ/YIG5VuzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.49.0': + resolution: {integrity: sha512-oSHpm8zmSvAG1BWUumbDRSg7moJbnwoEXKAkwDf/xTQJOzvbUknq95NVQdw/AduZr5dePftalB8rzJNGBogUMg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxlint/binding-linux-arm64-musl@1.49.0': + resolution: {integrity: sha512-xeqkMOARgGBlEg9BQuPDf6ZW711X6BT5qjDyeM5XNowCJeTSdmMhpePJjTEiVbbr3t21sIlK8RE6X5bc04nWyQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxlint/binding-linux-ppc64-gnu@1.49.0': + resolution: {integrity: sha512-uvcqRO6PnlJGbL7TeePhTK5+7/JXbxGbN+C6FVmfICDeeRomgQqrfVjf0lUrVpUU8ii8TSkIbNdft3M+oNlOsQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxlint/binding-linux-riscv64-gnu@1.49.0': + resolution: {integrity: sha512-Dw1HkdXAwHNH+ZDserHP2RzXQmhHtpsYYI0hf8fuGAVCIVwvS6w1+InLxpPMY25P8ASRNiFN3hADtoh6lI+4lg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-riscv64-musl@1.49.0': + resolution: {integrity: sha512-EPlMYaA05tJ9km/0dI9K57iuMq3Tw+nHst7TNIegAJZrBPtsOtYaMFZEaWj02HA8FI5QvSnRHMt+CI+RIhXJBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-s390x-gnu@1.49.0': + resolution: {integrity: sha512-yZiQL9qEwse34aMbnMb5VqiAWfDY+fLFuoJbHOuzB1OaJZbN1MRF9Nk+W89PIpGr5DNPDipwjZb8+Q7wOywoUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxlint/binding-linux-x64-gnu@1.49.0': + resolution: {integrity: sha512-CcCDwMMXSchNkhdgvhVn3DLZ4EnBXAD8o8+gRzahg+IdSt/72y19xBgShJgadIRF0TsRcV/MhDUMwL5N/W54aQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] + os: [linux] + + '@oxlint/binding-linux-x64-musl@1.49.0': + resolution: {integrity: sha512-u3HfKV8BV6t6UCCbN0RRiyqcymhrnpunVmLFI8sEa5S/EBu+p/0bJ3D7LZ2KT6PsBbrB71SWq4DeFrskOVgIZg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxlint/binding-openharmony-arm64@1.49.0': + resolution: {integrity: sha512-dRDpH9fw+oeUMpM4br0taYCFpW6jQtOuEIec89rOgDA1YhqwmeRcx0XYeCv7U48p57qJ1XZHeMGM9LdItIjfzA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.49.0': + resolution: {integrity: sha512-6rrKe/wL9tn0qnOy76i1/0f4Dc3dtQnibGlU4HqR/brVHlVjzLSoaH0gAFnLnznh9yQ6gcFTBFOPrcN/eKPDGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.49.0': + resolution: {integrity: sha512-CXHLWAtLs2xG/aVy1OZiYJzrULlq0QkYpI6cd7VKMrab+qur4fXVE/B1Bp1m0h1qKTj5/FTGg6oU4qaXMjS/ug==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.3': - resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} + '@oxlint/binding-win32-x64-msvc@1.49.0': + resolution: {integrity: sha512-VteIelt78kwzSglOozaQcs6BCS4Lk0j+QA+hGV0W8UeyaqQ3XpbZRhDU55NW1PPvCy1tg4VXsTlEaPovqto7nQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] '@rollup/rollup-android-arm-eabi@4.57.1': resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} @@ -872,25 +986,6 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@ts-graphviz/adapter@2.0.6': - resolution: {integrity: sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==} - engines: {node: '>=18'} - - '@ts-graphviz/ast@2.0.7': - resolution: {integrity: sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==} - engines: {node: '>=18'} - - '@ts-graphviz/common@2.1.5': - resolution: {integrity: sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==} - engines: {node: '>=18'} - - '@ts-graphviz/core@2.0.7': - resolution: {integrity: sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==} - engines: {node: '>=18'} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -900,40 +995,50 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/jsesc@2.5.1': - resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} - '@types/node@25.2.3': resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==} '@types/pg@8.16.0': resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==} - '@typescript-eslint/project-service@8.56.0': - resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260219.1': + resolution: {integrity: sha512-h8gG6gE0YcxJZwxFc+JHjqCoFf/EBZ0k6znspV6+NwkyyJHMIqYiawZ7Lzu2Ka8lJDO3QxXcIdw2jKaktwW2wQ==} + cpu: [arm64] + os: [darwin] - '@typescript-eslint/tsconfig-utils@8.56.0': - resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260219.1': + resolution: {integrity: sha512-/tSFdSD76V4X3bX+iXecaa41KRuPMl1LQD3nsE45zZFdmDUIhvCwFRXDP+whkcdaJy8RJTALC0wWhIJ6FUmnwA==} + cpu: [x64] + os: [darwin] - '@typescript-eslint/types@8.56.0': - resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260219.1': + resolution: {integrity: sha512-9MXFr+T5LQlXuDsKTtwFdN1lbaKSMmZzabT8Gr1C74ueun91IiJVhNNISwCWY48c28Ka6O6fwxeHjU44ee/G9Q==} + cpu: [arm64] + os: [linux] - '@typescript-eslint/typescript-estree@8.56.0': - resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' + '@typescript/native-preview-linux-arm@7.0.0-dev.20260219.1': + resolution: {integrity: sha512-pmTGfe3VGoCmjyy9r68wurGBsoaqwYRZ8/i7cIxAJNnq1huKuXRnLnVoZm6uOzZ2GtjWFjwmXXCvcdfmy9+PvQ==} + cpu: [arm] + os: [linux] + + '@typescript/native-preview-linux-x64@7.0.0-dev.20260219.1': + resolution: {integrity: sha512-EMLKx9koxTbdWFg+jaqy5MwZQ19usFug6Cw+evkCaFlDEfF5sgJ/npSRhNJLbZ451FR0eqNIKmIEA9cXlHSDuA==} + cpu: [x64] + os: [linux] + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260219.1': + resolution: {integrity: sha512-vILjYS1EnTZoiD1SfWBtk92qpDrFP9Ln38olonMjtO7mJO6SmN78GHhGR+dyGgNTHQ7PZAxGFiQwZJgrIMWNhw==} + cpu: [arm64] + os: [win32] + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260219.1': + resolution: {integrity: sha512-wwjOQCSViLi+mqJycnRek7GeLZXmJClcZaVYFkLRVbmIMWvWSJkafasFjnQHDinXcLiXxZYdJ+oRR/86FOt2Xw==} + cpu: [x64] + os: [win32] - '@typescript-eslint/visitor-keys@8.56.0': - resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/native-preview@7.0.0-dev.20260219.1': + resolution: {integrity: sha512-Y/mfpmpZwfwyNzBgki/wUm/pWLQM2gaL5cum6lbOv8QNZUtzcIy0wTPaS08sb4yhUSGC1jGaJEPR2FNctfeC2Q==} + hasBin: true '@vitest/expect@4.0.18': resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} @@ -964,114 +1069,17 @@ packages: '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} - '@vue/compiler-core@3.5.28': - resolution: {integrity: sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==} - - '@vue/compiler-dom@3.5.28': - resolution: {integrity: sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==} - - '@vue/compiler-sfc@3.5.28': - resolution: {integrity: sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==} - - '@vue/compiler-ssr@3.5.28': - resolution: {integrity: sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==} - - '@vue/shared@3.5.28': - resolution: {integrity: sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} - engines: {node: '>=14'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - app-module-path@2.2.0: - resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-kit@3.0.0-beta.1: - resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==} - engines: {node: '>=20.19.0'} - - ast-module-types@6.0.1: - resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} - engines: {node: '>=18'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - birpc@4.0.0: - resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1081,68 +1089,10 @@ packages: supports-color: optional: true - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - dependency-tree@11.3.0: - resolution: {integrity: sha512-T893F3p48rblazo45S/5jkFEvU8mzZ8obtNSyP2S1QCA8e9PpVH+hIakHnQYdnhitwQ8wo9btYJpQxnjiGm0Qg==} - engines: {node: '>=18'} - hasBin: true - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - detective-amd@6.0.1: - resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} - engines: {node: '>=18'} - hasBin: true - - detective-cjs@6.0.1: - resolution: {integrity: sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==} - engines: {node: '>=18'} - - detective-es6@5.0.1: - resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} - engines: {node: '>=18'} - - detective-postcss@7.0.1: - resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} - engines: {node: ^14.0.0 || >=16.0.0} - peerDependencies: - postcss: ^8.4.47 - - detective-sass@6.0.1: - resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} - engines: {node: '>=18'} - - detective-scss@5.0.1: - resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} - engines: {node: '>=18'} - - detective-stylus@5.0.1: - resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} - engines: {node: '>=18'} - - detective-typescript@14.0.0: - resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} - engines: {node: '>=18'} - peerDependencies: - typescript: ^5.4.4 - - detective-vue2@2.2.0: - resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} - engines: {node: '>=18'} - peerDependencies: - typescript: ^5.4.4 - drizzle-kit@0.28.1: resolution: {integrity: sha512-JimOV+ystXTWMgZkLHYHf2w3oS28hxiH1FR0dkmJLc7GHzdGJoJAQtQS5DRppnabsRZwE2U1F6CuezVBgmsBBQ==} hasBin: true @@ -1239,30 +1189,9 @@ packages: sqlite3: optional: true - dts-resolver@2.1.3: - resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} - engines: {node: '>=20.19.0'} - peerDependencies: - oxc-resolver: '>=11.0.0' - peerDependenciesMeta: - oxc-resolver: - optional: true - effect@3.19.17: resolution: {integrity: sha512-MChgn9z0y3KJ2DJ+VsZt1bdVDJ0bDIZt9zm4s3iPpRLzgcEGDOIP8pwADjAWifaP0S672nlRE5rZPBbyDcjn1g==} - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} - engines: {node: '>=14'} - - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} - engines: {node: '>=10.13.0'} - - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -1286,37 +1215,12 @@ packages: engines: {node: '>=18'} hasBin: true - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - eslint-visitor-keys@5.0.0: - resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} - engines: {node: '>=12.0.0'} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} fast-check@3.23.2: resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} @@ -1331,11 +1235,6 @@ packages: picomatch: optional: true - filing-cabinet@5.1.0: - resolution: {integrity: sha512-xA3nKuR0N762AtUloSEbq4T+tOqNf1rZ3vgPW8Sijurqz9rvArjTpZhfrV1OxSrhX6OUoDGAONXo6liKZTNXKQ==} - engines: {node: '>=18'} - hasBin: true - find-my-way-ts@0.1.6: resolution: {integrity: sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==} @@ -1344,126 +1243,12 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - get-amd-module-type@6.0.1: - resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} - engines: {node: '>=18'} - - get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - get-tsconfig@4.13.6: resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} - gonzales-pe@4.3.0: - resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} - engines: {node: '>=0.6.0'} - hasBin: true - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hookable@6.0.1: - resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - import-without-cache@0.2.5: - resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} - engines: {node: '>=20.19.0'} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - - is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - is-url-superb@4.0.0: - resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} - engines: {node: '>=10'} - - is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - madge@8.0.0: - resolution: {integrity: sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - typescript: ^5.4.4 - peerDependenciesMeta: - typescript: - optional: true - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - module-definition@6.0.1: - resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} - engines: {node: '>=18'} - hasBin: true - - module-lookup-amd@9.1.0: - resolution: {integrity: sha512-j4tnAgLfIR/7p26DF7cyLL/2LD/5386L5EuvVtID+HnOvTSzVk8lwheZIlhfCbeyrZPBDm9m+eseH7yp81dZrA==} - engines: {node: '>=18'} - hasBin: true - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1486,30 +1271,30 @@ packages: resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} hasBin: true - node-source-walk@7.0.1: - resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} - engines: {node: '>=18'} - obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + oxfmt@0.34.0: + resolution: {integrity: sha512-t+zTE4XGpzPTK+Zk9gSwcJcFi4pqjl6PwO/ZxPBJiJQ2XCKMucwjPlHxvPHyVKJtkMSyrDGfQ7Ntg/hUr4OgHQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true - parse-ms@2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} - engines: {node: '>=6'} + oxlint-tsgolint@0.14.1: + resolution: {integrity: sha512-+zbTyYt+86+8TcF//1NUoHs7v8kvu5vQvjnFZMerrhp5REzYFvgLdfT7LLBQd1qmTWeFQ4/ko1YLXKtoxTFxVw==} + hasBin: true - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + oxlint@1.49.0: + resolution: {integrity: sha512-YZffp0gM+63CJoRhHjtjRnwKtAgUnXM6j63YQ++aigji2NVvLGsUlrXo9gJUXZOdcbfShLYtA6RuTu8GZ4lzOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.14.1' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -1571,16 +1356,6 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - - postcss-values-parser@6.0.2: - resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} - engines: {node: '>=10'} - peerDependencies: - postcss: ^8.2.9 - postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -1624,105 +1399,20 @@ packages: resolution: {integrity: sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==} engines: {node: '>=12'} - precinct@12.2.0: - resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} - engines: {node: '>=18'} - hasBin: true - - pretty-ms@7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} - engines: {node: '>=10'} - pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - quansync@1.0.0: - resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} - - quote-unquote@1.0.0: - resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - requirejs-config-file@4.0.0: - resolution: {integrity: sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==} - engines: {node: '>=10.13.0'} - - requirejs@2.3.8: - resolution: {integrity: sha512-7/cTSLOdYkNBNJcDMWf+luFvMriVm7eYxp4BcFCsAX0wF421Vyce5SXP17c+Jd5otXKGNehIonFlyQXSowL6Mw==} - engines: {node: '>=0.4.0'} - hasBin: true - - resolve-dependency-path@4.0.1: - resolution: {integrity: sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==} - engines: {node: '>=18'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - rolldown-plugin-dts@0.22.1: - resolution: {integrity: sha512-5E0AiM5RSQhU6cjtkDFWH6laW4IrMu0j1Mo8x04Xo1ALHmaRMs9/7zej7P3RrryVHW/DdZAp85MA7Be55p0iUw==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@ts-macro/tsc': ^0.3.6 - '@typescript/native-preview': '>=7.0.0-dev.20250601.1' - rolldown: ^1.0.0-rc.3 - typescript: ^5.0.0 - vue-tsc: ~3.2.0 - peerDependenciesMeta: - '@ts-macro/tsc': - optional: true - '@typescript/native-preview': - optional: true - typescript: - optional: true - vue-tsc: - optional: true - - rolldown@1.0.0-rc.3: - resolution: {integrity: sha512-Po/YZECDOqVXjIXrtC5h++a5NLvKAQNrd9ggrIG3sbDfGO5BqTUsrI6l8zdniKRp3r5Tp/2JTrXqx4GIguFCMw==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - rollup@4.57.1: resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - sass-lookup@6.1.0: - resolution: {integrity: sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA==} - engines: {node: '>=18'} - hasBin: true - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true - siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1744,45 +1434,6 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - stream-to-array@2.3.0: - resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - - stylus-lookup@6.1.0: - resolution: {integrity: sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==} - engines: {node: '>=18'} - hasBin: true - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1794,62 +1445,20 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} + tinyrainbow@3.0.3: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-graphviz@2.1.6: - resolution: {integrity: sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==} - engines: {node: '>=18'} - - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - - tsdown@0.20.3: - resolution: {integrity: sha512-qWOUXSbe4jN8JZEgrkc/uhJpC8VN2QpNu3eZkBWwNuTEjc/Ik1kcc54ycfcQ5QPRHeu9OQXaLfCI3o7pEJgB2w==} - engines: {node: '>=20.19.0'} - hasBin: true - peerDependencies: - '@arethetypeswrong/core': ^0.18.1 - '@vitejs/devtools': '*' - publint: ^0.3.0 - typescript: ^5.0.0 - unplugin-lightningcss: ^0.4.0 - unplugin-unused: ^0.5.0 - peerDependenciesMeta: - '@arethetypeswrong/core': - optional: true - '@vitejs/devtools': - optional: true - publint: - optional: true - typescript: - optional: true - unplugin-lightningcss: - optional: true - unplugin-unused: - optional: true - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tstyche@5.0.2: - resolution: {integrity: sha512-5XoNS1qIHr7w2QkpCx9WOJD69soaxaeqzY3DNOb+trLWjJowzKVZ9L7tSLWxXnwZQ9vKPTq4F41gUd99371aXg==} - engines: {node: '>=20.12'} + tstyche@6.2.0: + resolution: {integrity: sha512-WBiB6fGGsmQCFFRGwYaKq528pCLJ0CUUdrIdUm2rnVJ1Ineskbrv9uQADWsD3uHndEV/Hesdx1Gj8PdkBahxlQ==} + engines: {node: '>=22.12'} hasBin: true peerDependencies: - typescript: '>=5.0' + typescript: '>=5.4' peerDependenciesMeta: typescript: optional: true @@ -1859,25 +1468,9 @@ packages: engines: {node: '>=14.17'} hasBin: true - unconfig-core@7.5.0: - resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} - undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - unrun@0.2.27: - resolution: {integrity: sha512-Mmur1UJpIbfxasLOhPRvox/QS4xBiDii71hMP7smfRthGcwFL2OAmYRgduLANOAU4LUkvVamuP+02U+c90jlrw==} - engines: {node: '>=20.19.0'} - hasBin: true - peerDependencies: - synckit: ^0.11.11 - peerDependenciesMeta: - synckit: - optional: true - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.1.0: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true @@ -1956,13 +1549,6 @@ packages: jsdom: optional: true - walkdir@0.4.1: - resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} - engines: {node: '>=6.0.0'} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -1980,46 +1566,6 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@babel/generator@8.0.0-rc.1': - dependencies: - '@babel/parser': 8.0.0-rc.1 - '@babel/types': 8.0.0-rc.1 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@types/jsesc': 2.5.1 - jsesc: 3.1.0 - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-string-parser@8.0.0-rc.2': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-identifier@8.0.0-rc.1': {} - - '@babel/parser@7.29.0': - dependencies: - '@babel/types': 7.29.0 - - '@babel/parser@8.0.0-rc.1': - dependencies: - '@babel/types': 8.0.0-rc.1 - - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@babel/types@8.0.0-rc.1': - dependencies: - '@babel/helper-string-parser': 8.0.0-rc.2 - '@babel/helper-validator-identifier': 8.0.0-rc.1 - - '@dependents/detective-less@5.0.1': - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - '@drizzle-team/brocli@0.10.2': {} '@effect/experimental@0.57.11(@effect/platform@0.93.8(effect@3.19.17))(effect@3.19.17)': @@ -2069,22 +1615,6 @@ snapshots: '@electric-sql/pglite@0.3.14': {} - '@emnapi/core@1.8.1': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.8.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': - dependencies: - tslib: 2.8.1 - optional: true - '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -2308,20 +1838,8 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': optional: true @@ -2340,169 +1858,223 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': optional: true - '@napi-rs/wasm-runtime@1.1.1': - dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 + '@oxfmt/binding-android-arm-eabi@0.34.0': optional: true - '@oxc-project/types@0.112.0': {} - - '@quansync/fs@1.0.0': - dependencies: - quansync: 1.0.0 + '@oxfmt/binding-android-arm64@0.34.0': + optional: true - '@rolldown/binding-android-arm64@1.0.0-rc.3': + '@oxfmt/binding-darwin-arm64@0.34.0': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.3': + '@oxfmt/binding-darwin-x64@0.34.0': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.3': + '@oxfmt/binding-freebsd-x64@0.34.0': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.3': + '@oxfmt/binding-linux-arm-gnueabihf@0.34.0': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3': + '@oxfmt/binding-linux-arm-musleabihf@0.34.0': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3': + '@oxfmt/binding-linux-arm64-gnu@0.34.0': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3': + '@oxfmt/binding-linux-arm64-musl@0.34.0': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3': + '@oxfmt/binding-linux-ppc64-gnu@0.34.0': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.3': + '@oxfmt/binding-linux-riscv64-gnu@0.34.0': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.3': + '@oxfmt/binding-linux-riscv64-musl@0.34.0': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.3': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@oxfmt/binding-linux-s390x-gnu@0.34.0': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3': + '@oxfmt/binding-linux-x64-gnu@0.34.0': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3': + '@oxfmt/binding-linux-x64-musl@0.34.0': optional: true - '@rolldown/pluginutils@1.0.0-rc.3': {} + '@oxfmt/binding-openharmony-arm64@0.34.0': + optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': + '@oxfmt/binding-win32-arm64-msvc@0.34.0': optional: true - '@rollup/rollup-android-arm64@4.57.1': + '@oxfmt/binding-win32-ia32-msvc@0.34.0': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': + '@oxfmt/binding-win32-x64-msvc@0.34.0': optional: true - '@rollup/rollup-darwin-x64@4.57.1': + '@oxlint-tsgolint/darwin-arm64@0.14.1': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': + '@oxlint-tsgolint/darwin-x64@0.14.1': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': + '@oxlint-tsgolint/linux-arm64@0.14.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + '@oxlint-tsgolint/linux-x64@0.14.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': + '@oxlint-tsgolint/win32-arm64@0.14.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': + '@oxlint-tsgolint/win32-x64@0.14.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': + '@oxlint/binding-android-arm-eabi@1.49.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': + '@oxlint/binding-android-arm64@1.49.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': + '@oxlint/binding-darwin-arm64@1.49.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': + '@oxlint/binding-darwin-x64@1.49.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': + '@oxlint/binding-freebsd-x64@1.49.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': + '@oxlint/binding-linux-arm-gnueabihf@1.49.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': + '@oxlint/binding-linux-arm-musleabihf@1.49.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': + '@oxlint/binding-linux-arm64-gnu@1.49.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': + '@oxlint/binding-linux-arm64-musl@1.49.0': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': + '@oxlint/binding-linux-ppc64-gnu@1.49.0': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': + '@oxlint/binding-linux-riscv64-gnu@1.49.0': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': + '@oxlint/binding-linux-riscv64-musl@1.49.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': + '@oxlint/binding-linux-s390x-gnu@1.49.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': + '@oxlint/binding-linux-x64-gnu@1.49.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': + '@oxlint/binding-linux-x64-musl@1.49.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': + '@oxlint/binding-openharmony-arm64@1.49.0': optional: true - '@standard-schema/spec@1.1.0': {} + '@oxlint/binding-win32-arm64-msvc@1.49.0': + optional: true - '@ts-graphviz/adapter@2.0.6': - dependencies: - '@ts-graphviz/common': 2.1.5 + '@oxlint/binding-win32-ia32-msvc@1.49.0': + optional: true - '@ts-graphviz/ast@2.0.7': - dependencies: - '@ts-graphviz/common': 2.1.5 + '@oxlint/binding-win32-x64-msvc@1.49.0': + optional: true - '@ts-graphviz/common@2.1.5': {} + '@rollup/rollup-android-arm-eabi@4.57.1': + optional: true - '@ts-graphviz/core@2.0.7': - dependencies: - '@ts-graphviz/ast': 2.0.7 - '@ts-graphviz/common': 2.1.5 + '@rollup/rollup-android-arm64@4.57.1': + optional: true - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 + '@rollup/rollup-darwin-arm64@4.57.1': optional: true - '@types/chai@5.2.3': - dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 + '@rollup/rollup-darwin-x64@4.57.1': + optional: true - '@types/deep-eql@4.0.2': {} + '@rollup/rollup-freebsd-arm64@4.57.1': + optional: true - '@types/estree@1.0.8': {} + '@rollup/rollup-freebsd-x64@4.57.1': + optional: true - '@types/jsesc@2.5.1': {} + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.57.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.57.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.57.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.57.1': + optional: true + + '@standard-schema/spec@1.1.0': {} + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} '@types/node@25.2.3': dependencies: @@ -2514,40 +2086,36 @@ snapshots: pg-protocol: 1.11.0 pg-types: 2.2.0 - '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) - '@typescript-eslint/types': 8.56.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260219.1': + optional: true - '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260219.1': + optional: true - '@typescript-eslint/types@8.56.0': {} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260219.1': + optional: true - '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/visitor-keys': 8.56.0 - debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@typescript/native-preview-linux-arm@7.0.0-dev.20260219.1': + optional: true - '@typescript-eslint/visitor-keys@8.56.0': - dependencies: - '@typescript-eslint/types': 8.56.0 - eslint-visitor-keys: 5.0.0 + '@typescript/native-preview-linux-x64@7.0.0-dev.20260219.1': + optional: true + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260219.1': + optional: true + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260219.1': + optional: true + + '@typescript/native-preview@7.0.0-dev.20260219.1': + optionalDependencies: + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260219.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260219.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260219.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260219.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260219.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260219.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260219.1 '@vitest/expect@4.0.18': dependencies: @@ -2588,192 +2156,19 @@ snapshots: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 - '@vue/compiler-core@3.5.28': - dependencies: - '@babel/parser': 7.29.0 - '@vue/shared': 3.5.28 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.28': - dependencies: - '@vue/compiler-core': 3.5.28 - '@vue/shared': 3.5.28 - - '@vue/compiler-sfc@3.5.28': - dependencies: - '@babel/parser': 7.29.0 - '@vue/compiler-core': 3.5.28 - '@vue/compiler-dom': 3.5.28 - '@vue/compiler-ssr': 3.5.28 - '@vue/shared': 3.5.28 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.6 - source-map-js: 1.2.1 - - '@vue/compiler-ssr@3.5.28': - dependencies: - '@vue/compiler-dom': 3.5.28 - '@vue/shared': 3.5.28 - - '@vue/shared@3.5.28': {} - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansis@4.2.0: {} - - any-promise@1.3.0: {} - - app-module-path@2.2.0: {} - assertion-error@2.0.1: {} - ast-kit@3.0.0-beta.1: - dependencies: - '@babel/parser': 8.0.0-rc.1 - estree-walker: 3.0.3 - pathe: 2.0.3 - - ast-module-types@6.0.1: {} - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - birpc@4.0.0: {} - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - cac@6.7.14: {} - chai@6.2.2: {} - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - clone@1.0.4: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - commander@12.1.0: {} - - commander@7.2.0: {} - - commondir@1.0.1: {} - debug@4.4.3: dependencies: ms: 2.1.3 - deep-extend@0.6.0: {} - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - defu@6.1.4: {} - - dependency-tree@11.3.0: - dependencies: - commander: 12.1.0 - filing-cabinet: 5.1.0 - precinct: 12.2.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - detect-libc@2.1.2: optional: true - detective-amd@6.0.1: - dependencies: - ast-module-types: 6.0.1 - escodegen: 2.1.0 - get-amd-module-type: 6.0.1 - node-source-walk: 7.0.1 - - detective-cjs@6.0.1: - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - - detective-es6@5.0.1: - dependencies: - node-source-walk: 7.0.1 - - detective-postcss@7.0.1(postcss@8.5.6): - dependencies: - is-url: 1.2.4 - postcss: 8.5.6 - postcss-values-parser: 6.0.2(postcss@8.5.6) - - detective-sass@6.0.1: - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - - detective-scss@5.0.1: - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - - detective-stylus@5.0.1: {} - - detective-typescript@14.0.0(typescript@5.9.3): - dependencies: - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - detective-vue2@2.2.0(typescript@5.9.3): - dependencies: - '@dependents/detective-less': 5.0.1 - '@vue/compiler-sfc': 3.5.28 - detective-es6: 5.0.1 - detective-sass: 6.0.1 - detective-scss: 5.0.1 - detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - drizzle-kit@0.28.1: dependencies: '@drizzle-team/brocli': 0.10.2 @@ -2790,22 +2185,11 @@ snapshots: pg: 8.18.0 postgres: 3.4.8 - dts-resolver@2.1.3: {} - effect@3.19.17: dependencies: '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 - empathic@2.0.0: {} - - enhanced-resolve@5.19.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - - entities@7.0.1: {} - es-module-lexer@1.7.0: {} esbuild-register@3.6.0(esbuild@0.19.12): @@ -2895,28 +2279,10 @@ snapshots: '@esbuild/win32-ia32': 0.27.3 '@esbuild/win32-x64': 0.27.3 - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - eslint-visitor-keys@5.0.0: {} - - esprima@4.0.1: {} - - estraverse@5.3.0: {} - - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 - esutils@2.0.3: {} - expect-type@1.3.0: {} fast-check@3.23.2: @@ -2927,127 +2293,19 @@ snapshots: optionalDependencies: picomatch: 4.0.3 - filing-cabinet@5.1.0: - dependencies: - app-module-path: 2.2.0 - commander: 12.1.0 - enhanced-resolve: 5.19.0 - module-definition: 6.0.1 - module-lookup-amd: 9.1.0 - resolve: 1.22.11 - resolve-dependency-path: 4.0.1 - sass-lookup: 6.1.0 - stylus-lookup: 6.1.0 - tsconfig-paths: 4.2.0 - typescript: 5.9.3 - find-my-way-ts@0.1.6: {} fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - - get-amd-module-type@6.0.1: - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - - get-own-enumerable-property-symbols@3.0.2: {} - get-tsconfig@4.13.6: dependencies: resolve-pkg-maps: 1.0.0 - gonzales-pe@4.3.0: - dependencies: - minimist: 1.2.8 - - graceful-fs@4.2.11: {} - - has-flag@4.0.0: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hookable@6.0.1: {} - - ieee754@1.2.1: {} - - import-without-cache@0.2.5: {} - - inherits@2.0.4: {} - - ini@1.3.8: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-interactive@1.0.0: {} - - is-obj@1.0.1: {} - - is-regexp@1.0.0: {} - - is-unicode-supported@0.1.0: {} - - is-url-superb@4.0.0: {} - - is-url@1.2.4: {} - - jsesc@3.1.0: {} - - json5@2.2.3: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - madge@8.0.0(typescript@5.9.3): - dependencies: - chalk: 4.1.2 - commander: 7.2.0 - commondir: 1.0.1 - debug: 4.4.3 - dependency-tree: 11.3.0 - ora: 5.4.1 - pluralize: 8.0.0 - pretty-ms: 7.0.1 - rc: 1.2.8 - stream-to-array: 2.3.0 - ts-graphviz: 2.1.6 - walkdir: 0.4.1 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - mimic-fn@2.1.0: {} - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - module-definition@6.0.1: - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - - module-lookup-amd@9.1.0: - dependencies: - commander: 12.1.0 - requirejs: 2.3.8 - requirejs-config-file: 4.0.0 - ms@2.1.3: {} msgpackr-extract@3.0.3: @@ -3075,33 +2333,65 @@ snapshots: detect-libc: 2.1.2 optional: true - node-source-walk@7.0.1: - dependencies: - '@babel/parser': 7.29.0 - obuf@1.1.2: {} obug@2.1.1: {} - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - ora@5.4.1: + oxfmt@0.34.0: dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - - parse-ms@2.1.0: {} - - path-parse@1.0.7: {} + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.34.0 + '@oxfmt/binding-android-arm64': 0.34.0 + '@oxfmt/binding-darwin-arm64': 0.34.0 + '@oxfmt/binding-darwin-x64': 0.34.0 + '@oxfmt/binding-freebsd-x64': 0.34.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.34.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.34.0 + '@oxfmt/binding-linux-arm64-gnu': 0.34.0 + '@oxfmt/binding-linux-arm64-musl': 0.34.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.34.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.34.0 + '@oxfmt/binding-linux-riscv64-musl': 0.34.0 + '@oxfmt/binding-linux-s390x-gnu': 0.34.0 + '@oxfmt/binding-linux-x64-gnu': 0.34.0 + '@oxfmt/binding-linux-x64-musl': 0.34.0 + '@oxfmt/binding-openharmony-arm64': 0.34.0 + '@oxfmt/binding-win32-arm64-msvc': 0.34.0 + '@oxfmt/binding-win32-ia32-msvc': 0.34.0 + '@oxfmt/binding-win32-x64-msvc': 0.34.0 + + oxlint-tsgolint@0.14.1: + optionalDependencies: + '@oxlint-tsgolint/darwin-arm64': 0.14.1 + '@oxlint-tsgolint/darwin-x64': 0.14.1 + '@oxlint-tsgolint/linux-arm64': 0.14.1 + '@oxlint-tsgolint/linux-x64': 0.14.1 + '@oxlint-tsgolint/win32-arm64': 0.14.1 + '@oxlint-tsgolint/win32-x64': 0.14.1 + + oxlint@1.49.0(oxlint-tsgolint@0.14.1): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.49.0 + '@oxlint/binding-android-arm64': 1.49.0 + '@oxlint/binding-darwin-arm64': 1.49.0 + '@oxlint/binding-darwin-x64': 1.49.0 + '@oxlint/binding-freebsd-x64': 1.49.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.49.0 + '@oxlint/binding-linux-arm-musleabihf': 1.49.0 + '@oxlint/binding-linux-arm64-gnu': 1.49.0 + '@oxlint/binding-linux-arm64-musl': 1.49.0 + '@oxlint/binding-linux-ppc64-gnu': 1.49.0 + '@oxlint/binding-linux-riscv64-gnu': 1.49.0 + '@oxlint/binding-linux-riscv64-musl': 1.49.0 + '@oxlint/binding-linux-s390x-gnu': 1.49.0 + '@oxlint/binding-linux-x64-gnu': 1.49.0 + '@oxlint/binding-linux-x64-musl': 1.49.0 + '@oxlint/binding-openharmony-arm64': 1.49.0 + '@oxlint/binding-win32-arm64-msvc': 1.49.0 + '@oxlint/binding-win32-ia32-msvc': 1.49.0 + '@oxlint/binding-win32-x64-msvc': 1.49.0 + oxlint-tsgolint: 0.14.1 pathe@2.0.3: {} @@ -3162,15 +2452,6 @@ snapshots: picomatch@4.0.3: {} - pluralize@8.0.0: {} - - postcss-values-parser@6.0.2(postcss@8.5.6): - dependencies: - color-name: 1.1.4 - is-url-superb: 4.0.0 - postcss: 8.5.6 - quote-unquote: 1.0.0 - postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -3201,107 +2482,10 @@ snapshots: postgres@3.4.8: {} - precinct@12.2.0: - dependencies: - '@dependents/detective-less': 5.0.1 - commander: 12.1.0 - detective-amd: 6.0.1 - detective-cjs: 6.0.1 - detective-es6: 5.0.1 - detective-postcss: 7.0.1(postcss@8.5.6) - detective-sass: 6.0.1 - detective-scss: 5.0.1 - detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@5.9.3) - detective-vue2: 2.2.0(typescript@5.9.3) - module-definition: 6.0.1 - node-source-walk: 7.0.1 - postcss: 8.5.6 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - pretty-ms@7.0.1: - dependencies: - parse-ms: 2.1.0 - pure-rand@6.1.0: {} - quansync@1.0.0: {} - - quote-unquote@1.0.0: {} - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - requirejs-config-file@4.0.0: - dependencies: - esprima: 4.0.1 - stringify-object: 3.3.0 - - requirejs@2.3.8: {} - - resolve-dependency-path@4.0.1: {} - resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - rolldown-plugin-dts@0.22.1(rolldown@1.0.0-rc.3)(typescript@5.9.3): - dependencies: - '@babel/generator': 8.0.0-rc.1 - '@babel/helper-validator-identifier': 8.0.0-rc.1 - '@babel/parser': 8.0.0-rc.1 - '@babel/types': 8.0.0-rc.1 - ast-kit: 3.0.0-beta.1 - birpc: 4.0.0 - dts-resolver: 2.1.3 - get-tsconfig: 4.13.6 - obug: 2.1.1 - rolldown: 1.0.0-rc.3 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - oxc-resolver - - rolldown@1.0.0-rc.3: - dependencies: - '@oxc-project/types': 0.112.0 - '@rolldown/pluginutils': 1.0.0-rc.3 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.3 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.3 - '@rolldown/binding-darwin-x64': 1.0.0-rc.3 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.3 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.3 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.3 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.3 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.3 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.3 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.3 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3 - rollup@4.57.1: dependencies: '@types/estree': 1.0.8 @@ -3333,19 +2517,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 - safe-buffer@5.2.1: {} - - sass-lookup@6.1.0: - dependencies: - commander: 12.1.0 - enhanced-resolve: 5.19.0 - - semver@7.7.4: {} - siginfo@2.0.0: {} - signal-exit@3.0.7: {} - source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -3361,40 +2534,6 @@ snapshots: std-env@3.10.0: {} - stream-to-array@2.3.0: - dependencies: - any-promise: 1.3.0 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - stringify-object@3.3.0: - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} - - strip-json-comments@2.0.1: {} - - stylus-lookup@6.1.0: - dependencies: - commander: 12.1.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - tapable@2.3.0: {} - tinybench@2.9.0: {} tinyexec@1.0.2: {} @@ -3404,76 +2543,18 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinyrainbow@3.0.3: {} - - tree-kill@1.2.2: {} - - ts-api-utils@2.4.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - ts-graphviz@2.1.6: - dependencies: - '@ts-graphviz/adapter': 2.0.6 - '@ts-graphviz/ast': 2.0.7 - '@ts-graphviz/common': 2.1.5 - '@ts-graphviz/core': 2.0.7 - - tsconfig-paths@4.2.0: - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tsdown@0.20.3(typescript@5.9.3): - dependencies: - ansis: 4.2.0 - cac: 6.7.14 - defu: 6.1.4 - empathic: 2.0.0 - hookable: 6.0.1 - import-without-cache: 0.2.5 - obug: 2.1.1 - picomatch: 4.0.3 - rolldown: 1.0.0-rc.3 - rolldown-plugin-dts: 0.22.1(rolldown@1.0.0-rc.3)(typescript@5.9.3) - semver: 7.7.4 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - unconfig-core: 7.5.0 - unrun: 0.2.27 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@ts-macro/tsc' - - '@typescript/native-preview' - - oxc-resolver - - synckit - - vue-tsc + tinypool@2.1.0: {} - tslib@2.8.1: - optional: true + tinyrainbow@3.0.3: {} - tstyche@5.0.2(typescript@5.9.3): + tstyche@6.2.0(typescript@5.9.3): optionalDependencies: typescript: 5.9.3 typescript@5.9.3: {} - unconfig-core@7.5.0: - dependencies: - '@quansync/fs': 1.0.0 - quansync: 1.0.0 - undici-types@7.16.0: {} - unrun@0.2.27: - dependencies: - rolldown: 1.0.0-rc.3 - - util-deprecate@1.0.2: {} - uuid@11.1.0: {} vite@7.3.1(@types/node@25.2.3): @@ -3525,12 +2606,6 @@ snapshots: - tsx - yaml - walkdir@0.4.1: {} - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 diff --git a/src/adapter.ts b/src/adapter.ts index 09cecb1..f050da0 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -1,7 +1,7 @@ -// biome-ignore-all lint/correctness/noUnusedVariables: this file uses interface augmentation -// biome-ignore-all lint/suspicious/noEmptyInterface: this file uses interface augmentation +// oxlint-disable no-unused-vars + import type { ColumnBuilder, ColumnBuilderBase, Table } from "drizzle-orm"; -import type * as S from "effect/Schema"; +import type { Schema } from "effect/Schema"; import type { Compiler } from "@amar4enko/effect-schema-compiler"; import { NAMESPACE } from "./const"; import type { CompilerContext } from "./compiler"; @@ -61,7 +61,7 @@ export namespace Adapter { }): Table; } - export interface ColumnForSchema {} + export interface ColumnForSchema {} export interface BuildTableRegistry< Name extends string, @@ -72,7 +72,7 @@ export namespace Adapter { export interface ExtraConfigType {} - export type AdapterURI = keyof ColumnForSchema & + export type AdapterURI = keyof ColumnForSchema & keyof BuildTableRegistry< string, Record, @@ -90,6 +90,6 @@ export namespace Adapter { export type DefaultColumnBuilder< Adapter extends AdapterURI, - S extends S.Schema.Any, + S extends Schema.Any, > = ColumnForSchema[Adapter]; } diff --git a/src/annotations.ts b/src/annotations.ts index db9a5c0..5b9713e 100644 --- a/src/annotations.ts +++ b/src/annotations.ts @@ -1,114 +1,82 @@ -import type { Field } from "@effect/experimental/VariantSchema"; -import type { ColumnBuilderBase, Table } from "drizzle-orm"; -import { SchemaAST } from "effect"; +import type { ColumnBuilderBase, Table as DrizzleTable } from "drizzle-orm"; import type { Option } from "effect/Option"; -import { NAMESPACE } from "./const"; import type { Drizzle } from "./types"; - -/** - * Annotation / Type tag value for schema with explicitely - * added Drizzle table configuration factory. - */ -export const WithTableFactory: unique symbol = Symbol.for( - `${NAMESPACE}/WithTableFactory`, -); - -/** - * Annotation / Type tag value for field with explicitely - * added Drizzle column configuration. - */ -export const WithFieldConfig: unique symbol = Symbol.for( - `${NAMESPACE}/WithFieldConfig`, -); - +import { SchemaAST } from "effect"; +import { NAMESPACE } from "./const"; /** * Annotation / Type tag value for field with field type only */ -export const WithFieldType: unique symbol = Symbol.for( - `${NAMESPACE}/WithFieldType`, +export const ColumnId: unique symbol = Symbol.for( + `${NAMESPACE}/Column`, ); +export const TableId: unique symbol = Symbol.for( + `${NAMESPACE}/Table`, +); /** * Annotation / Type tag value to store table name. */ -export const WithTableName: unique symbol = Symbol.for( - `${NAMESPACE}/WithTableName`, +export const TableNameId: unique symbol = Symbol.for( + `${NAMESPACE}/TableName`, ); /** * Annotation / Type tag value to store extra configuration factory. */ -export const WithExtraConfig: unique symbol = Symbol.for( - `${NAMESPACE}/WithExtraConfig`, +export const ExtraConfigId: unique symbol = Symbol.for( + `${NAMESPACE}/ExtraConfig`, ); -export type WithTableFactory = typeof WithTableFactory; -export type WithFieldConfig = typeof WithFieldConfig; -export type WithFieldType = typeof WithFieldType; -export type WithTableName = typeof WithTableName; -export type WithExtraConfig = typeof WithExtraConfig; +export type ColumnId = typeof ColumnId; +export type TableId = typeof TableId; +export type TableNameId = typeof TableNameId; +export type ExtraConfigId = typeof ExtraConfigId; export namespace Annotations { - export interface AnyWithAnnotation { - readonly "~TypeId": TypeId; - readonly "~Config": Config; + + export type PlaceAnnotation = { + [key in keyof A as key extends ColumnId ? never : key]: A[key] } /** * Type group for annotated schemas */ - export type WithAnnotation = A & { - readonly "~TypeId": TypeId; - readonly "~Config": Config; - }; - - export type WithFieldAnnotation = WithAnnotation< - WithFieldConfig, - A, - Config - >; + export type Column = A & { + readonly [ColumnId]?: Config + } - export type WithTableFactoryAnnotation = WithAnnotation< - WithTableFactory, - A, - Config - >; + export type Table = A & { + readonly [TableId]?: Config + }; - export type WithTableNameAnnotation = WithAnnotation< - WithTableName, - A, - Config - >; + export type TableName = A & { + readonly [TableNameId]?: Config + }; - export type WithExtraConfigAnnotation = WithAnnotation< - WithExtraConfig, - A, - Config - >; + export type ExtraConfig = A & { + readonly [ExtraConfigId]?: Config + }; - export type WithFieldTypeAnnotation = WithAnnotation< - WithFieldType, - A, - T - >; - export type TransformColumnType = ( column: ColumnBuilderBase, - table: (s: Drizzle.ModelSchemaLike) => Table, + table: (s: Drizzle.ModelSchemaLike) => DrizzleTable, ) => ColumnBuilderBase; - - export type AnnotatedField = - | Field.Any - | WithFieldAnnotation; + + export type ColumnTypeOrTransform = ColumnBuilderBase | TransformColumnType; } -export const getFieldConfigAnnotation: ( +export const getColumnAnnotation: ( ast: SchemaAST.AST, ) => Option = SchemaAST.getAnnotation< Annotations.TransformColumnType ->(WithFieldConfig); +>(ColumnId); + +export const getTableAnnotation: ( + ast: SchemaAST.AST, +) => Option = SchemaAST.getAnnotation(TableId); + export const getTableNameAnnotation: (ast: SchemaAST.AST) => Option = - SchemaAST.getAnnotation(WithTableName); + SchemaAST.getAnnotation(TableNameId); diff --git a/src/compiler.ts b/src/compiler.ts index 725dc4c..a8cd54d 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -1,12 +1,21 @@ +// oxlint-disable typescript/no-unsafe-assignment +// oxlint-disable typescript/no-unsafe-return +// oxlint-disable typescript/no-explicit-any +// oxlint-disable typescript/no-unsafe-call +// oxlint-disable typescript/no-unsafe-member-access +// oxlint-disable typescript/no-unsafe-argument +// oxlint-disable typescript/restrict-template-expressions +// oxlint-disable typescript/no-base-to-string +// oxlint-disable max-lines-per-function import { Compiler } from "@amar4enko/effect-schema-compiler"; import type { ColumnBuilderBase, Table } from "drizzle-orm"; import { Effect, flow, Option, Runtime, SchemaAST, Tuple } from "effect"; import type { Adapter } from "./adapter"; import type { Drizzle } from "./types"; import { - getFieldConfigAnnotation, + getColumnAnnotation, getTableNameAnnotation, - WithExtraConfig, + ExtraConfigId, } from "./annotations"; const isTypeLiteral = Option.liftPredicate(SchemaAST.isTypeLiteral); @@ -65,10 +74,13 @@ export const makeCompiler = < ast: SchemaAST.AST, ctx: CompilerContext, ): Option.Option<(column: ColumnBuilderBase) => ColumnBuilderBase> => - getFieldConfigAnnotation(ast).pipe( - Option.map((transform) => { - return (col: ColumnBuilderBase) => transform(col, ctx.compileModel); - }), + getColumnAnnotation(ast).pipe( + Option.map((value) => { + return typeof value === "function" + ? (col: ColumnBuilderBase) => value(col, ctx.compileModel) + : () => value as ColumnBuilderBase; + + }) ); let compiler = Compiler.make().rule( @@ -104,18 +116,35 @@ AST tag: ${ast._tag}`, (ast) => Option.some(ast), (ast, go, context) => Effect.gen(function* () { - const ctx = yield* context; - if (ctx.state.get("skipColumnTransformationRule")) { + const ctx = yield* context; + if (ctx.state.get("skipColumnTransformationRule") === ast) { return yield* Compiler.skip; } const columnTransformation = getFieldColumnTransformation(ast, ctx); - const newCtx = CompilerContext.withStateValue("skipColumnTransformationRule", true)(ctx); + const newCtx = CompilerContext.withStateValue("skipColumnTransformationRule", ast)(ctx); if (Option.isSome(columnTransformation)) { const col = yield* go(ast, newCtx); - return columnTransformation.value(col) as ColumnBuilderType; + const stored = columnTransformation.value(col) as ColumnBuilderType; + + if ((col as any).config.notNull) { + return (stored as any).notNull(); + } else { + return Object.assign( + stored, + { + config: Object.assign( + {}, + (stored as any).config, + { notNull: false } + ) + } + ) + } + + return stored; } return yield* go(ast, newCtx); @@ -181,7 +210,7 @@ AST tag: ${ast._tag}`, const extraConfig = SchemaAST.getAnnotation( result.ast, - WithExtraConfig, + ExtraConfigId, ); const table = config.defaultTable({ diff --git a/src/const.ts b/src/const.ts index 273e4fd..fbf4c85 100644 --- a/src/const.ts +++ b/src/const.ts @@ -1 +1 @@ -export const NAMESPACE = "@emergente-labs/effect-sql-model"; +export const NAMESPACE = "@sellhub/sql-model-drizzle"; diff --git a/src/model.ts b/src/model.ts index 37c7de4..c5c52d1 100644 --- a/src/model.ts +++ b/src/model.ts @@ -1,33 +1,59 @@ -import * as S from "effect/Schema"; +// oxlint-disable typescript/no-unsafe-argument +// oxlint-disable typescript/no-explicit-any +// oxlint-disable typescript/unified-signatures +// oxlint-disable max-lines-per-function +import { type propertySignature, type Schema, annotations, isPropertySignature } from "effect/Schema"; import type { Field } from "@effect/experimental/VariantSchema"; import type { BuildExtraConfigColumns, ColumnBuilderBase, Dialect, - Table, + Table as DrizzleTable, } from "drizzle-orm"; import { fieldEvolve } from "@effect/sql/Model"; -import { Schema } from "effect"; // These imports are required for TypeScript to emit proper type declarations. // They are used in the return types of `makeCompiler`. -import type { Channel, Effect, Sink, Stream } from "effect"; +import { Option, type Channel, type Effect, type Sink, type Stream } from "effect"; import type { NodeInspectSymbol } from "effect/Inspectable"; import { makeCompiler } from "./compiler"; +import { getColumnAnnotation, +type Annotations } from "./annotations"; import { - WithExtraConfig, - WithFieldConfig, - WithTableFactory, - type Annotations, + ColumnId, + ExtraConfigId, + TableId } from "./annotations"; import type { Adapter } from "./adapter"; import type { Drizzle } from "./types"; - export type { Drizzle } from "./types"; // Re-export Effect types used in compiler return type for declaration emit export type { Channel, Effect, Sink, Stream }; export type { NodeInspectSymbol }; +export type { Schema } + +export type Exactly = T & Record, never>; + +export type DrizzleTypeSchema = + | Field + | Schema.Any + | propertySignature + +export interface DrizzleTypeFn { + ( + type: DrizzleType + ): (s: Annotations.Column) => Annotations.Column; + ( + transform: ( + column: C extends ColumnBuilderBase ? C : Drizzle.ColumnBuilderForField, + table: (s: S) => Drizzle.TableForSchema, + ) => DrizzleType, + ): (s: Annotations.Column) => Annotations.Column; + + +} + export const schemaDrizzle = < AdapterId extends Adapter.AdapterURI, ColumnBuilderType extends ColumnBuilderBase, @@ -35,12 +61,11 @@ export const schemaDrizzle = < config: Adapter.Config, ) => { const table = - ( + ( transform: (columns: Drizzle.ColumnsForSchema, name: Name) => T, ) => (s: S) => - s.pipe(S.annotations({ [WithTableFactory]: transform })) as Annotations.WithAnnotation< - WithTableFactory, + s.pipe(annotations({ [TableId]: transform })) as Annotations.Table< S, T >; @@ -56,51 +81,58 @@ export const schemaDrizzle = < ) => Adapter.ExtraConfigType[AdapterId], ) => (s: S) => - s.pipe(S.annotations({ [WithExtraConfig]: makeExtraConfig })) as S; - - const field = - < - S extends - | Field - | S.Schema.Any - | S.propertySignature - | Annotations.WithFieldAnnotation< - | Field - | S.Schema.Any - | S.propertySignature, - unknown - >, - C, - >( - transform: ( - column: Drizzle.ColumnBuilderForField, - table: (s: S) => Drizzle.TableForSchema, - ) => C, - ) => - (s: S) => { - if ("schemas" in s) { - return fieldEvolve({ - select: (s: S.Schema.Any) => s.pipe(S.annotations({ [WithFieldConfig]: transform })), - })(s) as unknown as Annotations.WithFieldAnnotation; - } - - /** - * Add support for property signatures - */ - if (Schema.isPropertySignature(s)) { - throw new Error("Not implemented yet"); - } - - return s.pipe( - S.annotations({ [WithFieldConfig]: transform }), - ) as unknown as Annotations.WithFieldAnnotation; - }; + s.pipe(annotations({ [ExtraConfigId]: makeExtraConfig })) as S; + + + const drizzleType: DrizzleTypeFn = (arg) => (s) => { + const normalizedArg = typeof arg === "function" + ? arg + : () => arg; + + const appendAnnotation = (s: Schema.Any) => { + const newAnnotation = getColumnAnnotation(s.ast).pipe( + Option.match({ + onNone: () => normalizedArg, + onSome: (prev) => + ( + column: ColumnBuilderBase, + table: (s: Drizzle.ModelSchemaLike) => DrizzleTable, + ) => { + return normalizedArg( + prev(column, table) as any, + table as any, + ) + } + }) + ) + + return s.pipe(annotations({ [ColumnId]: newAnnotation })) + } + + if ("schemas" in s) { + return fieldEvolve({ + select: appendAnnotation, + })(s); + } + + /** + * Add support for property signatures + */ + if (isPropertySignature(s)) { + throw new Error("Not implemented yet"); + } + + return appendAnnotation(s) + } + + const field = drizzleType; const { compileModel, compileColumnFromAst } = makeCompiler(config); return { table, field, + drizzleType, extraConfig, compileModel, compileColumnFromAst, diff --git a/src/pg/index.ts b/src/pg/index.ts index b0f9fb1..e07c911 100644 --- a/src/pg/index.ts +++ b/src/pg/index.ts @@ -1,5 +1,6 @@ +// oxlint-disable max-lines-per-function import type * as S from "effect/Schema"; -import * as pg from "drizzle-orm/pg-core"; +import type * as pg from "drizzle-orm/pg-core"; import type { BuildColumns, ColumnBuilderBase, @@ -177,11 +178,9 @@ export const Config = makeConfig< )(ctx); const col = yield* go(ast, newCtx); - if (!col.nullable) { return (col as PgColumnBuilder).notNull(); } - return col; }), ); diff --git a/src/tests/annotations.tst.ts b/src/tests/annotations.tst.ts index 25f75c9..1b5cdbe 100644 --- a/src/tests/annotations.tst.ts +++ b/src/tests/annotations.tst.ts @@ -1,8 +1,9 @@ import { Schema } from "effect"; import { describe, expect, test } from "tstyche"; import { type PgUUIDBuilderInitial, uuid } from "drizzle-orm/pg-core"; -import { Config } from "../pg"; -import { schemaDrizzle } from "../model"; +import { Config } from "../pg/index.js"; +import { schemaDrizzle } from "../model.js"; +import type { ColumnId } from "../annotations.js"; const { field } = schemaDrizzle(Config); @@ -10,6 +11,6 @@ describe("field annotation", () => { test("it appends extra information to the type", () => { const f = Schema.UUID.pipe(field(() => uuid())); - expect<(typeof f)["~Config"]>().type.toBe>(); + expect<(typeof f)[ColumnId]>().type.toBe | undefined>(); }); }); diff --git a/src/tests/makeBaseModel.test.ts b/src/tests/makeBaseModel.test.ts index c5e4c9c..7925854 100644 --- a/src/tests/makeBaseModel.test.ts +++ b/src/tests/makeBaseModel.test.ts @@ -1,13 +1,13 @@ import { describe, expect, test } from "@effect/vitest"; import * as S from "effect/Schema"; import { makeBaseModel } from "../makeBaseModel"; -import { WithTableName } from "../annotations"; +import { TableNameId } from "../annotations"; describe("makeBaseModel", () => { test("runtime behavior matches type behavior", () => { const BaseModel = makeBaseModel((args: { tableName: string }) => { const annotations = { - [WithTableName]: args.tableName, + [TableNameId]: args.tableName, }; // prevent unused variable error void annotations; diff --git a/src/tests/makeBaseModel.tst.ts b/src/tests/makeBaseModel.tst.ts index 3218542..211827b 100644 --- a/src/tests/makeBaseModel.tst.ts +++ b/src/tests/makeBaseModel.tst.ts @@ -1,7 +1,8 @@ import { describe, expect, test } from "tstyche"; import { Schema as S } from "effect"; -import { makeBaseModel, ResultingFields, VariantFields } from "../makeBaseModel"; -import { WithTableName } from "../annotations"; +import type { ResultingFields, VariantFields } from "../makeBaseModel"; +import { makeBaseModel } from "../makeBaseModel"; +import { TableNameId } from "../annotations"; describe("makeBaseModel", () => { test("correctly infers fields from base model variant choice", () => { @@ -16,7 +17,7 @@ describe("makeBaseModel", () => { const BaseModel = makeBaseModel((args: { tableName: string }) => { const annotations = { - [WithTableName]: args.tableName + [TableNameId]: args.tableName } return { withId: { fields: baseFields, annotations }, diff --git a/src/tests/pg/__snapshots__/full.spec.ts.snap b/src/tests/pg/__snapshots__/full.spec.ts.snap new file mode 100644 index 0000000..7bc1820 --- /dev/null +++ b/src/tests/pg/__snapshots__/full.spec.ts.snap @@ -0,0 +1,262 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`sql-model-drizzle > Compiles real-world example 1`] = ` +"[  PgTable { + id: + PgUUID { + name: 'id', + keyAsName: true, + primary: true, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'User_id_unique', + uniqueType: undefined, + dataType: 'string', + columnType: 'PgUUID', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *1] }, + name: + PgText { + name: 'name', + keyAsName: true, + primary: false, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'User_name_unique', + uniqueType: undefined, + dataType: 'string', + columnType: 'PgText', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *1] }, + createdAt: + PgTimestamp { + name: 'createdAt', + keyAsName: true, + primary: false, + notNull: true, + default: [SQL], + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: true, + isUnique: false, + uniqueName: 'User_createdAt_unique', + uniqueType: undefined, + dataType: 'date', + columnType: 'PgTimestamp', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *1], + withTimezone: false, + precision: undefined, + mapFromDriverValue: [Function: mapFromDriverValue], + mapToDriverValue: [Function: mapToDriverValue] }, + updatedAt: + PgTimestamp { + name: 'updatedAt', + keyAsName: true, + primary: false, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'User_updatedAt_unique', + uniqueType: undefined, + dataType: 'date', + columnType: 'PgTimestamp', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *1], + withTimezone: false, + precision: undefined, + mapFromDriverValue: [Function: mapFromDriverValue], + mapToDriverValue: [Function: mapToDriverValue] }, + tags: + PgArray { + name: 'tags', + keyAsName: true, + primary: false, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'User_tags_unique', + uniqueType: undefined, + dataType: 'array', + columnType: 'PgArray', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *1], + size: undefined, + baseColumn: [PgText], + range: undefined }, + password: + PgText { + name: 'password', + keyAsName: true, + primary: false, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'User_password_unique', + uniqueType: undefined, + dataType: 'string', + columnType: 'PgText', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *1] }, + enableRLS: [Function: enableRLS], + Symbol(drizzle:Name): 'User', + Symbol(drizzle:OriginalName): 'User', + Symbol(drizzle:Schema): undefined, + Symbol(drizzle:Columns): + { id: [PgUUID], + name: [PgText], + createdAt: [PgTimestamp], + updatedAt: [PgTimestamp], + tags: [PgArray], + password: [PgText] }, + Symbol(drizzle:ExtraConfigColumns): + { id: [ExtraConfigColumn], + name: [ExtraConfigColumn], + createdAt: [ExtraConfigColumn], + updatedAt: [ExtraConfigColumn], + tags: [ExtraConfigColumn], + password: [ExtraConfigColumn] }, + Symbol(drizzle:BaseName): 'User', + Symbol(drizzle:IsAlias): false, + Symbol(drizzle:IsDrizzleTable): true, + Symbol(drizzle:ExtraConfigBuilder): undefined, + Symbol(drizzle:PgInlineForeignKeys): [], + Symbol(drizzle:EnableRLS): false }, +  PgTable { + id: + PgUUID { + name: 'id', + keyAsName: true, + primary: true, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'User_id_unique', + uniqueType: undefined, + dataType: 'string', + columnType: 'PgUUID', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *2] }, + userId: + PgUUID { + name: 'id', + keyAsName: true, + primary: true, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'User_id_unique', + uniqueType: undefined, + dataType: 'string', + columnType: 'PgUUID', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *2] }, + amount: + PgDoublePrecision { + name: 'amount', + keyAsName: true, + primary: false, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'Order_amount_unique', + uniqueType: undefined, + dataType: 'number', + columnType: 'PgDoublePrecision', + enumValues: undefined, + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *2] }, + status: + PgEnumColumn { + name: 'status', + keyAsName: true, + primary: false, + notNull: true, + default: undefined, + defaultFn: undefined, + onUpdateFn: undefined, + hasDefault: false, + isUnique: false, + uniqueName: 'Order_status_unique', + uniqueType: undefined, + dataType: 'string', + columnType: 'PgEnumColumn', + enumValues: [Array], + generated: undefined, + generatedIdentity: undefined, + config: [Object], + table: [Circular *2], + enum: [Function] }, + enableRLS: [Function: enableRLS], + Symbol(drizzle:Name): 'Order', + Symbol(drizzle:OriginalName): 'Order', + Symbol(drizzle:Schema): undefined, + Symbol(drizzle:Columns): + { id: [PgUUID], + userId: [PgUUID], + amount: [PgDoublePrecision], + status: [PgEnumColumn] }, + Symbol(drizzle:ExtraConfigColumns): + { id: [ExtraConfigColumn], + userId: [ExtraConfigColumn], + amount: [ExtraConfigColumn], + status: [ExtraConfigColumn] }, + Symbol(drizzle:BaseName): 'Order', + Symbol(drizzle:IsAlias): false, + Symbol(drizzle:IsDrizzleTable): true, + Symbol(drizzle:ExtraConfigBuilder): undefined, + Symbol(drizzle:PgInlineForeignKeys): [ [ForeignKey], [ForeignKey] ], + Symbol(drizzle:EnableRLS): false } ]" +`; diff --git a/src/tests/pg/__snapshots__/test.spec.ts.snap b/src/tests/pg/__snapshots__/test.spec.ts.snap new file mode 100644 index 0000000..f4b164d --- /dev/null +++ b/src/tests/pg/__snapshots__/test.spec.ts.snap @@ -0,0 +1,1401 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`sql-model-drizzle > Compiles real-world example 1`] = ` +[ + PgTable { + "createdAt": PgTimestamp { + "columnType": "PgTimestamp", + "config": { + "columnType": "PgTimestamp", + "dataType": "date", + "default": SQL { + "decoder": { + "mapFromDriverValue": [Function], + }, + "queryChunks": [ + StringChunk { + "value": [ + "now()", + ], + }, + ], + "shouldInlineParams": false, + "usedTables": [], + }, + "generated": undefined, + "hasDefault": true, + "isUnique": false, + "keyAsName": true, + "name": "createdAt", + "notNull": true, + "precision": undefined, + "primaryKey": false, + "uniqueName": "User_createdAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + "dataType": "date", + "default": SQL { + "decoder": { + "mapFromDriverValue": [Function], + }, + "queryChunks": [ + StringChunk { + "value": [ + "now()", + ], + }, + ], + "shouldInlineParams": false, + "usedTables": [], + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": true, + "isUnique": false, + "keyAsName": true, + "mapFromDriverValue": [Function], + "mapToDriverValue": [Function], + "name": "createdAt", + "notNull": true, + "onUpdateFn": undefined, + "precision": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_createdAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + "enableRLS": [Function], + "id": PgUUID { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "name": PgText { + "columnType": "PgText", + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "name", + "notNull": true, + "primaryKey": false, + "uniqueName": "User_name_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "name", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_name_unique", + "uniqueType": undefined, + }, + "password": PgText { + "columnType": "PgText", + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "password", + "notNull": true, + "primaryKey": false, + "uniqueName": "User_password_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "password", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_password_unique", + "uniqueType": undefined, + }, + "tags": PgArray { + "baseColumn": PgText { + "columnType": "PgText", + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "", + "notNull": false, + "primaryKey": false, + "uniqueName": "User__unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "", + "notNull": false, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User__unique", + "uniqueType": undefined, + }, + "columnType": "PgArray", + "config": { + "baseBuilder": PgTextBuilder { + "$default": [Function], + "$onUpdate": [Function], + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "", + "notNull": false, + "primaryKey": false, + "uniqueName": "User__unique", + "uniqueType": undefined, + }, + "foreignKeyConfigs": [], + }, + "columnType": "PgArray", + "dataType": "array", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "tags", + "notNull": true, + "primaryKey": false, + "size": undefined, + "uniqueName": "User_tags_unique", + "uniqueType": undefined, + }, + "dataType": "array", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "tags", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "range": undefined, + "size": undefined, + "table": [Circular], + "uniqueName": "User_tags_unique", + "uniqueType": undefined, + }, + "updatedAt": PgTimestamp { + "columnType": "PgTimestamp", + "config": { + "columnType": "PgTimestamp", + "dataType": "date", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "updatedAt", + "notNull": true, + "precision": undefined, + "primaryKey": false, + "uniqueName": "User_updatedAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + "dataType": "date", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "mapFromDriverValue": [Function], + "mapToDriverValue": [Function], + "name": "updatedAt", + "notNull": true, + "onUpdateFn": undefined, + "precision": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_updatedAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + Symbol(drizzle:Name): "User", + Symbol(drizzle:OriginalName): "User", + Symbol(drizzle:Schema): undefined, + Symbol(drizzle:Columns): { + "createdAt": PgTimestamp { + "columnType": "PgTimestamp", + "config": { + "columnType": "PgTimestamp", + "dataType": "date", + "default": SQL { + "decoder": { + "mapFromDriverValue": [Function], + }, + "queryChunks": [ + StringChunk { + "value": [ + "now()", + ], + }, + ], + "shouldInlineParams": false, + "usedTables": [], + }, + "generated": undefined, + "hasDefault": true, + "isUnique": false, + "keyAsName": true, + "name": "createdAt", + "notNull": true, + "precision": undefined, + "primaryKey": false, + "uniqueName": "User_createdAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + "dataType": "date", + "default": SQL { + "decoder": { + "mapFromDriverValue": [Function], + }, + "queryChunks": [ + StringChunk { + "value": [ + "now()", + ], + }, + ], + "shouldInlineParams": false, + "usedTables": [], + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": true, + "isUnique": false, + "keyAsName": true, + "mapFromDriverValue": [Function], + "mapToDriverValue": [Function], + "name": "createdAt", + "notNull": true, + "onUpdateFn": undefined, + "precision": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_createdAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + "id": PgUUID { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "name": PgText { + "columnType": "PgText", + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "name", + "notNull": true, + "primaryKey": false, + "uniqueName": "User_name_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "name", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_name_unique", + "uniqueType": undefined, + }, + "password": PgText { + "columnType": "PgText", + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "password", + "notNull": true, + "primaryKey": false, + "uniqueName": "User_password_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "password", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_password_unique", + "uniqueType": undefined, + }, + "tags": PgArray { + "baseColumn": PgText { + "columnType": "PgText", + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "", + "notNull": false, + "primaryKey": false, + "uniqueName": "User__unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "", + "notNull": false, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User__unique", + "uniqueType": undefined, + }, + "columnType": "PgArray", + "config": { + "baseBuilder": PgTextBuilder { + "$default": [Function], + "$onUpdate": [Function], + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "", + "notNull": false, + "primaryKey": false, + "uniqueName": "User__unique", + "uniqueType": undefined, + }, + "foreignKeyConfigs": [], + }, + "columnType": "PgArray", + "dataType": "array", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "tags", + "notNull": true, + "primaryKey": false, + "size": undefined, + "uniqueName": "User_tags_unique", + "uniqueType": undefined, + }, + "dataType": "array", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "tags", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "range": undefined, + "size": undefined, + "table": [Circular], + "uniqueName": "User_tags_unique", + "uniqueType": undefined, + }, + "updatedAt": PgTimestamp { + "columnType": "PgTimestamp", + "config": { + "columnType": "PgTimestamp", + "dataType": "date", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "updatedAt", + "notNull": true, + "precision": undefined, + "primaryKey": false, + "uniqueName": "User_updatedAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + "dataType": "date", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "mapFromDriverValue": [Function], + "mapToDriverValue": [Function], + "name": "updatedAt", + "notNull": true, + "onUpdateFn": undefined, + "precision": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_updatedAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + }, + Symbol(drizzle:ExtraConfigColumns): { + "createdAt": ExtraConfigColumn { + "columnType": "PgTimestamp", + "config": { + "columnType": "PgTimestamp", + "dataType": "date", + "default": SQL { + "decoder": { + "mapFromDriverValue": [Function], + }, + "queryChunks": [ + StringChunk { + "value": [ + "now()", + ], + }, + ], + "shouldInlineParams": false, + "usedTables": [], + }, + "generated": undefined, + "hasDefault": true, + "isUnique": false, + "keyAsName": true, + "name": "createdAt", + "notNull": true, + "precision": undefined, + "primaryKey": false, + "uniqueName": "User_createdAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + "dataType": "date", + "default": SQL { + "decoder": { + "mapFromDriverValue": [Function], + }, + "queryChunks": [ + StringChunk { + "value": [ + "now()", + ], + }, + ], + "shouldInlineParams": false, + "usedTables": [], + }, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": true, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "createdAt", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_createdAt_unique", + "uniqueType": undefined, + }, + "id": ExtraConfigColumn { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "name": ExtraConfigColumn { + "columnType": "PgText", + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "name", + "notNull": true, + "primaryKey": false, + "uniqueName": "User_name_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "name", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_name_unique", + "uniqueType": undefined, + }, + "password": ExtraConfigColumn { + "columnType": "PgText", + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "password", + "notNull": true, + "primaryKey": false, + "uniqueName": "User_password_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "password", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_password_unique", + "uniqueType": undefined, + }, + "tags": ExtraConfigColumn { + "columnType": "PgArray", + "config": { + "baseBuilder": PgTextBuilder { + "$default": [Function], + "$onUpdate": [Function], + "config": { + "columnType": "PgText", + "dataType": "string", + "default": undefined, + "enumValues": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "", + "notNull": false, + "primaryKey": false, + "uniqueName": "User__unique", + "uniqueType": undefined, + }, + "foreignKeyConfigs": [], + }, + "columnType": "PgArray", + "dataType": "array", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "tags", + "notNull": true, + "primaryKey": false, + "size": undefined, + "uniqueName": "User_tags_unique", + "uniqueType": undefined, + }, + "dataType": "array", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "tags", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_tags_unique", + "uniqueType": undefined, + }, + "updatedAt": ExtraConfigColumn { + "columnType": "PgTimestamp", + "config": { + "columnType": "PgTimestamp", + "dataType": "date", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "updatedAt", + "notNull": true, + "precision": undefined, + "primaryKey": false, + "uniqueName": "User_updatedAt_unique", + "uniqueType": undefined, + "withTimezone": false, + }, + "dataType": "date", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "updatedAt", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "User_updatedAt_unique", + "uniqueType": undefined, + }, + }, + Symbol(drizzle:BaseName): "User", + Symbol(drizzle:IsAlias): false, + Symbol(drizzle:IsDrizzleTable): true, + Symbol(drizzle:ExtraConfigBuilder): undefined, + Symbol(drizzle:PgInlineForeignKeys): [], + Symbol(drizzle:EnableRLS): false, + }, + PgTable { + "amount": PgDoublePrecision { + "columnType": "PgDoublePrecision", + "config": { + "columnType": "PgDoublePrecision", + "dataType": "number", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "amount", + "notNull": true, + "primaryKey": false, + "uniqueName": "Order_amount_unique", + "uniqueType": undefined, + }, + "dataType": "number", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "amount", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "Order_amount_unique", + "uniqueType": undefined, + }, + "enableRLS": [Function], + "id": PgUUID { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "status": PgEnumColumn { + "columnType": "PgEnumColumn", + "config": { + "columnType": "PgEnumColumn", + "dataType": "string", + "default": undefined, + "enum": [Function], + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "status", + "notNull": true, + "primaryKey": false, + "uniqueName": "Order_status_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enum": [Function], + "enumValues": [ + "pending", + "completed", + "canceled", + ], + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "status", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "Order_status_unique", + "uniqueType": undefined, + }, + "userId": PgUUID { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + Symbol(drizzle:Name): "Order", + Symbol(drizzle:OriginalName): "Order", + Symbol(drizzle:Schema): undefined, + Symbol(drizzle:Columns): { + "amount": PgDoublePrecision { + "columnType": "PgDoublePrecision", + "config": { + "columnType": "PgDoublePrecision", + "dataType": "number", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "amount", + "notNull": true, + "primaryKey": false, + "uniqueName": "Order_amount_unique", + "uniqueType": undefined, + }, + "dataType": "number", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "amount", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "Order_amount_unique", + "uniqueType": undefined, + }, + "id": PgUUID { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "status": PgEnumColumn { + "columnType": "PgEnumColumn", + "config": { + "columnType": "PgEnumColumn", + "dataType": "string", + "default": undefined, + "enum": [Function], + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "status", + "notNull": true, + "primaryKey": false, + "uniqueName": "Order_status_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enum": [Function], + "enumValues": [ + "pending", + "completed", + "canceled", + ], + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "status", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "Order_status_unique", + "uniqueType": undefined, + }, + "userId": PgUUID { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + }, + Symbol(drizzle:ExtraConfigColumns): { + "amount": ExtraConfigColumn { + "columnType": "PgDoublePrecision", + "config": { + "columnType": "PgDoublePrecision", + "dataType": "number", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "amount", + "notNull": true, + "primaryKey": false, + "uniqueName": "Order_amount_unique", + "uniqueType": undefined, + }, + "dataType": "number", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "amount", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "Order_amount_unique", + "uniqueType": undefined, + }, + "id": ExtraConfigColumn { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "status": ExtraConfigColumn { + "columnType": "PgEnumColumn", + "config": { + "columnType": "PgEnumColumn", + "dataType": "string", + "default": undefined, + "enum": [Function], + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "status", + "notNull": true, + "primaryKey": false, + "uniqueName": "Order_status_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "status", + "notNull": true, + "onUpdateFn": undefined, + "primary": false, + "table": [Circular], + "uniqueName": "Order_status_unique", + "uniqueType": undefined, + }, + "userId": ExtraConfigColumn { + "columnType": "PgUUID", + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "primaryKey": true, + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + "dataType": "string", + "default": undefined, + "defaultConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "defaultFn": undefined, + "enumValues": undefined, + "generated": undefined, + "generatedIdentity": undefined, + "hasDefault": false, + "indexConfig": { + "nulls": "last", + "opClass": undefined, + "order": "asc", + }, + "isUnique": false, + "keyAsName": true, + "name": "id", + "notNull": true, + "onUpdateFn": undefined, + "primary": true, + "table": [Circular], + "uniqueName": "User_id_unique", + "uniqueType": undefined, + }, + }, + Symbol(drizzle:BaseName): "Order", + Symbol(drizzle:IsAlias): false, + Symbol(drizzle:IsDrizzleTable): true, + Symbol(drizzle:ExtraConfigBuilder): undefined, + Symbol(drizzle:PgInlineForeignKeys): [ + ForeignKey { + "onDelete": "no action", + "onUpdate": "no action", + "reference": [Function], + "table": [Circular], + }, + ForeignKey { + "onDelete": "no action", + "onUpdate": "no action", + "reference": [Function], + "table": [Circular], + }, + ], + Symbol(drizzle:EnableRLS): false, + }, +] +`; diff --git a/src/tests/pg/compiler.spec.ts b/src/tests/pg/compiler.spec.ts index dae27da..6e42c42 100644 --- a/src/tests/pg/compiler.spec.ts +++ b/src/tests/pg/compiler.spec.ts @@ -6,15 +6,19 @@ import { json, text, timestamp, + varchar, } from "drizzle-orm/pg-core"; import { describe, it, expect } from "@effect/vitest"; import { Config } from "../../pg"; import { makeCompiler } from "../../compiler"; import { Effect } from "effect"; import { Model } from "@effect/sql"; +import { schemaDrizzle } from "../../model"; const { compileColumnFromAst } = makeCompiler(Config); +const { field } = schemaDrizzle(Config); +// oxlint-disable-next-line max-lines-per-function describe("Build primitive types", () => { it.effect("String", () => Effect.gen(function* () { @@ -72,14 +76,30 @@ describe("Build primitive types", () => { expect(result).toMatchObject(text()); }), ); - it.effect("NullOr", () => - Effect.gen(function* () { - const schema = S.NullOr(S.String); - const result = yield* compileColumnFromAst(schema.ast); + describe("NullOr", () => { + it.effect("NullOr", () => + Effect.gen(function* () { + const schema = S.NullOr(S.String); + const result = yield* compileColumnFromAst(schema.ast); - expect(result).toMatchObject(text()); - }), - ); + expect(result).toMatchObject(text()); + }) + ) + + it.effect("type-preserving NullOr", () => + Effect.gen(function* () { + const Text = S.String.pipe( + field(() => varchar({ length: 255 })) + ) + + const schema = S.NullOr(Text); + + const result = yield* compileColumnFromAst(schema.ast); + + expect(result).toMatchObject(varchar({ length: 255 })); + }) + ) + }); it.effect("NullOr DateFromSelf", () => Effect.gen(function* () { const schema = S.NullOr(S.DateFromSelf); diff --git a/src/tests/pg/fixtures.ts b/src/tests/pg/fixtures.ts index 065b0ba..a6677a9 100644 --- a/src/tests/pg/fixtures.ts +++ b/src/tests/pg/fixtures.ts @@ -1,24 +1,29 @@ +// oxlint-disable no-unused-vars // biome-ignore-all lint/style/useNamingConvention: it's internals // biome-ignore-all lint/suspicious/noExplicitAny: it's internals // biome-ignore-all lint/correctness/noUnusedImports: isolatedModules import { Model } from "@effect/sql"; -import { Schema as S } from "effect"; +import { Schema as S,Schema } from "effect"; import { text, timestamp, uuid } from "drizzle-orm/pg-core"; // @ts-ignore-error import type { Effect, Channel, Sink, Stream } from "effect"; // @ts-ignore-error import type { NodeInspectSymbol } from "effect/Inspectable"; -import { Config } from "../../pg"; -import { schemaDrizzle } from "../../model"; +import { Config } from "../../pg/index.js"; +import { schemaDrizzle } from "../../model.js"; +const { field, compileModel, compileColumnFromAst } = schemaDrizzle(Config); -const { field, compileModel } = schemaDrizzle(Config); - -export const UUID = S.UUID.pipe(field(() => uuid())); +export const UUID = Schema.UUID.pipe( + field(uuid()) +); -export const PrimaryKey = Model.Generated(UUID).pipe( - field((col) => col.primaryKey()), +export const PrimaryKey = Model.Generated( + UUID.pipe( + field((col) => col.primaryKey()), + ) ); + export const Timestamp = Model.DateTimeFromDate.pipe(field(() => timestamp())); export class User extends Model.Class("User")({ @@ -45,4 +50,4 @@ export class Order extends Model.Class("Order")({ status: OrderStatus, }) {} -export { compileModel }; +export { compileModel, field, compileColumnFromAst }; diff --git a/src/tests/pg/full.spec.ts b/src/tests/pg/full.spec.ts index fb7074b..9746f4f 100644 --- a/src/tests/pg/full.spec.ts +++ b/src/tests/pg/full.spec.ts @@ -1,6 +1,17 @@ -import { describe, it } from "@effect/vitest"; +import { describe, expect, it } from "@effect/vitest"; +import { compileModel, Order, User } from "./fixtures.js" +import { Effect } from "effect"; +import { inspect } from "node:util"; -// TODO: Fix @effect/vitest snapshot integration -describe.skip("sql-model-drizzle", () => { - it("Compiles real-world example", () => {}); +describe("sql-model-drizzle", () => { + it("Compiles real-world example", () => { + const tables = Effect.all([ + compileModel(User), + compileModel(Order) + ]).pipe( + Effect.runSync + ) + + expect(inspect(tables, { compact: true, depth: 2, colors: true })).toMatchSnapshot(); + }); }); diff --git a/src/tests/pg/test.spec.ts b/src/tests/pg/test.spec.ts new file mode 100644 index 0000000..4b6c6ce --- /dev/null +++ b/src/tests/pg/test.spec.ts @@ -0,0 +1,93 @@ +import { describe, expect, it } from "@effect/vitest"; +import { compileModel, compileColumnFromAst, field, Order, User } from "./fixtures.js" +import { Effect,Schema } from "effect"; +import { uuid } from "drizzle-orm/pg-core"; + +describe("sql-model-drizzle", () => { + describe("field composition", () => { + it("composes fields correctly #1", () => { + const UUID = Schema.String.pipe( + field(uuid()), + field((col) => col.primaryKey()), + ) + + const col = Effect.runSync(compileColumnFromAst(UUID.ast)); + expect(col).toMatchInlineSnapshot(` + PgUUIDBuilder { + "$default": [Function], + "$onUpdate": [Function], + "config": { + "columnType": "PgUUID", + "dataType": "string", + "default": undefined, + "generated": undefined, + "hasDefault": false, + "isUnique": false, + "keyAsName": true, + "name": "", + "notNull": true, + "primaryKey": true, + "uniqueName": undefined, + "uniqueType": undefined, + }, + "foreignKeyConfigs": [], + } + `) + }) + + it("composes fields correctly #2", () => { + const UUID = Schema.String.pipe( + field(uuid()), + ) + + const col = Effect.runSync(compileColumnFromAst(UUID.ast)); + + expect(col).toMatchObject({ + config: { + notNull: true, + } + }); + }) + it("composes fields correctly #3", () => { + const UUID = Schema.String.pipe( + field(uuid()), + ) + + const UUIDorNull = Schema.NullOr(UUID) + + const col = Effect.runSync(compileColumnFromAst(UUIDorNull.ast)); + + expect(col).toMatchObject({ + config: { + notNull: false, + } + }); + }) + it("force overrides notNull if using NullOr", () => { + const UUID = Schema.String.pipe( + field(uuid().notNull()), + ) + + const UUIDorNull = Schema.NullOr(UUID) + + const col = Effect.runSync(compileColumnFromAst(UUIDorNull.ast)); + + expect(col).toMatchObject({ + config: { + notNull: false, + } + }); + }) + }) + + it("Compiles real-world example", () => { + const tables = Effect.all([ + compileModel(User), + compileModel(Order) + ]).pipe( + Effect.runSync + ) + + expect(tables).toMatchSnapshot() + }); +}); diff --git a/src/tests/pg/test.tst.ts b/src/tests/pg/test.tst.ts new file mode 100644 index 0000000..4f8af81 --- /dev/null +++ b/src/tests/pg/test.tst.ts @@ -0,0 +1,28 @@ +import { describe, expect, it } from "tstyche"; +import { field } from "./fixtures.js" +import { Schema } from "effect"; +import type { PgJsonbBuilderInitial } from "drizzle-orm/pg-core"; +import { jsonb } from "drizzle-orm/pg-core"; +import type { Drizzle } from "../../types"; +import type { $Type } from "drizzle-orm"; + +describe("sql-model-drizzle", () => { + describe("jsonb", () => { + it("works properly", () => { + const Content = Schema.Struct({ + field1: Schema.String, + field2: Schema.Number, + }) + + const jsonField = Schema.NullOr(Content.pipe( + field(() => jsonb()) + )) + + type Column = Drizzle.ColumnBuilderForField<"pg", typeof jsonField> + + expect().type.toBe< + $Type, typeof Content.Type> + >() + }) + }) +}); diff --git a/src/tests/support.ts b/src/tests/support.ts index 7b91c0a..d625570 100644 --- a/src/tests/support.ts +++ b/src/tests/support.ts @@ -1,3 +1,4 @@ +// oxlint-disable typescript/consistent-type-imports import { createRequire } from "node:module"; import { PGlite } from "@electric-sql/pglite"; import { drizzle } from "drizzle-orm/pglite"; diff --git a/src/tests/types.tst.ts b/src/tests/types.tst.ts index 5131544..75a4f65 100644 --- a/src/tests/types.tst.ts +++ b/src/tests/types.tst.ts @@ -1,25 +1,63 @@ +import type { Drizzle } from "../types"; + +import "./fixtures.js"; +import { field } from "./pg/fixtures.js"; +import { type $Type } from "drizzle-orm"; +import { type PgUUIDBuilderInitial, uuid } from "drizzle-orm/pg-core"; import { Schema } from "effect"; import { describe, expect, test } from "tstyche"; -import "./fixtures"; -import type { Drizzle } from "../types"; + describe("Drizzle.ColumnBuilderForField", () => { + test("field composition", () => { + const UUID = Schema.String.pipe( + field(uuid().notNull()), + field((col) => col.primaryKey()), + ); + + type A = Drizzle.ColumnBuilderForField<"test", typeof UUID>; + + expect().type.toBeAssignableTo< + PgUUIDBuilderInitial<""> & { _: { notNull: true; isPrimaryKey: true; $type: string } } + >(); + }); + + test("NullOr typing", () => { + const UUID = Schema.String.pipe(field(uuid())); + + const NullableUUID = Schema.NullOr(UUID); + + type A = Drizzle.ColumnBuilderForField<"test", typeof NullableUUID>; + + expect().type.toBe & { _: { $type: string } }>(); + }); + test("Correctly types column builder type as Schema Encoded side", () => { const f = Schema.NumberFromString; - + type A = Drizzle.ColumnBuilderForField<"test", typeof f>; expect().type.toBeAssignableTo<{ - notNull: boolean; + $type: string; + notNull: true; }>(); }); test("Branded Schema", () => { const f = Schema.String.pipe(Schema.brand("MyBrand")); - + type A = Drizzle.ColumnBuilderForField<"test", typeof f>; expect().type.toBeAssignableTo<{ - notNull: boolean; + $type: typeof f.Type; + notNull: true; }>(); }); + + test("Generated", () => { + const f = Schema.String.pipe(Schema.brand("MyBrand"), field(uuid())); + + type A = Drizzle.ColumnBuilderForField<"test", typeof f>; + + expect().type.toBe<$Type, (typeof f)["Type"]>>(); + }); }); diff --git a/src/types.ts b/src/types.ts index f5c8221..8d108f0 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,55 +1,65 @@ -import type * as S from "effect/Schema"; +import type { brand, NullOr, OptionFromNullOr, Schema } from "effect/Schema"; import type { Field, Struct } from "@effect/experimental/VariantSchema"; -import type { $Type, ColumnBuilder, NotNull } from "drizzle-orm"; +import type { $Type, ColumnBuilder, ColumnBuilderBase, NotNull } from "drizzle-orm"; import type { - Annotations, - WithFieldConfig, - WithFieldType, - WithTableFactory, + ColumnId, + TableId, } from "./annotations"; // oxlint-disable-next-line no-unused-vars -import { type Adapter } from "./adapter"; +import { type Adapter as AdapterNs } from "./adapter"; +import type { Model } from "@effect/sql"; + +export { Schema } export namespace Drizzle { - export interface ModelSchemaLike extends S.Schema.Any { + export interface ModelSchemaLike extends Schema.Any { fields: Struct.Fields; } - export type UnionWithNull = S.OptionFromNullOr; + export type UnionWithNull = OptionFromNullOr; + + export type AsColumnBuilderBase = A extends ColumnBuilderBase ? A : never; + + // Takes care of branded types + export type SchemaToColumnType = S extends Schema.Any + ? S extends brand + ? S["Type"] + : S["Encoded"] + : never export type ColumnBuilderForField< - Adapter extends Adapter.AdapterURI, + Adapter extends AdapterNs.AdapterURI, F, - > = F extends Annotations.AnyWithAnnotation // Field already has explicit annotation attached - ? C - : F extends Annotations.AnyWithAnnotation - ? C - : // F is sql/Model field extensions - F extends Field + > = // F is under Model.Generated + F extends Model.Generated + ? ColumnBuilderForField + // F is sql/Model field extensions + : F extends Field ? // We choose default "select" variant schema or "throw" "select" extends keyof S ? ColumnBuilderForField : "Field doesn't have 'select' variant" : // Check for nullable schemas // biome-ignore lint/suspicious/noRedeclare: CLI freaks out. This type is correct. - F extends S.OptionFromNullOr | S.NullOr + F extends OptionFromNullOr | NullOr ? // For nullable schemas we must remove NotNull from the resulting column ColumnBuilderForField extends infer R ? R extends NotNull ? T : R : never - : // It's just a regular schema - F extends S.brand - ? $Type, F> - : F extends S.Schema.Any - ? $Type>, F["Encoded"]> - : F extends { from: infer FromSchema extends S.Schema.Any } - ? $Type, FromSchema["Encoded"]> + : F extends { readonly [ColumnId]?: infer C } + ? $Type, SchemaToColumnType> + : F extends brand + ? $Type>, SchemaToColumnType> + : F extends Schema.Any + ? $Type>, SchemaToColumnType> + : F extends { from: infer FromSchema extends Schema.Any } + ? $Type, SchemaToColumnType> : "Unsupported field configuration"; export type ColumnsForSchema< - Adapter extends Adapter.AdapterURI, + Adapter extends AdapterNs.AdapterURI, S extends { fields: Struct.Fields }, > = { [key in keyof S["fields"]]: ColumnBuilderForField< @@ -61,11 +71,11 @@ export namespace Drizzle { }; export type TableForSchema< - Adapter extends Adapter.AdapterURI, + Adapter extends AdapterNs.AdapterURI, S extends ModelSchemaLike, - > = S extends Annotations.AnyWithAnnotation - ? C - : Adapter.BuildTable< + > = S extends {[TableId]: infer T} + ? T + : AdapterNs.BuildTable< Adapter, string, ColumnsForSchema, diff --git a/tsdown.config.ts b/tsdown.config.ts deleted file mode 100644 index 02b35c9..0000000 --- a/tsdown.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from "tsdown"; - -export default defineConfig({ - entry: [ - "src/{adapter,annotations,compiler,const,model,predicates,support}.ts", - "src/index.ts", - "src/pg/**/*.ts", - ], - format: ["esm"], - dts: { - compilerOptions: { - isolatedModules: false, - }, - }, - sourcemap: true, - outDir: "dist", - platform: "node", - target: "es2022", - clean: false, -}); diff --git a/tstyche.config.json b/tstyche.config.json new file mode 100644 index 0000000..d9814ad --- /dev/null +++ b/tstyche.config.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://tstyche.org/schemas/config.json", + "testFileMatch": [ + "src/**/*.tst.ts" + ] +} \ No newline at end of file