@c15t/backend 0.0.1-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +11 -0
- package/.turbo/turbo-check-types.log +5 -0
- package/.turbo/turbo-fmt.log +7 -0
- package/.turbo/turbo-lint.log +6 -0
- package/.turbo/turbo-test.log +26 -0
- package/README-next.md +223 -0
- package/README.md +164 -0
- package/dist/api/call.d.ts +176 -0
- package/dist/api/call.d.ts.map +1 -0
- package/dist/api/index.d.ts +935 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/middlewares/index.d.ts +39 -0
- package/dist/api/middlewares/index.d.ts.map +1 -0
- package/dist/api/middlewares/origin-check.d.ts +82 -0
- package/dist/api/middlewares/origin-check.d.ts.map +1 -0
- package/dist/api/middlewares/validate-context.d.ts +38 -0
- package/dist/api/middlewares/validate-context.d.ts.map +1 -0
- package/dist/api/routes/__tests__/consent.test.d.ts +2 -0
- package/dist/api/routes/__tests__/consent.test.d.ts.map +1 -0
- package/dist/api/routes/__tests__/status.test.d.ts +2 -0
- package/dist/api/routes/__tests__/status.test.d.ts.map +1 -0
- package/dist/api/routes/error.d.ts +57 -0
- package/dist/api/routes/error.d.ts.map +1 -0
- package/dist/api/routes/generate-consent-receipt.d.ts +130 -0
- package/dist/api/routes/generate-consent-receipt.d.ts.map +1 -0
- package/dist/api/routes/get-consent-history.d.ts +133 -0
- package/dist/api/routes/get-consent-history.d.ts.map +1 -0
- package/dist/api/routes/get-consent-policy.d.ts +164 -0
- package/dist/api/routes/get-consent-policy.d.ts.map +1 -0
- package/dist/api/routes/get-consent.d.ts +148 -0
- package/dist/api/routes/get-consent.d.ts.map +1 -0
- package/dist/api/routes/index.d.ts +339 -0
- package/dist/api/routes/index.d.ts.map +1 -0
- package/dist/api/routes/ok.d.ts +87 -0
- package/dist/api/routes/ok.d.ts.map +1 -0
- package/dist/api/routes/set-consent.d.ts +245 -0
- package/dist/api/routes/set-consent.d.ts.map +1 -0
- package/dist/api/routes/show-consent-banner.d.ts +127 -0
- package/dist/api/routes/show-consent-banner.d.ts.map +1 -0
- package/dist/api/routes/status.d.ts +61 -0
- package/dist/api/routes/status.d.ts.map +1 -0
- package/dist/api/routes/verify-consent.d.ts +179 -0
- package/dist/api/routes/verify-consent.d.ts.map +1 -0
- package/dist/api/routes/withdraw-consent.d.ts +194 -0
- package/dist/api/routes/withdraw-consent.d.ts.map +1 -0
- package/dist/api/to-endpoints.d.ts +35 -0
- package/dist/api/to-endpoints.d.ts.map +1 -0
- package/dist/client/index.cjs +139 -0
- package/dist/client/index.d.ts +203 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +106 -0
- package/dist/client/types.d.ts +431 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/core.d.ts +124 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.test.d.ts +2 -0
- package/dist/core.test.d.ts.map +1 -0
- package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts +122 -0
- package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -0
- package/dist/db/adapters/drizzle-adapter/index.d.ts +2 -0
- package/dist/db/adapters/drizzle-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/drizzle.cjs +1531 -0
- package/dist/db/adapters/drizzle.js +1489 -0
- package/dist/db/adapters/kysely-adapter/dialect.d.ts +72 -0
- package/dist/db/adapters/kysely-adapter/dialect.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/index.d.ts +4 -0
- package/dist/db/adapters/kysely-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts +98 -0
- package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/types.d.ts +281 -0
- package/dist/db/adapters/kysely-adapter/types.d.ts.map +1 -0
- package/dist/db/adapters/kysely.cjs +1551 -0
- package/dist/db/adapters/kysely.js +1508 -0
- package/dist/db/adapters/memory-adapter/index.d.ts +2 -0
- package/dist/db/adapters/memory-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/memory-adapter/memory-adapter.d.ts +56 -0
- package/dist/db/adapters/memory-adapter/memory-adapter.d.ts.map +1 -0
- package/dist/db/adapters/memory.cjs +1391 -0
- package/dist/db/adapters/memory.js +1349 -0
- package/dist/db/adapters/prisma-adapter/index.d.ts +2 -0
- package/dist/db/adapters/prisma-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts +143 -0
- package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -0
- package/dist/db/adapters/prisma.cjs +1503 -0
- package/dist/db/adapters/prisma.js +1461 -0
- package/dist/db/adapters/types.d.ts +154 -0
- package/dist/db/adapters/types.d.ts.map +1 -0
- package/dist/db/adapters/utils.d.ts +36 -0
- package/dist/db/adapters/utils.d.ts.map +1 -0
- package/dist/db/core/fields/field-factory.d.ts +383 -0
- package/dist/db/core/fields/field-factory.d.ts.map +1 -0
- package/dist/db/core/fields/field-inference.d.ts +218 -0
- package/dist/db/core/fields/field-inference.d.ts.map +1 -0
- package/dist/db/core/fields/field-options-integration.d.ts +90 -0
- package/dist/db/core/fields/field-options-integration.d.ts.map +1 -0
- package/dist/db/core/fields/field-types.d.ts +182 -0
- package/dist/db/core/fields/field-types.d.ts.map +1 -0
- package/dist/db/core/fields/id-generator.d.ts +19 -0
- package/dist/db/core/fields/id-generator.d.ts.map +1 -0
- package/dist/db/core/fields/index.d.ts +8 -0
- package/dist/db/core/fields/index.d.ts.map +1 -0
- package/dist/db/core/fields/superjson-utils.d.ts +34 -0
- package/dist/db/core/fields/superjson-utils.d.ts.map +1 -0
- package/dist/db/core/fields/zod-fields.d.ts +1011 -0
- package/dist/db/core/fields/zod-fields.d.ts.map +1 -0
- package/dist/db/core/get-schema.d.ts +36 -0
- package/dist/db/core/get-schema.d.ts.map +1 -0
- package/dist/db/core/types.d.ts +41 -0
- package/dist/db/core/types.d.ts.map +1 -0
- package/dist/db/create-registry.d.ts +760 -0
- package/dist/db/create-registry.d.ts.map +1 -0
- package/dist/db/hooks/create-hooks.d.ts +32 -0
- package/dist/db/hooks/create-hooks.d.ts.map +1 -0
- package/dist/db/hooks/index.d.ts +40 -0
- package/dist/db/hooks/index.d.ts.map +1 -0
- package/dist/db/hooks/types.d.ts +133 -0
- package/dist/db/hooks/types.d.ts.map +1 -0
- package/dist/db/hooks/update-hooks.d.ts +33 -0
- package/dist/db/hooks/update-hooks.d.ts.map +1 -0
- package/dist/db/hooks/update-many-hooks.d.ts +55 -0
- package/dist/db/hooks/update-many-hooks.d.ts.map +1 -0
- package/dist/db/hooks/utils.d.ts +62 -0
- package/dist/db/hooks/utils.d.ts.map +1 -0
- package/dist/db/hooks/with-hooks-factory.d.ts +33 -0
- package/dist/db/hooks/with-hooks-factory.d.ts.map +1 -0
- package/dist/db/index.cjs +2458 -0
- package/dist/db/index.d.ts +11 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +2404 -0
- package/dist/db/migration/get-migration.d.ts +32 -0
- package/dist/db/migration/get-migration.d.ts.map +1 -0
- package/dist/db/migration/get-schema/get-schema.d.ts +27 -0
- package/dist/db/migration/get-schema/get-schema.d.ts.map +1 -0
- package/dist/db/migration/get-schema/index.d.ts +21 -0
- package/dist/db/migration/get-schema/index.d.ts.map +1 -0
- package/dist/db/migration/get-schema/process-fields.d.ts +16 -0
- package/dist/db/migration/get-schema/process-fields.d.ts.map +1 -0
- package/dist/db/migration/get-schema/process-tables.d.ts +13 -0
- package/dist/db/migration/get-schema/process-tables.d.ts.map +1 -0
- package/dist/db/migration/get-schema/types.d.ts +17 -0
- package/dist/db/migration/get-schema/types.d.ts.map +1 -0
- package/dist/db/migration/index.cjs +1613 -0
- package/dist/db/migration/index.d.ts +14 -0
- package/dist/db/migration/index.d.ts.map +1 -0
- package/dist/db/migration/index.js +1571 -0
- package/dist/db/migration/migration-builders.d.ts +28 -0
- package/dist/db/migration/migration-builders.d.ts.map +1 -0
- package/dist/db/migration/migration-execution.d.ts +12 -0
- package/dist/db/migration/migration-execution.d.ts.map +1 -0
- package/dist/db/migration/schema-comparison.d.ts +54 -0
- package/dist/db/migration/schema-comparison.d.ts.map +1 -0
- package/dist/db/migration/type-mapping.d.ts +86 -0
- package/dist/db/migration/type-mapping.d.ts.map +1 -0
- package/dist/db/migration/types.d.ts +37 -0
- package/dist/db/migration/types.d.ts.map +1 -0
- package/dist/db/schema/audit-log/index.d.ts +4 -0
- package/dist/db/schema/audit-log/index.d.ts.map +1 -0
- package/dist/db/schema/audit-log/registry.d.ts +128 -0
- package/dist/db/schema/audit-log/registry.d.ts.map +1 -0
- package/dist/db/schema/audit-log/schema.d.ts +67 -0
- package/dist/db/schema/audit-log/schema.d.ts.map +1 -0
- package/dist/db/schema/audit-log/table.d.ts +175 -0
- package/dist/db/schema/audit-log/table.d.ts.map +1 -0
- package/dist/db/schema/audit-log/types.d.ts +29 -0
- package/dist/db/schema/audit-log/types.d.ts.map +1 -0
- package/dist/db/schema/consent/index.d.ts +4 -0
- package/dist/db/schema/consent/index.d.ts.map +1 -0
- package/dist/db/schema/consent/registry.d.ts +318 -0
- package/dist/db/schema/consent/registry.d.ts.map +1 -0
- package/dist/db/schema/consent/schema.d.ts +135 -0
- package/dist/db/schema/consent/schema.d.ts.map +1 -0
- package/dist/db/schema/consent/table.d.ts +245 -0
- package/dist/db/schema/consent/table.d.ts.map +1 -0
- package/dist/db/schema/consent/types.d.ts +37 -0
- package/dist/db/schema/consent/types.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/index.d.ts +4 -0
- package/dist/db/schema/consent-geo-location/index.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/registry.d.ts +96 -0
- package/dist/db/schema/consent-geo-location/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/schema.d.ts +71 -0
- package/dist/db/schema/consent-geo-location/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/table.d.ts +167 -0
- package/dist/db/schema/consent-geo-location/table.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/types.d.ts +21 -0
- package/dist/db/schema/consent-geo-location/types.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/index.d.ts +4 -0
- package/dist/db/schema/consent-policy/index.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/registry.d.ts +186 -0
- package/dist/db/schema/consent-policy/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/schema.d.ts +68 -0
- package/dist/db/schema/consent-policy/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/table.d.ts +147 -0
- package/dist/db/schema/consent-policy/table.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/types.d.ts +28 -0
- package/dist/db/schema/consent-policy/types.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/index.d.ts +4 -0
- package/dist/db/schema/consent-purpose/index.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/registry.d.ts +136 -0
- package/dist/db/schema/consent-purpose/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/schema.d.ts +79 -0
- package/dist/db/schema/consent-purpose/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/table.d.ts +161 -0
- package/dist/db/schema/consent-purpose/table.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/types.d.ts +16 -0
- package/dist/db/schema/consent-purpose/types.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/index.d.ts +4 -0
- package/dist/db/schema/consent-purpose-junction/index.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/registry.d.ts +109 -0
- package/dist/db/schema/consent-purpose-junction/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/schema.d.ts +57 -0
- package/dist/db/schema/consent-purpose-junction/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/table.d.ts +138 -0
- package/dist/db/schema/consent-purpose-junction/table.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/types.d.ts +14 -0
- package/dist/db/schema/consent-purpose-junction/types.d.ts.map +1 -0
- package/dist/db/schema/consent-record/index.d.ts +4 -0
- package/dist/db/schema/consent-record/index.d.ts.map +1 -0
- package/dist/db/schema/consent-record/registry.d.ts +119 -0
- package/dist/db/schema/consent-record/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-record/schema.d.ts +57 -0
- package/dist/db/schema/consent-record/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-record/table.d.ts +123 -0
- package/dist/db/schema/consent-record/table.d.ts.map +1 -0
- package/dist/db/schema/consent-record/types.d.ts +21 -0
- package/dist/db/schema/consent-record/types.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/index.d.ts +4 -0
- package/dist/db/schema/consent-withdrawal/index.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/registry.d.ts +134 -0
- package/dist/db/schema/consent-withdrawal/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/schema.d.ts +67 -0
- package/dist/db/schema/consent-withdrawal/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/table.d.ts +170 -0
- package/dist/db/schema/consent-withdrawal/table.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/types.d.ts +28 -0
- package/dist/db/schema/consent-withdrawal/types.d.ts.map +1 -0
- package/dist/db/schema/definition.d.ts +1100 -0
- package/dist/db/schema/definition.d.ts.map +1 -0
- package/dist/db/schema/domain/index.d.ts +4 -0
- package/dist/db/schema/domain/index.d.ts.map +1 -0
- package/dist/db/schema/domain/registry.d.ts +169 -0
- package/dist/db/schema/domain/registry.d.ts.map +1 -0
- package/dist/db/schema/domain/schema.d.ts +60 -0
- package/dist/db/schema/domain/schema.d.ts.map +1 -0
- package/dist/db/schema/domain/table.d.ts +140 -0
- package/dist/db/schema/domain/table.d.ts.map +1 -0
- package/dist/db/schema/domain/types.d.ts +27 -0
- package/dist/db/schema/domain/types.d.ts.map +1 -0
- package/dist/db/schema/geo-location/index.d.ts +4 -0
- package/dist/db/schema/geo-location/index.d.ts.map +1 -0
- package/dist/db/schema/geo-location/registry.d.ts +114 -0
- package/dist/db/schema/geo-location/registry.d.ts.map +1 -0
- package/dist/db/schema/geo-location/schema.d.ts +58 -0
- package/dist/db/schema/geo-location/schema.d.ts.map +1 -0
- package/dist/db/schema/geo-location/table.d.ts +132 -0
- package/dist/db/schema/geo-location/table.d.ts.map +1 -0
- package/dist/db/schema/geo-location/types.d.ts +17 -0
- package/dist/db/schema/geo-location/types.d.ts.map +1 -0
- package/dist/db/schema/index.d.ts +85 -0
- package/dist/db/schema/index.d.ts.map +1 -0
- package/dist/db/schema/parser.d.ts +183 -0
- package/dist/db/schema/parser.d.ts.map +1 -0
- package/dist/db/schema/schemas.d.ts +383 -0
- package/dist/db/schema/schemas.d.ts.map +1 -0
- package/dist/db/schema/subject/index.d.ts +4 -0
- package/dist/db/schema/subject/index.d.ts.map +1 -0
- package/dist/db/schema/subject/registry.d.ts +141 -0
- package/dist/db/schema/subject/registry.d.ts.map +1 -0
- package/dist/db/schema/subject/schema.d.ts +56 -0
- package/dist/db/schema/subject/schema.d.ts.map +1 -0
- package/dist/db/schema/subject/table.d.ts +136 -0
- package/dist/db/schema/subject/table.d.ts.map +1 -0
- package/dist/db/schema/subject/types.d.ts +22 -0
- package/dist/db/schema/subject/types.d.ts.map +1 -0
- package/dist/db/schema/types.d.ts +136 -0
- package/dist/db/schema/types.d.ts.map +1 -0
- package/dist/db/utils/adapter-factory.d.ts +21 -0
- package/dist/db/utils/adapter-factory.d.ts.map +1 -0
- package/dist/db/utils/index.d.ts +10 -0
- package/dist/db/utils/index.d.ts.map +1 -0
- package/dist/db/utils.d.ts +4 -0
- package/dist/db/utils.d.ts.map +1 -0
- package/dist/error/codes.cjs +68 -0
- package/dist/error/codes.d.ts +175 -0
- package/dist/error/codes.d.ts.map +1 -0
- package/dist/error/codes.js +35 -0
- package/dist/error/error.d.ts +79 -0
- package/dist/error/error.d.ts.map +1 -0
- package/dist/error/index.cjs +172 -0
- package/dist/error/index.d.ts +9 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +129 -0
- package/dist/error/logging.d.ts +25 -0
- package/dist/error/logging.d.ts.map +1 -0
- package/dist/error/pipeline.d.ts +19 -0
- package/dist/error/pipeline.d.ts.map +1 -0
- package/dist/error/recovery.d.ts +22 -0
- package/dist/error/recovery.d.ts.map +1 -0
- package/dist/error/results.d.ts +56 -0
- package/dist/error/results.d.ts.map +1 -0
- package/dist/index.cjs +4777 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4708 -0
- package/dist/init.d.ts +52 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.test.d.ts +2 -0
- package/dist/init.test.d.ts.map +1 -0
- package/dist/integrations/index.cjs +281 -0
- package/dist/integrations/index.d.ts +7 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +248 -0
- package/dist/integrations/next.cjs +131 -0
- package/dist/integrations/next.d.ts +29 -0
- package/dist/integrations/next.d.ts.map +1 -0
- package/dist/integrations/next.js +99 -0
- package/dist/integrations/react.cjs +182 -0
- package/dist/integrations/react.d.ts +257 -0
- package/dist/integrations/react.d.ts.map +1 -0
- package/dist/integrations/react.js +150 -0
- package/dist/plugins/geo/index.d.ts +2 -0
- package/dist/plugins/geo/index.d.ts.map +1 -0
- package/dist/test/utils.d.ts +65 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/types/api.d.ts +89 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/context.d.ts +205 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/helper.d.ts +78 -0
- package/dist/types/helper.d.ts.map +1 -0
- package/dist/types/index.cjs +19 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +0 -0
- package/dist/types/options.d.ts +172 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/plugins.d.ts +442 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/utils/env.d.ts +77 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/hide-metadata.d.ts +22 -0
- package/dist/utils/hide-metadata.d.ts.map +1 -0
- package/dist/utils/index.cjs +268 -0
- package/dist/utils/index.d.ts +18 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +210 -0
- package/dist/utils/ip.d.ts +10 -0
- package/dist/utils/ip.d.ts.map +1 -0
- package/dist/utils/json.d.ts +14 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +108 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/url.d.ts +87 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/wildcard.d.ts +46 -0
- package/dist/utils/wildcard.d.ts.map +1 -0
- package/knip.json +37 -0
- package/package.json +146 -0
- package/rslib.config.ts +104 -0
- package/src/api/call.ts +177 -0
- package/src/api/index.ts +303 -0
- package/src/api/middlewares/index.ts +38 -0
- package/src/api/middlewares/origin-check.ts +260 -0
- package/src/api/middlewares/validate-context.ts +175 -0
- package/src/api/routes/__tests__/consent.test.ts +270 -0
- package/src/api/routes/__tests__/status.test.ts +36 -0
- package/src/api/routes/error.ts +130 -0
- package/src/api/routes/generate-consent-receipt.ts +244 -0
- package/src/api/routes/get-consent-history.ts +128 -0
- package/src/api/routes/get-consent-policy.ts +327 -0
- package/src/api/routes/get-consent.ts +230 -0
- package/src/api/routes/index.ts +12 -0
- package/src/api/routes/ok.ts +45 -0
- package/src/api/routes/set-consent.ts +328 -0
- package/src/api/routes/show-consent-banner.ts +149 -0
- package/src/api/routes/status.ts +62 -0
- package/src/api/routes/verify-consent.ts +272 -0
- package/src/api/routes/withdraw-consent.ts +293 -0
- package/src/api/to-endpoints.ts +371 -0
- package/src/client/index.ts +471 -0
- package/src/client/types.ts +458 -0
- package/src/core.test.ts +303 -0
- package/src/core.ts +267 -0
- package/src/db/adapters/drizzle-adapter/drizzle-adapter.ts +711 -0
- package/src/db/adapters/drizzle-adapter/index.ts +1 -0
- package/src/db/adapters/kysely-adapter/dialect.ts +192 -0
- package/src/db/adapters/kysely-adapter/index.ts +3 -0
- package/src/db/adapters/kysely-adapter/kysely-adapter.ts +1168 -0
- package/src/db/adapters/kysely-adapter/types.ts +307 -0
- package/src/db/adapters/memory-adapter/index.ts +1 -0
- package/src/db/adapters/memory-adapter/memory-adapter.ts +648 -0
- package/src/db/adapters/prisma-adapter/index.ts +1 -0
- package/src/db/adapters/prisma-adapter/prisma-adapter.ts +586 -0
- package/src/db/adapters/types.ts +203 -0
- package/src/db/adapters/utils.ts +51 -0
- package/src/db/core/fields/field-factory.ts +804 -0
- package/src/db/core/fields/field-inference.ts +298 -0
- package/src/db/core/fields/field-options-integration.ts +135 -0
- package/src/db/core/fields/field-types.ts +233 -0
- package/src/db/core/fields/id-generator.ts +57 -0
- package/src/db/core/fields/index.ts +56 -0
- package/src/db/core/fields/superjson-utils.ts +155 -0
- package/src/db/core/fields/zod-fields.ts +269 -0
- package/src/db/core/get-schema.ts +102 -0
- package/src/db/core/types.ts +52 -0
- package/src/db/create-registry.ts +31 -0
- package/src/db/hooks/create-hooks.ts +88 -0
- package/src/db/hooks/index.ts +39 -0
- package/src/db/hooks/types.ts +164 -0
- package/src/db/hooks/update-hooks.ts +91 -0
- package/src/db/hooks/update-many-hooks.ts +176 -0
- package/src/db/hooks/utils.ts +151 -0
- package/src/db/hooks/with-hooks-factory.ts +68 -0
- package/src/db/index.ts +32 -0
- package/src/db/migration/get-migration.ts +89 -0
- package/src/db/migration/get-schema/get-schema.ts +44 -0
- package/src/db/migration/get-schema/index.ts +20 -0
- package/src/db/migration/get-schema/process-fields.ts +66 -0
- package/src/db/migration/get-schema/process-tables.ts +68 -0
- package/src/db/migration/get-schema/types.ts +18 -0
- package/src/db/migration/index.ts +18 -0
- package/src/db/migration/migration-builders.ts +170 -0
- package/src/db/migration/migration-execution.ts +79 -0
- package/src/db/migration/schema-comparison.ts +216 -0
- package/src/db/migration/type-mapping.ts +255 -0
- package/src/db/migration/types.ts +46 -0
- package/src/db/schema/audit-log/index.ts +3 -0
- package/src/db/schema/audit-log/registry.ts +228 -0
- package/src/db/schema/audit-log/schema.ts +46 -0
- package/src/db/schema/audit-log/table.ts +185 -0
- package/src/db/schema/audit-log/types.ts +29 -0
- package/src/db/schema/consent/index.ts +3 -0
- package/src/db/schema/consent/registry.ts +381 -0
- package/src/db/schema/consent/schema.ts +65 -0
- package/src/db/schema/consent/table.ts +220 -0
- package/src/db/schema/consent/types.ts +39 -0
- package/src/db/schema/consent-geo-location/index.ts +3 -0
- package/src/db/schema/consent-geo-location/registry.ts +124 -0
- package/src/db/schema/consent-geo-location/schema.ts +51 -0
- package/src/db/schema/consent-geo-location/table.ts +169 -0
- package/src/db/schema/consent-geo-location/types.ts +21 -0
- package/src/db/schema/consent-policy/index.ts +3 -0
- package/src/db/schema/consent-policy/registry.ts +313 -0
- package/src/db/schema/consent-policy/schema.ts +47 -0
- package/src/db/schema/consent-policy/table.ts +141 -0
- package/src/db/schema/consent-policy/types.ts +28 -0
- package/src/db/schema/consent-purpose/index.ts +3 -0
- package/src/db/schema/consent-purpose/registry.ts +188 -0
- package/src/db/schema/consent-purpose/schema.ts +58 -0
- package/src/db/schema/consent-purpose/table.ts +154 -0
- package/src/db/schema/consent-purpose/types.ts +16 -0
- package/src/db/schema/consent-purpose-junction/index.ts +3 -0
- package/src/db/schema/consent-purpose-junction/registry.ts +189 -0
- package/src/db/schema/consent-purpose-junction/schema.ts +49 -0
- package/src/db/schema/consent-purpose-junction/table.ts +142 -0
- package/src/db/schema/consent-purpose-junction/types.ts +14 -0
- package/src/db/schema/consent-record/index.ts +3 -0
- package/src/db/schema/consent-record/registry.ts +209 -0
- package/src/db/schema/consent-record/schema.ts +42 -0
- package/src/db/schema/consent-record/table.ts +124 -0
- package/src/db/schema/consent-record/types.ts +21 -0
- package/src/db/schema/consent-withdrawal/index.ts +3 -0
- package/src/db/schema/consent-withdrawal/registry.ts +219 -0
- package/src/db/schema/consent-withdrawal/schema.ts +48 -0
- package/src/db/schema/consent-withdrawal/table.ts +181 -0
- package/src/db/schema/consent-withdrawal/types.ts +29 -0
- package/src/db/schema/definition.ts +196 -0
- package/src/db/schema/domain/index.ts +3 -0
- package/src/db/schema/domain/registry.ts +272 -0
- package/src/db/schema/domain/schema.ts +43 -0
- package/src/db/schema/domain/table.ts +137 -0
- package/src/db/schema/domain/types.ts +27 -0
- package/src/db/schema/geo-location/index.ts +3 -0
- package/src/db/schema/geo-location/registry.ts +159 -0
- package/src/db/schema/geo-location/schema.ts +45 -0
- package/src/db/schema/geo-location/table.ts +148 -0
- package/src/db/schema/geo-location/types.ts +18 -0
- package/src/db/schema/index.ts +96 -0
- package/src/db/schema/parser.ts +417 -0
- package/src/db/schema/schemas.ts +35 -0
- package/src/db/schema/subject/index.ts +3 -0
- package/src/db/schema/subject/registry.ts +371 -0
- package/src/db/schema/subject/schema.ts +41 -0
- package/src/db/schema/subject/table.ts +139 -0
- package/src/db/schema/subject/types.ts +22 -0
- package/src/db/schema/types.ts +154 -0
- package/src/db/utils/adapter-factory.ts +64 -0
- package/src/db/utils/index.ts +10 -0
- package/src/db/utils.ts +42 -0
- package/src/docs/ADVANCED_JSON_HANDLING.md +99 -0
- package/src/docs/neverthrow.md +171 -0
- package/src/error/codes.ts +201 -0
- package/src/error/error.ts +145 -0
- package/src/error/index.ts +23 -0
- package/src/error/logging.ts +52 -0
- package/src/error/pipeline.ts +57 -0
- package/src/error/recovery.ts +45 -0
- package/src/error/results.ts +100 -0
- package/src/index.ts +79 -0
- package/src/init.test.ts +235 -0
- package/src/init.ts +261 -0
- package/src/integrations/index.ts +10 -0
- package/src/integrations/next.ts +136 -0
- package/src/integrations/react.ts +567 -0
- package/src/plugins/geo/index.ts +563 -0
- package/src/test/utils.ts +244 -0
- package/src/types/api.ts +101 -0
- package/src/types/context.ts +235 -0
- package/src/types/helper.ts +87 -0
- package/src/types/index.ts +5 -0
- package/src/types/options.ts +189 -0
- package/src/types/plugins.ts +538 -0
- package/src/utils/env.ts +103 -0
- package/src/utils/hide-metadata.ts +21 -0
- package/src/utils/index.ts +17 -0
- package/src/utils/ip.ts +45 -0
- package/src/utils/json.ts +19 -0
- package/src/utils/logger.ts +252 -0
- package/src/utils/url.ts +194 -0
- package/src/utils/wildcard.ts +253 -0
- package/tsconfig.json +12 -0
- package/vitest.config.ts +14 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import type { ColumnDataType, Expression, Kysely } from 'kysely';
|
|
2
|
+
import type {
|
|
3
|
+
Database,
|
|
4
|
+
KyselyDatabaseType,
|
|
5
|
+
} from '~/db/adapters/kysely-adapter/types';
|
|
6
|
+
import type { C15TOptions } from '~/types';
|
|
7
|
+
import { createLogger } from '~/utils/logger';
|
|
8
|
+
import { getType } from './type-mapping';
|
|
9
|
+
import type { ColumnsToAdd, MigrationOperation, TableToCreate } from './types';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Builds migrations for adding columns to existing tables
|
|
13
|
+
*
|
|
14
|
+
* This function creates ALTER TABLE statements to add missing columns
|
|
15
|
+
* to existing tables in the database.
|
|
16
|
+
*
|
|
17
|
+
* @param db - Kysely database instance used to build SQL operations
|
|
18
|
+
* @param toBeAdded - Collection of tables and columns that need to be added
|
|
19
|
+
* @param dbType - Database type to determine appropriate column types
|
|
20
|
+
* @returns Array of migration operations ready to be executed
|
|
21
|
+
*/
|
|
22
|
+
export function buildColumnAddMigrations(
|
|
23
|
+
db: Kysely<Database>,
|
|
24
|
+
toBeAdded: ColumnsToAdd[],
|
|
25
|
+
dbType: KyselyDatabaseType
|
|
26
|
+
): MigrationOperation[] {
|
|
27
|
+
// Array to collect all migration operations
|
|
28
|
+
const migrations: MigrationOperation[] = [];
|
|
29
|
+
|
|
30
|
+
// Process each table that needs columns added
|
|
31
|
+
for (const table of toBeAdded) {
|
|
32
|
+
// For each field in the table that needs to be added
|
|
33
|
+
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
34
|
+
// Get the appropriate database-specific type for this field
|
|
35
|
+
const type = getType(field, dbType) as
|
|
36
|
+
| ColumnDataType
|
|
37
|
+
| Expression<C15TOptions['database']>;
|
|
38
|
+
|
|
39
|
+
// Build an ALTER TABLE statement using Kysely's fluent API
|
|
40
|
+
const exec = db.schema
|
|
41
|
+
.alterTable(table.table)
|
|
42
|
+
// Add the column with the appropriate name and type
|
|
43
|
+
.addColumn(fieldName, type, (col) => {
|
|
44
|
+
// Start with nullability constraint based on field requirements
|
|
45
|
+
let column = field.required !== false ? col.notNull() : col;
|
|
46
|
+
|
|
47
|
+
// Add foreign key reference if specified
|
|
48
|
+
if (field.references) {
|
|
49
|
+
column = column.references(
|
|
50
|
+
`${field.references.model}.${field.references.field}`
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Add unique constraint if specified
|
|
55
|
+
if (field.unique) {
|
|
56
|
+
column = column.unique();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return column;
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Add this migration operation to our collection
|
|
63
|
+
migrations.push(exec);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return migrations;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Builds migrations for creating new tables
|
|
72
|
+
*
|
|
73
|
+
* This function creates CREATE TABLE statements for tables
|
|
74
|
+
* that don't exist in the database but are defined in the schema.
|
|
75
|
+
*
|
|
76
|
+
* @param db - Kysely database instance used to build SQL operations
|
|
77
|
+
* @param toBeCreated - Collection of tables that need to be created
|
|
78
|
+
* @param dbType - Database type to determine appropriate column types
|
|
79
|
+
* @returns Array of migration operations ready to be executed
|
|
80
|
+
*/
|
|
81
|
+
export function buildTableCreateMigrations(
|
|
82
|
+
db: Kysely<Database>,
|
|
83
|
+
toBeCreated: TableToCreate[],
|
|
84
|
+
dbType: KyselyDatabaseType
|
|
85
|
+
): MigrationOperation[] {
|
|
86
|
+
const logger = createLogger();
|
|
87
|
+
const migrations: MigrationOperation[] = [];
|
|
88
|
+
|
|
89
|
+
// Process each table that needs to be created
|
|
90
|
+
for (const table of toBeCreated) {
|
|
91
|
+
// Log all field names to detect potential duplicate 'id' issues
|
|
92
|
+
const fieldNames = Object.keys(table.fields);
|
|
93
|
+
logger.info(
|
|
94
|
+
`Creating table ${table.table} with fields: ${fieldNames.join(', ')}`
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
// Check for potential ID field conflict - warning for explicit 'id' field
|
|
98
|
+
// This is important because we automatically add an 'id' primary key
|
|
99
|
+
if (fieldNames.includes('id')) {
|
|
100
|
+
logger.warn(
|
|
101
|
+
`⚠️ Table ${table.table} already has an explicit 'id' field, which may conflict with the auto-generated primary key`
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Check for another potential issue: field with fieldName 'id' but different key
|
|
106
|
+
// This could cause column duplication errors
|
|
107
|
+
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
108
|
+
if (field.fieldName === 'id' && fieldName !== 'id') {
|
|
109
|
+
logger.error(
|
|
110
|
+
`❌ ERROR: Table ${table.table} has field '${fieldName}' with fieldName 'id' - this will cause a duplicate column error`
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Start building the CREATE TABLE statement
|
|
116
|
+
// Always add an 'id' primary key column first
|
|
117
|
+
let dbT = db.schema.createTable(table.table).addColumn(
|
|
118
|
+
'id',
|
|
119
|
+
// Choose appropriate ID type based on database
|
|
120
|
+
// MySQL and MSSQL use varchar(36) for UUIDs, others use text
|
|
121
|
+
dbType === 'mysql' || dbType === 'mssql' ? 'varchar(36)' : 'text',
|
|
122
|
+
// Make it a primary key and non-nullable
|
|
123
|
+
(col) => col.primaryKey().notNull()
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
// Now add all the subject-defined fields to the table
|
|
127
|
+
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
128
|
+
// Get appropriate database-specific type for this field
|
|
129
|
+
const type = getType(field, dbType) as
|
|
130
|
+
| ColumnDataType
|
|
131
|
+
| Expression<C15TOptions['database']>;
|
|
132
|
+
|
|
133
|
+
// Log what we're doing for debugging purposes
|
|
134
|
+
logger.info(
|
|
135
|
+
`Adding column ${fieldName} (fieldName: ${field.fieldName || fieldName}) to table ${table.table}`
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
// Add this column to the CREATE TABLE statement
|
|
139
|
+
dbT = dbT.addColumn(fieldName, type, (col) => {
|
|
140
|
+
// Apply constraints to the column
|
|
141
|
+
|
|
142
|
+
// 1. Nullability constraint - make NOT NULL if field is required
|
|
143
|
+
let column = field.required !== false ? col.notNull() : col;
|
|
144
|
+
|
|
145
|
+
// 2. Foreign key constraint - add REFERENCES if field references another table
|
|
146
|
+
if (field.references) {
|
|
147
|
+
column = column.references(
|
|
148
|
+
`${field.references.model}.${field.references.field}`
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// 3. Uniqueness constraint - add UNIQUE if the field must have unique values
|
|
153
|
+
if (field.unique) {
|
|
154
|
+
column = column.unique();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return column;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Generate and log the raw SQL for debugging/preview
|
|
162
|
+
const sqlDebug = dbT.compile().sql;
|
|
163
|
+
logger.info(`SQL for table ${table.table}:\n${sqlDebug}`);
|
|
164
|
+
|
|
165
|
+
// Add this completed CREATE TABLE statement to our migrations collection
|
|
166
|
+
migrations.push(dbT);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return migrations;
|
|
170
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration execution functionality
|
|
3
|
+
*
|
|
4
|
+
* This module handles executing or compiling migrations.
|
|
5
|
+
*
|
|
6
|
+
* @module migration/migration-execution
|
|
7
|
+
*/
|
|
8
|
+
import { createLogger } from '../../utils/logger';
|
|
9
|
+
import type { MigrationOperation } from './types';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates functions to run or compile the generated migrations
|
|
13
|
+
*
|
|
14
|
+
* @param migrations - Migration operations to execute
|
|
15
|
+
* @returns Object with runMigrations and compileMigrations functions
|
|
16
|
+
*/
|
|
17
|
+
export function createMigrationExecutors(migrations: MigrationOperation[]) {
|
|
18
|
+
const logger = createLogger();
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Executes all migration operations against the database
|
|
22
|
+
*
|
|
23
|
+
* This function runs each migration in sequence, executing the SQL operations
|
|
24
|
+
* directly against the connected database. If any migration fails, the
|
|
25
|
+
* process is halted with an error.
|
|
26
|
+
*
|
|
27
|
+
* @remarks
|
|
28
|
+
* Migrations are executed in the order they were added to the migrations array.
|
|
29
|
+
* Column additions are typically executed before table creations to ensure
|
|
30
|
+
* any references between them are properly established.
|
|
31
|
+
*
|
|
32
|
+
* Error handling includes:
|
|
33
|
+
* - Detailed logging of which migration failed
|
|
34
|
+
* - Capturing the exact SQL that caused the error
|
|
35
|
+
* - Rethrowing the error to allow callers to implement recovery strategies
|
|
36
|
+
*
|
|
37
|
+
* @throws Will throw the original database error with additional context
|
|
38
|
+
*
|
|
39
|
+
* @returns A promise that resolves when all migrations are complete
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* try {
|
|
44
|
+
* await runMigrations();
|
|
45
|
+
* console.log('All migrations completed successfully');
|
|
46
|
+
* } catch (error) {
|
|
47
|
+
* console.error('Migration failed:', error);
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
async function runMigrations() {
|
|
52
|
+
// Loop through each migration operation in sequence
|
|
53
|
+
for (const migration of migrations) {
|
|
54
|
+
try {
|
|
55
|
+
// Execute this migration against the database
|
|
56
|
+
await migration.execute();
|
|
57
|
+
} catch (error) {
|
|
58
|
+
// If a migration fails, log the specific SQL that failed
|
|
59
|
+
const sql = migration.compile().sql;
|
|
60
|
+
logger.error(`Migration failed! SQL:\n${sql}`);
|
|
61
|
+
|
|
62
|
+
// Rethrow the error to allow the caller to handle it
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Compiles all migrations to SQL without executing them
|
|
70
|
+
*
|
|
71
|
+
* @returns SQL string of all migrations
|
|
72
|
+
*/
|
|
73
|
+
async function compileMigrations() {
|
|
74
|
+
const compiled = migrations.map((m) => m.compile().sql);
|
|
75
|
+
return `${compiled.join(';\n\n')};`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return { runMigrations, compileMigrations };
|
|
79
|
+
}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import type { TableMetadata } from 'kysely';
|
|
2
|
+
import type { Field } from '~/db/core/fields';
|
|
3
|
+
/**
|
|
4
|
+
* Schema comparison functionality for database migrations
|
|
5
|
+
*
|
|
6
|
+
* This module analyzes differences between the expected schema definition and the
|
|
7
|
+
* actual database schema to determine what tables need to be created and what
|
|
8
|
+
* columns need to be added to existing tables.
|
|
9
|
+
*
|
|
10
|
+
* The comparison process follows these steps:
|
|
11
|
+
* 1. Load the expected schema from configuration
|
|
12
|
+
* 2. Compare it with tables in the actual database
|
|
13
|
+
* 3. Identify tables that don't exist but should be created
|
|
14
|
+
* 4. Identify columns that need to be added to existing tables
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* This is a core part of the migration system and is used by the main migration
|
|
18
|
+
* generator to determine what database changes are needed.
|
|
19
|
+
*
|
|
20
|
+
* @module migration/schema-comparison
|
|
21
|
+
*/
|
|
22
|
+
import type { C15TOptions } from '~/types';
|
|
23
|
+
import { createLogger } from '../../utils/logger';
|
|
24
|
+
import type { KyselyDatabaseType } from '../adapters/kysely-adapter/types';
|
|
25
|
+
import { getSchema } from '../core/get-schema';
|
|
26
|
+
import type { TableSchemaDefinition } from './get-schema/types';
|
|
27
|
+
import { matchType } from './type-mapping';
|
|
28
|
+
import type { ColumnsToAdd, TableToCreate } from './types';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Analyzes schema differences between the expected schema and actual database
|
|
32
|
+
*
|
|
33
|
+
* This function compares the schema defined in the application with the
|
|
34
|
+
* actual database structure to determine what changes need to be made.
|
|
35
|
+
*
|
|
36
|
+
* @param config - c15t configuration containing the schema definition
|
|
37
|
+
* @param tableMetadata - Database table metadata from introspection, containing
|
|
38
|
+
* information about existing tables and columns
|
|
39
|
+
* @param dbType - The database type (postgres, mysql, sqlite, mssql) which affects
|
|
40
|
+
* how types are compared and mapped
|
|
41
|
+
*
|
|
42
|
+
* @returns An object containing tables to be created and columns to be added
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const changes = analyzeSchemaChanges(
|
|
47
|
+
* appConfig,
|
|
48
|
+
* databaseMetadata,
|
|
49
|
+
* 'postgres'
|
|
50
|
+
* );
|
|
51
|
+
*
|
|
52
|
+
* console.log(`Need to create ${changes.toBeCreated.length} tables`);
|
|
53
|
+
* console.log(`Need to add columns to ${changes.toBeAdded.length} tables`);
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export function analyzeSchemaChanges(
|
|
57
|
+
config: C15TOptions,
|
|
58
|
+
tableMetadata: TableMetadata[],
|
|
59
|
+
dbType: KyselyDatabaseType
|
|
60
|
+
): { toBeCreated: TableToCreate[]; toBeAdded: ColumnsToAdd[] } {
|
|
61
|
+
const betterAuthSchema = getSchema(config);
|
|
62
|
+
const logger = createLogger(config.logger);
|
|
63
|
+
const toBeCreated: TableToCreate[] = [];
|
|
64
|
+
const toBeAdded: ColumnsToAdd[] = [];
|
|
65
|
+
|
|
66
|
+
for (const [key, value] of Object.entries(betterAuthSchema)) {
|
|
67
|
+
const table = tableMetadata.find((t: { name: string }) => t.name === key);
|
|
68
|
+
if (!table) {
|
|
69
|
+
handleNewTable(key, value as TableSchemaDefinition, toBeCreated);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
handleExistingTable(
|
|
74
|
+
key,
|
|
75
|
+
value as TableSchemaDefinition,
|
|
76
|
+
table,
|
|
77
|
+
toBeAdded,
|
|
78
|
+
dbType,
|
|
79
|
+
logger
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return { toBeCreated, toBeAdded };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Handles logic for a table that needs to be created
|
|
88
|
+
*
|
|
89
|
+
* This function adds a new table to the list of tables to be created,
|
|
90
|
+
* handling cases where the table might already be in the list, or
|
|
91
|
+
* where it needs to be inserted at a specific position based on order.
|
|
92
|
+
*
|
|
93
|
+
* @param tableName - The name of the table to be created
|
|
94
|
+
* @param value - Table definition containing fields and order
|
|
95
|
+
* @param toBeCreated - Array of tables to be created, modified in-place
|
|
96
|
+
*
|
|
97
|
+
* @remarks
|
|
98
|
+
* The function uses the table's order property to maintain dependencies
|
|
99
|
+
* between tables. Tables with lower order values are created first.
|
|
100
|
+
*
|
|
101
|
+
* If a table with the same name already exists in the list, its fields
|
|
102
|
+
* will be merged with the new fields rather than replacing the entry.
|
|
103
|
+
*/
|
|
104
|
+
function handleNewTable(
|
|
105
|
+
tableName: string,
|
|
106
|
+
value: TableSchemaDefinition,
|
|
107
|
+
toBeCreated: TableToCreate[]
|
|
108
|
+
): void {
|
|
109
|
+
const tIndex = toBeCreated.findIndex((t) => t.table === tableName);
|
|
110
|
+
const tableData = {
|
|
111
|
+
table: tableName,
|
|
112
|
+
fields: value.fields,
|
|
113
|
+
order: value.order || Number.POSITIVE_INFINITY,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const insertIndex = toBeCreated.findIndex(
|
|
117
|
+
(t) => (t.order || Number.POSITIVE_INFINITY) > tableData.order
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
if (insertIndex === -1) {
|
|
121
|
+
if (tIndex === -1) {
|
|
122
|
+
toBeCreated.push(tableData);
|
|
123
|
+
} else {
|
|
124
|
+
const existingTable = toBeCreated[tIndex];
|
|
125
|
+
if (existingTable) {
|
|
126
|
+
existingTable.fields = {
|
|
127
|
+
...existingTable.fields,
|
|
128
|
+
...value.fields,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
toBeCreated.splice(insertIndex, 0, tableData);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Handles logic for an existing table that might need columns added
|
|
139
|
+
*
|
|
140
|
+
* This function compares the expected table fields with the actual
|
|
141
|
+
* table columns to determine which columns need to be added.
|
|
142
|
+
* It also logs warnings for type mismatches.
|
|
143
|
+
*
|
|
144
|
+
* @param tableName - The name of the table being checked
|
|
145
|
+
* @param value - Table definition containing expected fields and order
|
|
146
|
+
* @param table - Actual table metadata from database introspection
|
|
147
|
+
* @param toBeAdded - Array of table columns to be added, modified in-place
|
|
148
|
+
* @param dbType - Database type for type matching
|
|
149
|
+
* @param logger - Logger instance for warnings and errors
|
|
150
|
+
*
|
|
151
|
+
* @remarks
|
|
152
|
+
* Fields are compared by name and type. If a field exists in the expected schema
|
|
153
|
+
* but not in the actual table, it will be added to the list of columns to add.
|
|
154
|
+
*
|
|
155
|
+
* If a field exists in both but has a different type, a warning is logged.
|
|
156
|
+
* Type matching takes into account differences in type names between database systems.
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```typescript
|
|
160
|
+
* // This might produce logs like:
|
|
161
|
+
* // "Field subjectId in table subjects has a different type in the database. Expected string but got varchar."
|
|
162
|
+
* handleExistingTable(
|
|
163
|
+
* 'subjects',
|
|
164
|
+
* { fields: { subjectId: { type: 'string', required: true } }, order: 1 },
|
|
165
|
+
* dbTable,
|
|
166
|
+
* columnsToAdd,
|
|
167
|
+
* 'postgres',
|
|
168
|
+
* logger
|
|
169
|
+
* );
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
function handleExistingTable(
|
|
173
|
+
tableName: string,
|
|
174
|
+
value: TableSchemaDefinition,
|
|
175
|
+
table: TableMetadata,
|
|
176
|
+
toBeAdded: ColumnsToAdd[],
|
|
177
|
+
dbType: KyselyDatabaseType,
|
|
178
|
+
logger: ReturnType<typeof createLogger>
|
|
179
|
+
): void {
|
|
180
|
+
// Collection of fields that need to be added to the existing table
|
|
181
|
+
const toBeAddedFields: Record<string, Field> = {};
|
|
182
|
+
|
|
183
|
+
// Iterate through each field in the expected schema for this table
|
|
184
|
+
for (const [fieldName, field] of Object.entries(value.fields)) {
|
|
185
|
+
// Check if the field exists in the actual database table
|
|
186
|
+
const column = table.columns.find((c) => c.name === fieldName);
|
|
187
|
+
|
|
188
|
+
// If the field doesn't exist in the database, mark it to be added
|
|
189
|
+
if (!column) {
|
|
190
|
+
toBeAddedFields[fieldName] = field;
|
|
191
|
+
continue; // Skip the rest of this iteration
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Field exists, so check if its type matches the expected type
|
|
195
|
+
// If types match, no action needed so continue to next field
|
|
196
|
+
if (matchType(column.dataType, field.type, dbType)) {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// If we reach here, the field exists but has a different type
|
|
201
|
+
// We don't alter column types to avoid data loss, just log a warning
|
|
202
|
+
logger.warn(
|
|
203
|
+
`Field ${fieldName} in table ${tableName} has a different type in the database. Expected ${field.type} but got ${column.dataType}.`
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// After checking all fields, if we found fields that need to be added,
|
|
208
|
+
// add an entry to the toBeAdded array with all fields for this table
|
|
209
|
+
if (Object.keys(toBeAddedFields).length > 0) {
|
|
210
|
+
toBeAdded.push({
|
|
211
|
+
table: tableName,
|
|
212
|
+
fields: toBeAddedFields,
|
|
213
|
+
order: value.order || Number.POSITIVE_INFINITY, // Use specified order or lowest priority
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|