@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,151 @@
|
|
|
1
|
+
import type { GenericEndpointContext } from '~/types';
|
|
2
|
+
import type { EntityName, EntityTypeMap } from '../core/types';
|
|
3
|
+
import type { DatabaseHook, HookOperation, HookPhase } from './types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Process hooks for a given phase and operation.
|
|
7
|
+
*
|
|
8
|
+
* @typeParam TEntityData - Type of the entity data being processed
|
|
9
|
+
*
|
|
10
|
+
* @param data - The data to process through hooks
|
|
11
|
+
* @param model - The entity type/model name
|
|
12
|
+
* @param operation - The operation being performed (create/update)
|
|
13
|
+
* @param phase - The hook execution phase (before/after)
|
|
14
|
+
* @param hooks - Array of hook sets to process
|
|
15
|
+
* @param context - Optional request context
|
|
16
|
+
* @returns The processed data, potentially transformed, or null if aborted
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* This core utility function handles the execution of hooks for various
|
|
20
|
+
* database operations. It traverses all registered hooks for the specified
|
|
21
|
+
* entity, operation, and phase, applying transformations or aborting as needed.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const processedData = await processHooks(
|
|
26
|
+
* { name: 'Alice' },
|
|
27
|
+
* 'subject',
|
|
28
|
+
* 'create',
|
|
29
|
+
* 'before',
|
|
30
|
+
* registeredHooks
|
|
31
|
+
* );
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export async function processHooks<
|
|
35
|
+
TEntityName extends EntityName,
|
|
36
|
+
TEntityData extends Record<string, unknown>,
|
|
37
|
+
>(
|
|
38
|
+
data: TEntityData,
|
|
39
|
+
model: TEntityName,
|
|
40
|
+
operation: HookOperation,
|
|
41
|
+
phase: HookPhase,
|
|
42
|
+
hooks: DatabaseHook[],
|
|
43
|
+
context?: GenericEndpointContext
|
|
44
|
+
): Promise<TEntityData | null> {
|
|
45
|
+
let currentData = { ...data };
|
|
46
|
+
|
|
47
|
+
for (const hookSet of hooks) {
|
|
48
|
+
// Skip if no hooks for this model
|
|
49
|
+
const modelHooks = hookSet[model];
|
|
50
|
+
if (!modelHooks) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Skip if no hooks for this operation
|
|
55
|
+
const operationHooks = modelHooks[operation];
|
|
56
|
+
if (!operationHooks) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Skip if no hooks for this phase
|
|
61
|
+
const hookFn = operationHooks[phase];
|
|
62
|
+
if (!hookFn) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (phase === 'before') {
|
|
67
|
+
const result = await hookFn(
|
|
68
|
+
currentData as unknown as EntityTypeMap[TEntityName],
|
|
69
|
+
context
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
if (result && typeof result === 'object' && 'kind' in result) {
|
|
73
|
+
switch (result.kind) {
|
|
74
|
+
case 'abort':
|
|
75
|
+
return null;
|
|
76
|
+
case 'transform': {
|
|
77
|
+
const transformData = result.data;
|
|
78
|
+
currentData = {
|
|
79
|
+
...currentData,
|
|
80
|
+
...transformData,
|
|
81
|
+
};
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
default:
|
|
85
|
+
// Continue with current data
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
// For 'after' hooks, we use the same type casting approach
|
|
91
|
+
await hookFn(
|
|
92
|
+
currentData as unknown as EntityTypeMap[TEntityName],
|
|
93
|
+
context
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return currentData;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Process hooks for multiple records.
|
|
103
|
+
*
|
|
104
|
+
* @typeParam TEntityName - Type of the entity name
|
|
105
|
+
* @typeParam TEntityData - Type of the entity data
|
|
106
|
+
*
|
|
107
|
+
* @param records - Array of records to process
|
|
108
|
+
* @param model - The entity type/model name
|
|
109
|
+
* @param hooks - Array of hook sets to process
|
|
110
|
+
* @param context - Optional request context
|
|
111
|
+
* @returns Promise that resolves when all hooks have been processed
|
|
112
|
+
*
|
|
113
|
+
* @remarks
|
|
114
|
+
* This utility function handles processing after-update hooks for a batch
|
|
115
|
+
* of records, ensuring each record goes through the appropriate hooks.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```typescript
|
|
119
|
+
* // Process 'after update' hooks for multiple subjects
|
|
120
|
+
* await processAfterHooksForMany(
|
|
121
|
+
* updatedSubjects,
|
|
122
|
+
* 'subject',
|
|
123
|
+
* registeredHooks,
|
|
124
|
+
* { batchId: 'sub_x1pftyoufsm7xgo1kv' }
|
|
125
|
+
* );
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export async function processAfterHooksForMany<
|
|
129
|
+
TEntityName extends EntityName,
|
|
130
|
+
TEntityData extends Record<string, unknown>,
|
|
131
|
+
>(
|
|
132
|
+
records: TEntityData[],
|
|
133
|
+
model: TEntityName,
|
|
134
|
+
hooks: DatabaseHook[],
|
|
135
|
+
context?: GenericEndpointContext
|
|
136
|
+
): Promise<void> {
|
|
137
|
+
if (!records.length) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
for (const record of records) {
|
|
142
|
+
await processHooks<TEntityName, TEntityData>(
|
|
143
|
+
record,
|
|
144
|
+
model,
|
|
145
|
+
'update',
|
|
146
|
+
'after',
|
|
147
|
+
hooks,
|
|
148
|
+
context
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Adapter } from '~/db/adapters/types';
|
|
2
|
+
import { createWithHook } from './create-hooks';
|
|
3
|
+
import type {
|
|
4
|
+
CreateWithHooksProps,
|
|
5
|
+
HookContext,
|
|
6
|
+
UpdateWithHooksProps,
|
|
7
|
+
} from './types';
|
|
8
|
+
import { updateWithHooks } from './update-hooks';
|
|
9
|
+
import { updateManyWithHooks } from './update-many-hooks';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates a set of functions that apply hooks before and after database operations.
|
|
13
|
+
*
|
|
14
|
+
* @param adapter - The database adapter to use for operations
|
|
15
|
+
* @param ctx - Context object containing options and hooks
|
|
16
|
+
* @returns Object with hook-enabled database operation functions
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* This factory function generates hook-enabled versions of common database operations
|
|
20
|
+
* (create, update, updateMany), allowing for consistent hook processing across
|
|
21
|
+
* the application.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const { createWithHooks } = getWithHooks(adapter, {
|
|
26
|
+
* options: c15tOptions,
|
|
27
|
+
* hooks: c15tOptions.databaseHooks || []
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* const subject = await createWithHooks({
|
|
31
|
+
* data: { name: 'Alice' },
|
|
32
|
+
* model: 'subject'
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function getWithHooks(adapter: Adapter, ctx: HookContext) {
|
|
37
|
+
return {
|
|
38
|
+
createWithHooks: <
|
|
39
|
+
TInputData extends Record<string, unknown>,
|
|
40
|
+
TOutputData extends Record<string, unknown> = TInputData,
|
|
41
|
+
>({
|
|
42
|
+
data,
|
|
43
|
+
model,
|
|
44
|
+
customFn,
|
|
45
|
+
context,
|
|
46
|
+
}: CreateWithHooksProps<TInputData>) =>
|
|
47
|
+
createWithHook<TInputData, TOutputData>(adapter, ctx, {
|
|
48
|
+
data,
|
|
49
|
+
model,
|
|
50
|
+
customFn,
|
|
51
|
+
context,
|
|
52
|
+
}),
|
|
53
|
+
|
|
54
|
+
updateWithHooks: <
|
|
55
|
+
TInputData extends Record<string, unknown>,
|
|
56
|
+
TOutputData extends Record<string, unknown> = TInputData,
|
|
57
|
+
>(
|
|
58
|
+
props: UpdateWithHooksProps<TInputData, TOutputData>
|
|
59
|
+
) => updateWithHooks<TInputData, TOutputData>(adapter, ctx, props),
|
|
60
|
+
|
|
61
|
+
updateManyWithHooks: <
|
|
62
|
+
TInputData extends Record<string, unknown>,
|
|
63
|
+
TOutputData extends Record<string, unknown> = TInputData,
|
|
64
|
+
>(
|
|
65
|
+
props: UpdateWithHooksProps<TInputData, TOutputData>
|
|
66
|
+
) => updateManyWithHooks<TInputData, TOutputData>(adapter, ctx, props),
|
|
67
|
+
};
|
|
68
|
+
}
|
package/src/db/index.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Module - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* This module provides a type-safe interface for interacting with the database.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Schema-related exports
|
|
8
|
+
export {
|
|
9
|
+
getConsentTables,
|
|
10
|
+
parseInputData,
|
|
11
|
+
parseEntityOutputData,
|
|
12
|
+
getAllFields,
|
|
13
|
+
} from './schema/index';
|
|
14
|
+
|
|
15
|
+
// Field-related exports
|
|
16
|
+
export type {
|
|
17
|
+
Field,
|
|
18
|
+
FieldType,
|
|
19
|
+
} from './core/fields';
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
stringField,
|
|
23
|
+
numberField,
|
|
24
|
+
booleanField,
|
|
25
|
+
dateField,
|
|
26
|
+
stringArrayField,
|
|
27
|
+
numberArrayField,
|
|
28
|
+
} from './core/fields';
|
|
29
|
+
|
|
30
|
+
export { getMigrations } from './migration/index';
|
|
31
|
+
|
|
32
|
+
export { getAdapter } from './utils/adapter-factory';
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { C15TOptions } from '~/types';
|
|
2
|
+
import { createLogger } from '../../utils/logger';
|
|
3
|
+
import { createKyselyAdapter } from '../adapters/kysely-adapter/dialect';
|
|
4
|
+
import {
|
|
5
|
+
buildColumnAddMigrations,
|
|
6
|
+
buildTableCreateMigrations,
|
|
7
|
+
} from './migration-builders';
|
|
8
|
+
import { createMigrationExecutors } from './migration-execution';
|
|
9
|
+
import { analyzeSchemaChanges } from './schema-comparison';
|
|
10
|
+
import type { MigrationResult } from './types';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Generates database migrations based on schema differences
|
|
14
|
+
*
|
|
15
|
+
* This is the main entry point for the migration system. It orchestrates
|
|
16
|
+
* the entire process from connecting to the database to generating migrations.
|
|
17
|
+
*
|
|
18
|
+
* @param config - C15T configuration containing database connection and schema details
|
|
19
|
+
*
|
|
20
|
+
* @returns MigrationResult containing:
|
|
21
|
+
* - toBeCreated: Tables that need to be created
|
|
22
|
+
* - toBeAdded: Columns that need to be added to existing tables
|
|
23
|
+
* - runMigrations: Function to execute all migrations
|
|
24
|
+
* - compileMigrations: Function to compile migrations to SQL without executing
|
|
25
|
+
*
|
|
26
|
+
* @throws Will exit the process if the Kysely adapter is not available
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Generate migrations and execute them
|
|
31
|
+
* const { runMigrations } = await getMigrations(config);
|
|
32
|
+
* await runMigrations();
|
|
33
|
+
*
|
|
34
|
+
* // Or generate migrations and get the SQL
|
|
35
|
+
* const { compileMigrations } = await getMigrations(config);
|
|
36
|
+
* const sql = await compileMigrations();
|
|
37
|
+
* console.log("Migration SQL:", sql);
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export async function getMigrations(
|
|
41
|
+
config: C15TOptions
|
|
42
|
+
): Promise<MigrationResult> {
|
|
43
|
+
const logger = createLogger(config.logger);
|
|
44
|
+
|
|
45
|
+
// Initialize database connection
|
|
46
|
+
let { kysely: db, databaseType: dbType } = await createKyselyAdapter(config);
|
|
47
|
+
|
|
48
|
+
// Check if the database type is supported
|
|
49
|
+
if (!dbType) {
|
|
50
|
+
logger.warn(
|
|
51
|
+
'Could not determine database type, defaulting to sqlite. Please provide a type in the database options to avoid this.'
|
|
52
|
+
);
|
|
53
|
+
dbType = 'sqlite';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Check if the database is connected
|
|
57
|
+
if (!db) {
|
|
58
|
+
logger.error(
|
|
59
|
+
"Only kysely adapter is supported for migrations. You can use `generate` command to generate the schema, if you're using a different adapter."
|
|
60
|
+
);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Get database metadata
|
|
65
|
+
const tableMetadata = await db.introspection.getTables();
|
|
66
|
+
|
|
67
|
+
// Analyze schema differences
|
|
68
|
+
const { toBeCreated, toBeAdded } = analyzeSchemaChanges(
|
|
69
|
+
config,
|
|
70
|
+
tableMetadata,
|
|
71
|
+
dbType
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
// Build migration operations
|
|
75
|
+
const columnMigrations = buildColumnAddMigrations(db, toBeAdded, dbType);
|
|
76
|
+
const tableMigrations = buildTableCreateMigrations(db, toBeCreated, dbType);
|
|
77
|
+
const migrations = [...columnMigrations, ...tableMigrations];
|
|
78
|
+
|
|
79
|
+
// Create migration executors
|
|
80
|
+
const { runMigrations, compileMigrations } =
|
|
81
|
+
createMigrationExecutors(migrations);
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
toBeCreated,
|
|
85
|
+
toBeAdded,
|
|
86
|
+
runMigrations,
|
|
87
|
+
compileMigrations,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { getConsentTables } from '~/db';
|
|
2
|
+
import type { C15TOptions } from '~/types';
|
|
3
|
+
import { processTablesIntoSchema } from './process-tables';
|
|
4
|
+
import type { SchemaDefinition } from './types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generates a complete database schema from the C15T configuration
|
|
8
|
+
*
|
|
9
|
+
* This function serves as the main entry point for schema generation.
|
|
10
|
+
* It retrieves table definitions from the consent module and processes
|
|
11
|
+
* them into a structured schema representation.
|
|
12
|
+
*
|
|
13
|
+
* @param config - The complete C15T configuration
|
|
14
|
+
* @returns A structured schema definition with fields and table properties
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import type { C15TOptions } from '~/types';
|
|
19
|
+
*
|
|
20
|
+
* // Your configuration
|
|
21
|
+
* const c15tConfig: C15TOptions = {
|
|
22
|
+
* // configuration properties
|
|
23
|
+
* };
|
|
24
|
+
*
|
|
25
|
+
* const schema = getSchema(c15tConfig);
|
|
26
|
+
* // Use schema for migrations or database operations
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export function getSchema(config: C15TOptions): SchemaDefinition {
|
|
30
|
+
try {
|
|
31
|
+
// Retrieve table definitions from the consent module
|
|
32
|
+
const tables = getConsentTables(config);
|
|
33
|
+
|
|
34
|
+
// Process tables into a structured schema
|
|
35
|
+
return processTablesIntoSchema(tables);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
// Log the error or handle it according to your application's needs
|
|
38
|
+
// biome-ignore lint/suspicious/noConsole: <explanation>
|
|
39
|
+
console.error('Failed to generate schema:', error);
|
|
40
|
+
throw new Error(
|
|
41
|
+
`Schema generation failed: ${error instanceof Error ? error.message : String(error)}`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Module
|
|
3
|
+
*
|
|
4
|
+
* This module handles the generation and processing of database schemas
|
|
5
|
+
* based on the C15T configuration. It transforms table definitions into
|
|
6
|
+
* a structured schema representation that can be used for database operations.
|
|
7
|
+
*
|
|
8
|
+
* @module schema
|
|
9
|
+
*
|
|
10
|
+
* Example usage:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { getSchema } from '~/db/migration/get-schema';
|
|
13
|
+
* import type { SchemaDefinition } from '~/db/migration/get-schema';
|
|
14
|
+
*
|
|
15
|
+
* // Get schema based on configuration
|
|
16
|
+
* const schema: SchemaDefinition = getSchema(config);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export { getSchema } from './get-schema';
|
|
20
|
+
export type { SchemaDefinition, TableSchemaDefinition } from './types';
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
import type { EntityName } from '~/db/core/types';
|
|
3
|
+
import type { C15TDBSchema } from '~/db/schema/definition';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Processes field definitions for a table
|
|
7
|
+
*
|
|
8
|
+
* This function handles field attributes, field name mappings, and references
|
|
9
|
+
* to other tables. It ensures that all fields are properly configured and
|
|
10
|
+
* references are correctly set up.
|
|
11
|
+
*
|
|
12
|
+
* @param fields - Raw field definitions from the table
|
|
13
|
+
* @param tables - All available tables for resolving references
|
|
14
|
+
* @returns Processed field definitions
|
|
15
|
+
*/
|
|
16
|
+
export function processFields<T extends EntityName>(
|
|
17
|
+
fields: C15TDBSchema[T]['fields'],
|
|
18
|
+
tables: C15TDBSchema
|
|
19
|
+
): Record<string, Field> {
|
|
20
|
+
const actualFields: Record<string, Field> = {};
|
|
21
|
+
|
|
22
|
+
// Process each field in the fields collection
|
|
23
|
+
for (const [fieldKey, field] of Object.entries(fields)) {
|
|
24
|
+
// Skip undefined fields
|
|
25
|
+
if (!field) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Use the specified fieldName or the key if fieldName is not provided
|
|
30
|
+
const fieldName = field.fieldName || fieldKey;
|
|
31
|
+
|
|
32
|
+
// Cast field to Field to ensure it has the right type
|
|
33
|
+
const typedField = field as Field;
|
|
34
|
+
actualFields[fieldName] = typedField;
|
|
35
|
+
|
|
36
|
+
// Handle references to other tables - first check if the field has a references property
|
|
37
|
+
if (typedField && 'references' in typedField && typedField.references) {
|
|
38
|
+
const EntityName = typedField.references.model as EntityName;
|
|
39
|
+
const refTable = tables[EntityName];
|
|
40
|
+
|
|
41
|
+
// Only set up the reference if the referenced table exists
|
|
42
|
+
if (refTable) {
|
|
43
|
+
// Create a new object for references to avoid modifying the original
|
|
44
|
+
actualFields[fieldName] = {
|
|
45
|
+
...typedField,
|
|
46
|
+
references: {
|
|
47
|
+
model: refTable.entityName,
|
|
48
|
+
entity: refTable.entityName,
|
|
49
|
+
field: typedField.references.field,
|
|
50
|
+
onDelete: typedField.references.onDelete,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
} else {
|
|
54
|
+
// Log warning and remove invalid reference if table not found
|
|
55
|
+
// biome-ignore lint/suspicious/noConsole: no Logger implementation
|
|
56
|
+
console.warn(
|
|
57
|
+
`Warning: Referenced table '${EntityName}' not found for field '${fieldName}'. The reference will be removed to prevent inconsistent state.`
|
|
58
|
+
);
|
|
59
|
+
const { references, ...fieldWithoutRef } = typedField;
|
|
60
|
+
actualFields[fieldName] = fieldWithoutRef;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return actualFields;
|
|
66
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
import type { C15TDBSchema } from '../../schema/definition';
|
|
3
|
+
import { processFields } from './process-fields';
|
|
4
|
+
import type { SchemaDefinition } from './types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Processes table definitions into a structured schema
|
|
8
|
+
*
|
|
9
|
+
* This function transforms the raw table definitions into a formal schema structure,
|
|
10
|
+
* handling field processing, references, and merging of table definitions.
|
|
11
|
+
*
|
|
12
|
+
* @param tables - Raw table definitions from the consent module
|
|
13
|
+
* @returns A structured schema definition
|
|
14
|
+
*/
|
|
15
|
+
export function processTablesIntoSchema(
|
|
16
|
+
tables: C15TDBSchema
|
|
17
|
+
): SchemaDefinition {
|
|
18
|
+
const schema: SchemaDefinition = {};
|
|
19
|
+
|
|
20
|
+
// Process each table in the tables collection
|
|
21
|
+
for (const [key, table] of Object.entries(tables)) {
|
|
22
|
+
// Skip undefined tables
|
|
23
|
+
if (!table) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Process the fields for this table
|
|
28
|
+
let actualFields: Record<string, Field>;
|
|
29
|
+
try {
|
|
30
|
+
const fields = table.fields;
|
|
31
|
+
if (typeof fields !== 'object' || fields === null) {
|
|
32
|
+
// biome-ignore lint/suspicious/noConsole: its okay
|
|
33
|
+
console.warn(
|
|
34
|
+
`Invalid fields for table ${key}: Expected object, got ${typeof fields}`
|
|
35
|
+
);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
actualFields = processFields(fields, tables);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
// biome-ignore lint/suspicious/noConsole: its okay
|
|
41
|
+
console.error(`Error processing fields for table ${key}:`, error);
|
|
42
|
+
continue; // Skip this table if field processing fails
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Determine the model name (use the key if EntityName is not specified)
|
|
46
|
+
const EntityName = table.entityName || key;
|
|
47
|
+
|
|
48
|
+
// Update existing schema entry or create a new one
|
|
49
|
+
if (schema[EntityName]) {
|
|
50
|
+
// Merge with existing schema entry if one exists
|
|
51
|
+
schema[EntityName] = {
|
|
52
|
+
...schema[EntityName],
|
|
53
|
+
fields: {
|
|
54
|
+
...schema[EntityName]?.fields,
|
|
55
|
+
...actualFields,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
} else {
|
|
59
|
+
// Create a new schema entry
|
|
60
|
+
schema[EntityName] = {
|
|
61
|
+
fields: actualFields,
|
|
62
|
+
order: table.order || Number.POSITIVE_INFINITY, // Default to lowest priority
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return schema;
|
|
68
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents a complete table definition within the schema
|
|
5
|
+
*
|
|
6
|
+
* @property fields - Map of field names to their attribute definitions
|
|
7
|
+
* @property order - Priority order for table creation (lower numbers are created first)
|
|
8
|
+
*/
|
|
9
|
+
export interface TableSchemaDefinition {
|
|
10
|
+
fields: Record<string, Field>;
|
|
11
|
+
order: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Represents the complete database schema
|
|
16
|
+
* Maps table names to their definitions
|
|
17
|
+
*/
|
|
18
|
+
export type SchemaDefinition = Record<string, TableSchemaDefinition>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration system for c15t
|
|
3
|
+
*
|
|
4
|
+
* This module provides functionality to generate and execute database migrations
|
|
5
|
+
* based on schema definitions.
|
|
6
|
+
*
|
|
7
|
+
* This is inspired by the better-auth migration system
|
|
8
|
+
* (https://github.com/betterauth/better-auth or relevant link)
|
|
9
|
+
*
|
|
10
|
+
* @module migration
|
|
11
|
+
*/
|
|
12
|
+
export { getMigrations } from './get-migration';
|
|
13
|
+
export type {
|
|
14
|
+
MigrationResult,
|
|
15
|
+
MigrationOperation,
|
|
16
|
+
ColumnsToAdd,
|
|
17
|
+
TableToCreate,
|
|
18
|
+
} from './types';
|