@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,298 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
InferValueType as BaseInferValueType,
|
|
3
|
+
Field,
|
|
4
|
+
FieldType,
|
|
5
|
+
Primitive,
|
|
6
|
+
} from './field-types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Infers the JavaScript type from a field type.
|
|
10
|
+
* Maps database field types to their corresponding TypeScript types.
|
|
11
|
+
*
|
|
12
|
+
* @template TFieldType - The field type to infer from
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Infer string type
|
|
17
|
+
* type NameType = InferValueType<'string'>; // string
|
|
18
|
+
*
|
|
19
|
+
* // Infer array types
|
|
20
|
+
* type TagsType = InferValueType<'string[]'>; // string[]
|
|
21
|
+
* type FlagsType = InferValueType<'boolean[]'>; // boolean[]
|
|
22
|
+
* type DatesType = InferValueType<'date[]'>; // Date[]
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* This type handles both scalar types and array types.
|
|
27
|
+
* For arrays, it maps the base type to an array of that type.
|
|
28
|
+
* This approach is more maintainable and future-proof than
|
|
29
|
+
* explicitly handling each array type.
|
|
30
|
+
*/
|
|
31
|
+
export type InferValueType<TFieldType extends FieldType> =
|
|
32
|
+
BaseInferValueType<TFieldType>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Infers the output type for a single field.
|
|
36
|
+
* Takes into account whether the field is required and returned in API responses.
|
|
37
|
+
*
|
|
38
|
+
* @template TField - The field definition
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* // A required string field
|
|
43
|
+
* const nameField: Field<'string'> = {
|
|
44
|
+
* type: 'string',
|
|
45
|
+
* required: true
|
|
46
|
+
* };
|
|
47
|
+
* type NameOutput = InferFieldOutput<typeof nameField>; // string
|
|
48
|
+
*
|
|
49
|
+
* // An optional number field
|
|
50
|
+
* const ageField: Field<'number'> = {
|
|
51
|
+
* type: 'number',
|
|
52
|
+
* required: false
|
|
53
|
+
* };
|
|
54
|
+
* type AgeOutput = InferFieldOutput<typeof ageField>; // number | null | undefined
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @remarks
|
|
58
|
+
* If a field has `returned: false`, this will be `never` indicating
|
|
59
|
+
* the field should not appear in API responses.
|
|
60
|
+
*/
|
|
61
|
+
export type InferFieldOutput<TField extends Field> =
|
|
62
|
+
TField['returned'] extends false
|
|
63
|
+
? never
|
|
64
|
+
: TField['required'] extends false
|
|
65
|
+
? InferValueType<TField['type']> | null | undefined
|
|
66
|
+
: InferValueType<TField['type']>;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Infers the input type for a single field.
|
|
70
|
+
* Determines the expected type when creating or updating records.
|
|
71
|
+
*
|
|
72
|
+
* @template TField - The field definition
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* // A non-input field (system-generated)
|
|
77
|
+
* const createdAtField: Field<'date'> = {
|
|
78
|
+
* type: 'date',
|
|
79
|
+
* required: true,
|
|
80
|
+
* input: false
|
|
81
|
+
* };
|
|
82
|
+
* type CreatedAtInput = InferFieldInput<typeof createdAtField>; // never
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @remarks
|
|
86
|
+
* If a field has `input: false`, this will be `never` indicating
|
|
87
|
+
* the field should not be provided in API requests.
|
|
88
|
+
*/
|
|
89
|
+
export type InferFieldInput<TField extends Field> =
|
|
90
|
+
TField['input'] extends false
|
|
91
|
+
? never
|
|
92
|
+
: TField['required'] extends true
|
|
93
|
+
? InferValueType<TField['type']>
|
|
94
|
+
: InferValueType<TField['type']> | null | undefined;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Type-safe property mapping helper for field outputs.
|
|
98
|
+
* Maps properties of a record type to their corresponding output types.
|
|
99
|
+
*
|
|
100
|
+
* @template TSchema - The record type containing field definitions
|
|
101
|
+
* @template TKey - The keys of TSchema to map
|
|
102
|
+
*
|
|
103
|
+
* @internal
|
|
104
|
+
* This is an internal helper type used by InferFieldsOutput
|
|
105
|
+
*/
|
|
106
|
+
// type MapToFieldOutputType<TSchema, TKey extends keyof TSchema & string> = {
|
|
107
|
+
// [Property in TKey]: TSchema[Property] extends Field
|
|
108
|
+
// ? InferFieldOutput<TSchema[Property]>
|
|
109
|
+
// : never;
|
|
110
|
+
// };
|
|
111
|
+
|
|
112
|
+
// /**
|
|
113
|
+
// * Type-safe property mapping helper for field inputs.
|
|
114
|
+
// * Maps properties of a record type to their corresponding input types.
|
|
115
|
+
// *
|
|
116
|
+
// * @template TSchema - The record type containing field definitions
|
|
117
|
+
// * @template TKey - The keys of TSchema to map
|
|
118
|
+
// *
|
|
119
|
+
// * @internal
|
|
120
|
+
// * This is an internal helper type used by InferFieldsInput
|
|
121
|
+
// */
|
|
122
|
+
// type MapToFieldInputType<TSchema, TKey extends keyof TSchema & string> = {
|
|
123
|
+
// [Property in TKey]: TSchema[Property] extends Field
|
|
124
|
+
// ? InferFieldInput<TSchema[Property]>
|
|
125
|
+
// : never;
|
|
126
|
+
// };
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Type helper to extract required keys from fields that should be returned.
|
|
130
|
+
* Identifies fields that are both required and returned in API responses.
|
|
131
|
+
*
|
|
132
|
+
* @template TSchema - The record type containing field definitions
|
|
133
|
+
*
|
|
134
|
+
* @internal
|
|
135
|
+
* Used to determine which fields must be present in output types
|
|
136
|
+
*/
|
|
137
|
+
type RequiredKeys<TSchema> = {
|
|
138
|
+
[Key in keyof TSchema]: TSchema[Key] extends Field
|
|
139
|
+
? TSchema[Key]['required'] extends true
|
|
140
|
+
? TSchema[Key]['returned'] extends false
|
|
141
|
+
? never
|
|
142
|
+
: Key
|
|
143
|
+
: never
|
|
144
|
+
: never;
|
|
145
|
+
}[keyof TSchema];
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Type helper to extract optional keys from fields that should be returned.
|
|
149
|
+
* Identifies fields that are optional but should be returned in API responses.
|
|
150
|
+
*
|
|
151
|
+
* @template TSchema - The record type containing field definitions
|
|
152
|
+
*
|
|
153
|
+
* @internal
|
|
154
|
+
* Used to determine which fields may be present in output types
|
|
155
|
+
*/
|
|
156
|
+
type OptionalKeys<TSchema> = {
|
|
157
|
+
[Key in keyof TSchema]: TSchema[Key] extends Field
|
|
158
|
+
? TSchema[Key]['required'] extends true
|
|
159
|
+
? never
|
|
160
|
+
: TSchema[Key]['returned'] extends false
|
|
161
|
+
? never
|
|
162
|
+
: Key
|
|
163
|
+
: never;
|
|
164
|
+
}[keyof TSchema];
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Type helper to extract required keys from fields that accept input.
|
|
168
|
+
* Identifies fields that are both required and accept subject input.
|
|
169
|
+
*
|
|
170
|
+
* @template TSchema - The record type containing field definitions
|
|
171
|
+
*
|
|
172
|
+
* @internal
|
|
173
|
+
* Used to determine which fields must be provided in create operations
|
|
174
|
+
*/
|
|
175
|
+
type RequiredInputKeys<TSchema> = {
|
|
176
|
+
[Key in keyof TSchema]: TSchema[Key] extends Field
|
|
177
|
+
? TSchema[Key]['required'] extends true
|
|
178
|
+
? TSchema[Key]['input'] extends false
|
|
179
|
+
? never
|
|
180
|
+
: Key
|
|
181
|
+
: never
|
|
182
|
+
: never;
|
|
183
|
+
}[keyof TSchema];
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Type helper to extract optional keys from fields that accept input.
|
|
187
|
+
* Identifies fields that are optional and accept subject input.
|
|
188
|
+
*
|
|
189
|
+
* @template TSchema - The record type containing field definitions
|
|
190
|
+
*
|
|
191
|
+
* @internal
|
|
192
|
+
* Used to determine which fields may be provided in create operations
|
|
193
|
+
*/
|
|
194
|
+
type OptionalInputKeys<TSchema> = {
|
|
195
|
+
[Key in keyof TSchema]: TSchema[Key] extends Field
|
|
196
|
+
? TSchema[Key]['required'] extends true
|
|
197
|
+
? never
|
|
198
|
+
: TSchema[Key]['input'] extends false
|
|
199
|
+
? never
|
|
200
|
+
: Key
|
|
201
|
+
: never;
|
|
202
|
+
}[keyof TSchema];
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Infers the output type shape for a set of fields.
|
|
206
|
+
* Handles required/optional status and returned fields.
|
|
207
|
+
* Used to determine the shape of data when retrieving records.
|
|
208
|
+
*
|
|
209
|
+
* @template TSchema - The field definitions to infer from
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```typescript
|
|
213
|
+
* // Define a schema
|
|
214
|
+
* const subjectSchema = {
|
|
215
|
+
* id: stringField({ required: true }),
|
|
216
|
+
* name: stringField({ required: true }),
|
|
217
|
+
* email: stringField({ required: true }),
|
|
218
|
+
* age: numberField({ required: false }),
|
|
219
|
+
* password: stringField({ required: true, returned: false })
|
|
220
|
+
* };
|
|
221
|
+
*
|
|
222
|
+
* // Infer the output type (for API responses)
|
|
223
|
+
* type SubjectOutput = InferFieldsOutput<typeof subjectSchema>;
|
|
224
|
+
* // Result: { id: string; name: string; email: string; age?: number | null | undefined }
|
|
225
|
+
* // Note: 'password' is excluded because returned: false
|
|
226
|
+
* ```
|
|
227
|
+
*
|
|
228
|
+
* @remarks
|
|
229
|
+
* This creates a type with:
|
|
230
|
+
* - Required properties for fields marked required and returned
|
|
231
|
+
* - Optional properties for fields marked optional and returned
|
|
232
|
+
* - Excludes fields marked with returned: false
|
|
233
|
+
*/
|
|
234
|
+
export type InferFieldsOutput<TSchema> = TSchema extends Record<string, Field>
|
|
235
|
+
? {
|
|
236
|
+
[Key in RequiredKeys<TSchema> & string]: InferFieldOutput<TSchema[Key]>;
|
|
237
|
+
} & {
|
|
238
|
+
[Key in OptionalKeys<TSchema> & string]?: InferFieldOutput<TSchema[Key]>;
|
|
239
|
+
}
|
|
240
|
+
: Record<string, never>;
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Infers the input type shape for a set of fields.
|
|
244
|
+
* Handles required/optional status and input fields.
|
|
245
|
+
* Used to determine the shape of data expected when creating records.
|
|
246
|
+
*
|
|
247
|
+
* @template TSchema - The field definitions to infer from
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```typescript
|
|
251
|
+
* // Define a schema
|
|
252
|
+
* const subjectSchema = {
|
|
253
|
+
* id: stringField({ required: true, input: false }), // Auto-generated
|
|
254
|
+
* name: stringField({ required: true }),
|
|
255
|
+
* email: stringField({ required: true }),
|
|
256
|
+
* age: numberField({ required: false }),
|
|
257
|
+
* createdAt: dateField({ required: true, input: false })
|
|
258
|
+
* };
|
|
259
|
+
*
|
|
260
|
+
* // Infer the input type (for create operations)
|
|
261
|
+
* type SubjectInput = InferFieldsInput<typeof subjectSchema>;
|
|
262
|
+
* // Result: { name: string; email: string; age?: number | null | undefined }
|
|
263
|
+
* // Note: 'id' and 'createdAt' are excluded because input: false
|
|
264
|
+
* ```
|
|
265
|
+
*
|
|
266
|
+
* @remarks
|
|
267
|
+
* This creates a type with:
|
|
268
|
+
* - Required properties for fields marked required and input
|
|
269
|
+
* - Optional properties for fields marked optional and input
|
|
270
|
+
* - Excludes fields marked with input: false
|
|
271
|
+
*/
|
|
272
|
+
export type InferFieldsInput<TSchema> = TSchema extends Record<string, Field>
|
|
273
|
+
? {
|
|
274
|
+
[Key in RequiredInputKeys<TSchema> & string]: InferFieldInput<
|
|
275
|
+
TSchema[Key]
|
|
276
|
+
>;
|
|
277
|
+
} & {
|
|
278
|
+
[Key in OptionalInputKeys<TSchema> & string]?: InferFieldInput<
|
|
279
|
+
TSchema[Key]
|
|
280
|
+
>;
|
|
281
|
+
}
|
|
282
|
+
: Record<string, never>;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Type helper for transform function output based on field type.
|
|
286
|
+
* Ensures transform functions return the correct output type.
|
|
287
|
+
*
|
|
288
|
+
* @template TFieldType - The field type that determines the input parameter type
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* ```typescript
|
|
292
|
+
* const dateTransform: TransformOutputFn<'date'> = (value) => value.toISOString();
|
|
293
|
+
* // value is typed as Date
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
export type TransformOutputFn<TFieldType extends FieldType> = (
|
|
297
|
+
value: InferValueType<TFieldType>
|
|
298
|
+
) => Primitive | Promise<Primitive>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import type { C15TOptions } from '~/types';
|
|
2
|
+
import type { InferFieldsInput, InferFieldsOutput } from './field-inference';
|
|
3
|
+
import type { Field } from './field-types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Infers field types from plugin definitions in C15T options.
|
|
7
|
+
* Extracts and combines field definitions from enabled plugins.
|
|
8
|
+
*
|
|
9
|
+
* @template TOptions - The C15T options configuration type
|
|
10
|
+
* @template TSchemaKey - Key for accessing the specific entity schema within plugins
|
|
11
|
+
* @template TFormat - Format to return ('output' or 'input')
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Configuration with plugins defining consent fields
|
|
16
|
+
* interface MyOptions extends C15TOptions {
|
|
17
|
+
* auth: {
|
|
18
|
+
* plugins: {
|
|
19
|
+
* consent: {
|
|
20
|
+
* enabled: true,
|
|
21
|
+
* subjectFields: {
|
|
22
|
+
* acceptedTerms: {
|
|
23
|
+
* type: 'boolean',
|
|
24
|
+
* required: true
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* // Infer the output types for subject fields from plugins
|
|
33
|
+
* type SubjectPluginFields = InferFieldsFromPlugins<MyOptions, 'subjectFields', 'output'>;
|
|
34
|
+
* // Results in { acceptedTerms: boolean }
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @remarks
|
|
38
|
+
* This type helper allows plugins to extend entity schemas with their own fields.
|
|
39
|
+
* It walks through all enabled plugins, extracts fields for the specified entity type,
|
|
40
|
+
* and combines them into a single type.
|
|
41
|
+
*/
|
|
42
|
+
export type InferFieldsFromPlugins<
|
|
43
|
+
TOptions extends C15TOptions,
|
|
44
|
+
TSchemaKey extends string,
|
|
45
|
+
TFormat extends 'output' | 'input' = 'output',
|
|
46
|
+
> = InferFieldsFromObjectPath<
|
|
47
|
+
TOptions,
|
|
48
|
+
[string, 'plugins', string, TSchemaKey],
|
|
49
|
+
TFormat
|
|
50
|
+
>;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Infers field types from C15T options for a specific module.
|
|
54
|
+
* Used to extract additional fields defined in options.
|
|
55
|
+
*
|
|
56
|
+
* @template TOptions - The C15T options configuration type
|
|
57
|
+
* @template TSchemaKey - Key for accessing the specific entity schema
|
|
58
|
+
* @template TFormat - Format to return ('output' or 'input')
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* // Configuration with additional subject fields
|
|
63
|
+
* interface MyOptions extends C15TOptions {
|
|
64
|
+
* auth: {
|
|
65
|
+
* subjectFields: {
|
|
66
|
+
* profile: {
|
|
67
|
+
* type: 'string',
|
|
68
|
+
* required: false
|
|
69
|
+
* }
|
|
70
|
+
* }
|
|
71
|
+
* }
|
|
72
|
+
* }
|
|
73
|
+
*
|
|
74
|
+
* // Infer the output types for subject fields from options
|
|
75
|
+
* type SubjectAdditionalFields = InferFieldsFromOptions<MyOptions, 'subject', 'subjectFields', 'output'>;
|
|
76
|
+
* // Results in { profile?: string | null | undefined }
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* TSchemaKey can be one of:
|
|
81
|
+
* - Single string key like 'subjectFields' to access TOptions[T]['subjectFields']
|
|
82
|
+
* - Array of strings for a nested path like ['subject', 'subjectFields']
|
|
83
|
+
*
|
|
84
|
+
* This type helper extracts custom fields defined directly in the options object,
|
|
85
|
+
* rather than those defined in plugins.
|
|
86
|
+
*/
|
|
87
|
+
export type InferFieldsFromOptions<
|
|
88
|
+
TOptions extends C15TOptions,
|
|
89
|
+
TModuleKey extends keyof TOptions & string,
|
|
90
|
+
TSchemaKey extends string,
|
|
91
|
+
TFormat extends 'output' | 'input' = 'output',
|
|
92
|
+
> = InferFieldsFromObjectPath<TOptions, [TModuleKey, TSchemaKey], TFormat>;
|
|
93
|
+
|
|
94
|
+
// Internal helper type
|
|
95
|
+
type InferFieldsFromObjectPath<
|
|
96
|
+
TOptions,
|
|
97
|
+
TPath extends (string | number)[],
|
|
98
|
+
TFormat extends 'output' | 'input',
|
|
99
|
+
> = TFormat extends 'output'
|
|
100
|
+
? InferFieldsOutput<GetFieldsFromPath<TOptions, TPath>>
|
|
101
|
+
: InferFieldsInput<GetFieldsFromPath<TOptions, TPath>>;
|
|
102
|
+
|
|
103
|
+
// Internal helper type for accessing nested paths
|
|
104
|
+
type GetFieldsFromPath<
|
|
105
|
+
TOptions,
|
|
106
|
+
TPath extends (string | number)[],
|
|
107
|
+
> = TPath extends [infer TFirst, ...infer TRest]
|
|
108
|
+
? TFirst extends keyof TOptions
|
|
109
|
+
? TRest extends (string | number)[]
|
|
110
|
+
? TRest['length'] extends 0
|
|
111
|
+
? TOptions[TFirst] extends Record<string, Field>
|
|
112
|
+
? TOptions[TFirst]
|
|
113
|
+
: never
|
|
114
|
+
: GetFieldsFromPath<TOptions[TFirst], TRest>
|
|
115
|
+
: never
|
|
116
|
+
: TFirst extends string
|
|
117
|
+
? TOptions extends Record<string, unknown>
|
|
118
|
+
? TRest extends (string | number)[]
|
|
119
|
+
? TRest['length'] extends 0
|
|
120
|
+
? {
|
|
121
|
+
[K in keyof TOptions]: K extends TFirst
|
|
122
|
+
? TOptions[K] extends Record<string, Field>
|
|
123
|
+
? TOptions[K]
|
|
124
|
+
: never
|
|
125
|
+
: never;
|
|
126
|
+
}[keyof TOptions & TFirst]
|
|
127
|
+
: {
|
|
128
|
+
[K in keyof TOptions]: K extends TFirst
|
|
129
|
+
? GetFieldsFromPath<TOptions[K], TRest>
|
|
130
|
+
: never;
|
|
131
|
+
}[keyof TOptions & TFirst]
|
|
132
|
+
: never
|
|
133
|
+
: never
|
|
134
|
+
: never
|
|
135
|
+
: Record<string, never>;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The set of field types supported by C15T.
|
|
3
|
+
* Specifies the data types that can be used for database fields.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* These types determine how data is stored, validated, and transformed.
|
|
7
|
+
* The system supports both scalar types and array types.
|
|
8
|
+
*/
|
|
9
|
+
export type FieldType =
|
|
10
|
+
| 'string'
|
|
11
|
+
| 'number'
|
|
12
|
+
| 'boolean'
|
|
13
|
+
| 'date'
|
|
14
|
+
| 'timezone'
|
|
15
|
+
| 'json'
|
|
16
|
+
| 'string[]'
|
|
17
|
+
| 'number[]';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Primitive types that can be stored in the database.
|
|
21
|
+
*/
|
|
22
|
+
export type Primitive = string | number | boolean | Date | null | undefined;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* JSON value types that can be stored in JSON fields.
|
|
26
|
+
*/
|
|
27
|
+
export type JsonValue =
|
|
28
|
+
| string
|
|
29
|
+
| number
|
|
30
|
+
| boolean
|
|
31
|
+
| null
|
|
32
|
+
| JsonValue[]
|
|
33
|
+
| { [key: string]: JsonValue };
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Configuration options for a database field.
|
|
37
|
+
* Defines the behavior, validation, and transformations for a field.
|
|
38
|
+
*
|
|
39
|
+
* @template TFieldType - The data type of the field
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* // Basic required string field
|
|
44
|
+
* const basicConfig: FieldConfig<'string'> = {
|
|
45
|
+
* type: 'string',
|
|
46
|
+
* required: true
|
|
47
|
+
* };
|
|
48
|
+
*
|
|
49
|
+
* // Optional number field with validation
|
|
50
|
+
* const numberConfig: FieldConfig<'number'> = {
|
|
51
|
+
* type: 'number',
|
|
52
|
+
* required: false,
|
|
53
|
+
* validator: (value) => value >= 0 ? null : 'Must be non-negative'
|
|
54
|
+
* };
|
|
55
|
+
*
|
|
56
|
+
* // Date field with transform and default
|
|
57
|
+
* const dateConfig: FieldConfig<'date'> = {
|
|
58
|
+
* type: 'date',
|
|
59
|
+
* defaultValue: () => new Date(),
|
|
60
|
+
* transform: {
|
|
61
|
+
* output: (date) => date.toISOString()
|
|
62
|
+
* }
|
|
63
|
+
* };
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @remarks
|
|
67
|
+
* This is the core configuration object that defines how a field behaves
|
|
68
|
+
* in the database schema. It controls whether the field is required, how
|
|
69
|
+
* it's transformed, validated, and more.
|
|
70
|
+
*/
|
|
71
|
+
export type FieldConfig<TFieldType extends FieldType> = {
|
|
72
|
+
/**
|
|
73
|
+
* The data type of the field.
|
|
74
|
+
* Determines how the field is stored and validated.
|
|
75
|
+
*/
|
|
76
|
+
type: TFieldType;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Whether the field is required for record creation.
|
|
80
|
+
* If true, the field must be provided when creating a record.
|
|
81
|
+
* @default true
|
|
82
|
+
*/
|
|
83
|
+
required?: boolean;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Whether the field should be returned in API responses.
|
|
87
|
+
* If false, the field will be excluded from query results.
|
|
88
|
+
* @default true
|
|
89
|
+
*/
|
|
90
|
+
returned?: boolean;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Whether the field accepts input from API requests.
|
|
94
|
+
* If false, the field cannot be set directly by clients.
|
|
95
|
+
* @default true
|
|
96
|
+
*/
|
|
97
|
+
input?: boolean;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Default value for the field when not provided in create operations.
|
|
101
|
+
* Can be a static value or a function that returns a value.
|
|
102
|
+
*/
|
|
103
|
+
defaultValue?: Primitive | (() => Primitive);
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Functions to transform the field value during input/output operations.
|
|
107
|
+
* Can modify values before storage or after retrieval.
|
|
108
|
+
*/
|
|
109
|
+
transform?: {
|
|
110
|
+
/**
|
|
111
|
+
* Transform function for field input.
|
|
112
|
+
* Applied when data is being saved to the database.
|
|
113
|
+
*/
|
|
114
|
+
input?: (
|
|
115
|
+
value: InferValueType<TFieldType>
|
|
116
|
+
) => Primitive | Promise<Primitive>;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Transform function for field output.
|
|
120
|
+
* Applied when data is being retrieved from the database.
|
|
121
|
+
*/
|
|
122
|
+
output?: (
|
|
123
|
+
value: unknown
|
|
124
|
+
) => InferValueType<TFieldType> | Promise<InferValueType<TFieldType>>;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Custom validation function for the field.
|
|
129
|
+
* Returns null if valid, or an error message if invalid.
|
|
130
|
+
*/
|
|
131
|
+
validator?: (value: InferValueType<TFieldType>) => string | null;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Whether the field should be unique across all records.
|
|
135
|
+
* If true, no two records can have the same value for this field.
|
|
136
|
+
*/
|
|
137
|
+
unique?: boolean;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Whether the field should be indexed for faster lookups.
|
|
141
|
+
* If true, an index will be created for this field.
|
|
142
|
+
*/
|
|
143
|
+
indexed?: boolean;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Whether the field should be sortable in queries.
|
|
147
|
+
* If false, the field cannot be used in ORDER BY clauses.
|
|
148
|
+
* @default true
|
|
149
|
+
*/
|
|
150
|
+
sortable?: boolean;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Custom database field name.
|
|
154
|
+
* If not provided, the field name will be used as-is.
|
|
155
|
+
*/
|
|
156
|
+
fieldName?: string;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Whether the field should be stored as a bigint.
|
|
160
|
+
* Only applicable to number fields.
|
|
161
|
+
* @default false
|
|
162
|
+
*/
|
|
163
|
+
bigint?: boolean;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* References to other models.
|
|
167
|
+
*/
|
|
168
|
+
references?: {
|
|
169
|
+
model: string;
|
|
170
|
+
entity: string;
|
|
171
|
+
field: string;
|
|
172
|
+
onDelete: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Helper type to infer the base JavaScript type from a field type.
|
|
178
|
+
*/
|
|
179
|
+
export type InferValueType<TFieldType extends FieldType> =
|
|
180
|
+
TFieldType extends 'string'
|
|
181
|
+
? string
|
|
182
|
+
: TFieldType extends 'number'
|
|
183
|
+
? number
|
|
184
|
+
: TFieldType extends 'boolean'
|
|
185
|
+
? boolean
|
|
186
|
+
: TFieldType extends 'date'
|
|
187
|
+
? Date
|
|
188
|
+
: TFieldType extends 'timezone'
|
|
189
|
+
? string
|
|
190
|
+
: TFieldType extends 'json'
|
|
191
|
+
? JsonValue
|
|
192
|
+
: TFieldType extends 'string[]'
|
|
193
|
+
? string[]
|
|
194
|
+
: TFieldType extends 'number[]'
|
|
195
|
+
? number[]
|
|
196
|
+
: never;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* The complete definition of a database field.
|
|
200
|
+
* Combines the field type with its configuration options.
|
|
201
|
+
*
|
|
202
|
+
* @template TFieldType - The data type of the field
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```typescript
|
|
206
|
+
* // A simple string field
|
|
207
|
+
* const nameField: Field<'string'> = {
|
|
208
|
+
* type: 'string',
|
|
209
|
+
* required: true,
|
|
210
|
+
* unique: true
|
|
211
|
+
* };
|
|
212
|
+
*
|
|
213
|
+
* // A number field with validation
|
|
214
|
+
* const ageField: Field<'number'> = {
|
|
215
|
+
* type: 'number',
|
|
216
|
+
* required: true,
|
|
217
|
+
* validator: (value) => value >= 0 ? null : 'Age must be non-negative'
|
|
218
|
+
* };
|
|
219
|
+
*
|
|
220
|
+
* // A date field with transforms
|
|
221
|
+
* const createdAtField: Field<'date'> = {
|
|
222
|
+
* type: 'date',
|
|
223
|
+
* required: true,
|
|
224
|
+
* input: false,
|
|
225
|
+
* defaultValue: () => new Date(),
|
|
226
|
+
* transform: {
|
|
227
|
+
* output: (date) => date.toISOString()
|
|
228
|
+
* }
|
|
229
|
+
* };
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
export type Field<TFieldType extends FieldType = FieldType> =
|
|
233
|
+
FieldConfig<TFieldType>;
|