@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,648 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
EntityInput,
|
|
3
|
+
EntityName,
|
|
4
|
+
EntityOutput,
|
|
5
|
+
EntityTypeMap,
|
|
6
|
+
} from '~/db/core/types';
|
|
7
|
+
import type { C15TOptions } from '~/types';
|
|
8
|
+
import { getConsentTables } from '../..';
|
|
9
|
+
|
|
10
|
+
import { type Field, type Primitive, generateId } from '~/db/core/fields';
|
|
11
|
+
|
|
12
|
+
import type { Adapter, TableFields, Where } from '../types';
|
|
13
|
+
import { applyDefaultValue } from '../utils';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* In-memory database structure for the memory adapter
|
|
17
|
+
*
|
|
18
|
+
* This interface defines the structure of the in-memory database used by the
|
|
19
|
+
* memory adapter. It's a simple key-value store where each key represents a
|
|
20
|
+
* collection/table name, and the value is an array of records.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const db: MemoryDB = {
|
|
25
|
+
* consent: [
|
|
26
|
+
* { id: 'cns_0i1dv2gasuubm7xlm2qj', subjectId: 'sub_x1pftyoufsm7xgo1kv', purposeId: 'pur_e8zyhgozr3im7xj59it', allowed: true },
|
|
27
|
+
* { id: 'cns_yxfwrgvn2bhm7xkjcsv', subjectId: 'sub_37lpazdq73qm7xiia1p', purposeId: 'pur_vv76m0rtb2dm7xj59gt', allowed: false }
|
|
28
|
+
* ],
|
|
29
|
+
* consentPurpose: [
|
|
30
|
+
* { id: 'pol_1116FRpKFncEvRmVbnJW6JhMxD', name: 'Marketing', description: 'For sending promotional materials' }
|
|
31
|
+
* ]
|
|
32
|
+
* };
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export interface MemoryDB {
|
|
36
|
+
[key: string]: Record<string, unknown>[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Interface for where conditions in memory adapter queries
|
|
40
|
+
*
|
|
41
|
+
* This interface defines the structure of query conditions used
|
|
42
|
+
* in database operations. It supports various operators and connectors
|
|
43
|
+
* for building complex query conditions.
|
|
44
|
+
*
|
|
45
|
+
* @typeParam EntityType - The entity type being queried
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* // Simple equality condition
|
|
50
|
+
* const whereCondition: WhereCondition<'consent'> = {
|
|
51
|
+
* field: 'subjectId',
|
|
52
|
+
* value: 'sub_x1pftyoufsm7xgo1kv'
|
|
53
|
+
* };
|
|
54
|
+
*
|
|
55
|
+
* // More complex condition with operator
|
|
56
|
+
* const complexCondition: WhereCondition<'consent'> = {
|
|
57
|
+
* field: 'purposeId',
|
|
58
|
+
* value: ['pur_uvrr67my07m7xj2bta', 'pur_e8zyhgozr3im7xj59it'],
|
|
59
|
+
* operator: 'in'
|
|
60
|
+
* };
|
|
61
|
+
*
|
|
62
|
+
* // Using OR connector
|
|
63
|
+
* const orCondition: WhereCondition<'consent'> = {
|
|
64
|
+
* field: 'purposeId',
|
|
65
|
+
* value: 'pur_e8zyhgozr3im7xj59it',
|
|
66
|
+
* connector: 'OR' // Will match this OR the previous condition
|
|
67
|
+
* };
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
interface WhereCondition<EntityType extends EntityName> {
|
|
71
|
+
/**
|
|
72
|
+
* The field to apply the condition to
|
|
73
|
+
*/
|
|
74
|
+
field: keyof EntityTypeMap[EntityType] | 'id';
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The value to compare against
|
|
78
|
+
*/
|
|
79
|
+
value: unknown;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The operator to use for comparison
|
|
83
|
+
*
|
|
84
|
+
* @default "="
|
|
85
|
+
*/
|
|
86
|
+
operator?:
|
|
87
|
+
| 'in'
|
|
88
|
+
| 'eq'
|
|
89
|
+
| 'ne'
|
|
90
|
+
| 'contains'
|
|
91
|
+
| 'starts_with'
|
|
92
|
+
| 'ends_with'
|
|
93
|
+
| '=';
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The logical connector to use with previous conditions.
|
|
97
|
+
* When set to 'OR', the condition will be combined with previous conditions using OR logic.
|
|
98
|
+
* When set to 'AND' or omitted, conditions will be combined using AND logic.
|
|
99
|
+
*
|
|
100
|
+
* @default "AND"
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* // Match records where purposeId is 'pur_e8zyhgozr3im7xj59it' OR subjectId is 'sub_x1pftyoufsm7xgo1kv'
|
|
105
|
+
* const where = [
|
|
106
|
+
* { field: 'purposeId', value: 'pur_e8zyhgozr3im7xj59it' },
|
|
107
|
+
* { field: 'subjectId', value: 'sub_x1pftyoufsm7xgo1kv', connector: 'OR' }
|
|
108
|
+
* ];
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
connector?: 'AND' | 'OR';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Creates entity transformation utilities for the memory adapter
|
|
116
|
+
*
|
|
117
|
+
* This function creates helper methods for converting between c15t's
|
|
118
|
+
* data format and the in-memory format, handling field mapping,
|
|
119
|
+
* value transformation, and query filtering.
|
|
120
|
+
*
|
|
121
|
+
* @internal This function is used internally by the memoryAdapter
|
|
122
|
+
* @param options - The c15t options
|
|
123
|
+
* @returns An object containing entity transformation utilities
|
|
124
|
+
*/
|
|
125
|
+
const createEntityTransformer = (options: C15TOptions) => {
|
|
126
|
+
const schema = getConsentTables(options);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Gets the database field name for a model field
|
|
130
|
+
*
|
|
131
|
+
* @internal
|
|
132
|
+
* @typeParam EntityType - The entity type
|
|
133
|
+
* @param model - The model name
|
|
134
|
+
* @param field - The field name in the c15t model
|
|
135
|
+
* @returns The corresponding field name in the database schema
|
|
136
|
+
*/
|
|
137
|
+
function getField<EntityType extends EntityName>(
|
|
138
|
+
model: EntityType,
|
|
139
|
+
field: keyof EntityTypeMap[EntityType] | string
|
|
140
|
+
): string {
|
|
141
|
+
if (field === 'id') {
|
|
142
|
+
return field;
|
|
143
|
+
}
|
|
144
|
+
const modelFields = schema[model]?.fields;
|
|
145
|
+
const f = modelFields
|
|
146
|
+
? (modelFields as Record<string, Field>)[field as string]
|
|
147
|
+
: undefined;
|
|
148
|
+
return f?.fieldName || (field as string);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
/**
|
|
153
|
+
* Transforms input data from c15t format to database format
|
|
154
|
+
*
|
|
155
|
+
* @internal
|
|
156
|
+
* @typeParam EntityType - The entity type
|
|
157
|
+
* @param data - The data to transform
|
|
158
|
+
* @param model - The model name
|
|
159
|
+
* @param action - Whether this is a create or update operation
|
|
160
|
+
* @returns Transformed data for database insertion/update
|
|
161
|
+
*/
|
|
162
|
+
transformInput<EntityType extends EntityName>(
|
|
163
|
+
data: EntityInput<EntityType>,
|
|
164
|
+
model: EntityType,
|
|
165
|
+
action: 'update' | 'create'
|
|
166
|
+
): Record<string, unknown> {
|
|
167
|
+
const transformedData: Record<string, unknown> =
|
|
168
|
+
action === 'update'
|
|
169
|
+
? {}
|
|
170
|
+
: {
|
|
171
|
+
id: options.advanced?.generateId
|
|
172
|
+
? options.advanced.generateId({
|
|
173
|
+
model,
|
|
174
|
+
})
|
|
175
|
+
: data.id || generateId(schema[model].entityPrefix),
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
const fields = schema[model].fields;
|
|
179
|
+
for (const field in fields) {
|
|
180
|
+
if (Object.hasOwn(fields, field)) {
|
|
181
|
+
const value = data[field as keyof typeof data];
|
|
182
|
+
const fieldInfo = (fields as Record<string, Field>)[field];
|
|
183
|
+
if (value === undefined && !fieldInfo?.defaultValue) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const fieldName = fieldInfo?.fieldName || field;
|
|
187
|
+
transformedData[fieldName] = applyDefaultValue(
|
|
188
|
+
value as Primitive,
|
|
189
|
+
fieldInfo as Field,
|
|
190
|
+
action
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return transformedData;
|
|
195
|
+
},
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Transforms output data from database format to c15t format
|
|
199
|
+
*
|
|
200
|
+
* @internal
|
|
201
|
+
* @typeParam EntityType - The entity type
|
|
202
|
+
* @param data - The data from the database
|
|
203
|
+
* @param model - The model name
|
|
204
|
+
* @param select - Optional array of fields to select
|
|
205
|
+
* @returns Transformed data for c15t or null if no data
|
|
206
|
+
*/
|
|
207
|
+
transformOutput<EntityType extends EntityName>(
|
|
208
|
+
data: Record<string, unknown> | null,
|
|
209
|
+
model: EntityType,
|
|
210
|
+
select: string[] = []
|
|
211
|
+
): EntityOutput<EntityType> | null {
|
|
212
|
+
if (!data) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Initialize with empty object
|
|
217
|
+
const transformedData: Record<string, unknown> = {};
|
|
218
|
+
|
|
219
|
+
// Handle ID separately
|
|
220
|
+
const hasId = data.id || data._id;
|
|
221
|
+
if (hasId && (select.length === 0 || select.includes('id'))) {
|
|
222
|
+
transformedData.id = data.id;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const tableSchema = schema[model].fields;
|
|
226
|
+
for (const key in tableSchema) {
|
|
227
|
+
if (select.length && !select.includes(key)) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const field = (tableSchema as Record<string, Field>)[key];
|
|
231
|
+
if (field) {
|
|
232
|
+
transformedData[key] = data[field.fieldName || key];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return transformedData as EntityOutput<EntityType>;
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Filters records based on where conditions
|
|
240
|
+
*
|
|
241
|
+
* @internal
|
|
242
|
+
* @typeParam EntityType - The entity type
|
|
243
|
+
* @param where - Array of where conditions
|
|
244
|
+
* @param table - The table of records to filter
|
|
245
|
+
* @param model - The model name
|
|
246
|
+
* @returns Filtered array of records
|
|
247
|
+
* @throws {Error} When an invalid value is provided for 'in' operator
|
|
248
|
+
*/
|
|
249
|
+
convertWhereClause<EntityType extends EntityName>(
|
|
250
|
+
where: WhereCondition<EntityType>[],
|
|
251
|
+
table: Record<string, unknown>[],
|
|
252
|
+
model: EntityType
|
|
253
|
+
): Record<string, unknown>[] {
|
|
254
|
+
return table.filter((record) => {
|
|
255
|
+
return where.every((clause) => {
|
|
256
|
+
const { field: _field, value, operator = '=' } = clause;
|
|
257
|
+
const field = getField(model, _field);
|
|
258
|
+
|
|
259
|
+
if (operator === 'in') {
|
|
260
|
+
if (!Array.isArray(value)) {
|
|
261
|
+
throw new Error('Value must be an array');
|
|
262
|
+
}
|
|
263
|
+
return value.includes(record[field]);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (operator === 'contains') {
|
|
267
|
+
const fieldValue = record[field];
|
|
268
|
+
return (
|
|
269
|
+
typeof fieldValue === 'string' &&
|
|
270
|
+
fieldValue.includes(value as string)
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if (operator === 'starts_with') {
|
|
275
|
+
const fieldValue = record[field];
|
|
276
|
+
return (
|
|
277
|
+
typeof fieldValue === 'string' &&
|
|
278
|
+
fieldValue.startsWith(value as string)
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (operator === 'ends_with') {
|
|
283
|
+
const fieldValue = record[field];
|
|
284
|
+
return (
|
|
285
|
+
typeof fieldValue === 'string' &&
|
|
286
|
+
fieldValue.endsWith(value as string)
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (operator === 'eq') {
|
|
291
|
+
return record[field] === value;
|
|
292
|
+
}
|
|
293
|
+
if (operator === 'ne') {
|
|
294
|
+
return record[field] !== value;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Default case (equals)
|
|
298
|
+
return record[field] === value;
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
},
|
|
302
|
+
getField,
|
|
303
|
+
};
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Creates a c15t adapter for in-memory storage
|
|
308
|
+
*
|
|
309
|
+
* This factory function creates an adapter that allows c15t to use in-memory
|
|
310
|
+
* storage for development, testing, or simple production use cases where
|
|
311
|
+
* persistence is not required.
|
|
312
|
+
*
|
|
313
|
+
* @param db - The in-memory database object
|
|
314
|
+
* @returns A c15t adapter factory function
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* ```typescript
|
|
318
|
+
* import { c15tInstance } from '@c15t/backend';
|
|
319
|
+
* import { memoryAdapter } from '@c15t/adapters/memory';
|
|
320
|
+
*
|
|
321
|
+
* // Create an empty in-memory database
|
|
322
|
+
* const db = {};
|
|
323
|
+
*
|
|
324
|
+
* // Create the c15t instance with memory adapter
|
|
325
|
+
* const c15t = c15tInstance({
|
|
326
|
+
* storage: memoryAdapter(db),
|
|
327
|
+
* secret: process.env.SECRET_KEY
|
|
328
|
+
* });
|
|
329
|
+
*
|
|
330
|
+
* // The database will be populated as records are created
|
|
331
|
+
* // You can also inspect the database during development
|
|
332
|
+
* console.log(db);
|
|
333
|
+
* ```
|
|
334
|
+
*/
|
|
335
|
+
export const memoryAdapter =
|
|
336
|
+
(db: MemoryDB) =>
|
|
337
|
+
(options: C15TOptions): Adapter => {
|
|
338
|
+
const { transformInput, transformOutput, convertWhereClause, getField } =
|
|
339
|
+
createEntityTransformer(options);
|
|
340
|
+
|
|
341
|
+
return {
|
|
342
|
+
id: 'memory',
|
|
343
|
+
/**
|
|
344
|
+
* Creates a new record in the in-memory database
|
|
345
|
+
*
|
|
346
|
+
* @typeParam Model - The model type
|
|
347
|
+
* @typeParam Data - The data type
|
|
348
|
+
* @typeParam Result - The result type
|
|
349
|
+
* @param data - The data for the create operation
|
|
350
|
+
* @returns The created record
|
|
351
|
+
*/
|
|
352
|
+
async create<
|
|
353
|
+
Model extends EntityName,
|
|
354
|
+
Data extends Record<string, unknown>,
|
|
355
|
+
Result extends TableFields<Model>,
|
|
356
|
+
>(data: {
|
|
357
|
+
model: Model;
|
|
358
|
+
data: Data;
|
|
359
|
+
select?: (keyof Result)[];
|
|
360
|
+
}): Promise<Result> {
|
|
361
|
+
const { model, data: values, select } = data;
|
|
362
|
+
const transformed = transformInput(
|
|
363
|
+
values as EntityInput<Model>,
|
|
364
|
+
model,
|
|
365
|
+
'create'
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
// Initialize array if it doesn't exist
|
|
369
|
+
if (!db[model]) {
|
|
370
|
+
db[model] = [];
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
db[model].push(transformed);
|
|
374
|
+
return transformOutput(
|
|
375
|
+
transformed,
|
|
376
|
+
model,
|
|
377
|
+
select as string[]
|
|
378
|
+
) as Result;
|
|
379
|
+
},
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Finds a single record matching the where conditions
|
|
383
|
+
*
|
|
384
|
+
* @typeParam Model - The model type
|
|
385
|
+
* @typeParam Result - The result type
|
|
386
|
+
* @param data - The data for the find operation
|
|
387
|
+
* @returns The found record or null if not found
|
|
388
|
+
*/
|
|
389
|
+
async findOne<
|
|
390
|
+
Model extends EntityName,
|
|
391
|
+
Result extends TableFields<Model>,
|
|
392
|
+
>(data: {
|
|
393
|
+
model: Model;
|
|
394
|
+
where: Where<Model>;
|
|
395
|
+
select?: (keyof Result)[];
|
|
396
|
+
}): Promise<Result | null> {
|
|
397
|
+
const { model, where, select } = data;
|
|
398
|
+
const table = db[model] || [];
|
|
399
|
+
// Convert Where from Adapter type to internal WhereCondition type
|
|
400
|
+
const whereArray = (Array.isArray(where)
|
|
401
|
+
? where
|
|
402
|
+
: [where]) as unknown as WhereCondition<Model>[];
|
|
403
|
+
const res = convertWhereClause(whereArray, table, model);
|
|
404
|
+
const record = res[0] || null;
|
|
405
|
+
return transformOutput(
|
|
406
|
+
record,
|
|
407
|
+
model,
|
|
408
|
+
select as string[]
|
|
409
|
+
) as Result | null;
|
|
410
|
+
},
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Finds multiple records matching the where conditions
|
|
414
|
+
*
|
|
415
|
+
* @typeParam Model - The model type
|
|
416
|
+
* @typeParam Result - The result type
|
|
417
|
+
* @param data - The data for the find operation
|
|
418
|
+
* @returns Array of matching records
|
|
419
|
+
*/
|
|
420
|
+
async findMany<
|
|
421
|
+
Model extends EntityName,
|
|
422
|
+
Result extends TableFields<Model>,
|
|
423
|
+
>(data: {
|
|
424
|
+
model: Model;
|
|
425
|
+
where?: Where<Model>;
|
|
426
|
+
limit?: number;
|
|
427
|
+
sortBy?: { field: 'id' | keyof Result; direction: 'asc' | 'desc' };
|
|
428
|
+
offset?: number;
|
|
429
|
+
}): Promise<Result[]> {
|
|
430
|
+
const { model, where, sortBy, limit, offset } = data;
|
|
431
|
+
let table = db[model] || [];
|
|
432
|
+
|
|
433
|
+
if (where) {
|
|
434
|
+
// Convert Where from Adapter type to internal WhereCondition type
|
|
435
|
+
const whereArray = (Array.isArray(where)
|
|
436
|
+
? where
|
|
437
|
+
: [where]) as unknown as WhereCondition<Model>[];
|
|
438
|
+
table = convertWhereClause(whereArray, table, model);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
if (sortBy) {
|
|
442
|
+
const field = getField(model, sortBy.field as string);
|
|
443
|
+
table = [...table].sort((a, b) => {
|
|
444
|
+
if (sortBy.direction === 'asc') {
|
|
445
|
+
return (a[field] as number) > (b[field] as number) ? 1 : -1;
|
|
446
|
+
}
|
|
447
|
+
return (a[field] as number) < (b[field] as number) ? 1 : -1;
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
let result = table;
|
|
452
|
+
if (offset !== undefined) {
|
|
453
|
+
result = result.slice(offset);
|
|
454
|
+
}
|
|
455
|
+
if (limit !== undefined) {
|
|
456
|
+
result = result.slice(0, limit);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
return result.map((record) => transformOutput(record, model) as Result);
|
|
460
|
+
},
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Counts records matching the where conditions
|
|
464
|
+
*
|
|
465
|
+
* @typeParam Model - The model type
|
|
466
|
+
* @param data - The data for the count operation
|
|
467
|
+
* @returns The count of matching records
|
|
468
|
+
*/
|
|
469
|
+
async count<Model extends EntityName>(data: {
|
|
470
|
+
model: Model;
|
|
471
|
+
where?: Where<Model>;
|
|
472
|
+
}): Promise<number> {
|
|
473
|
+
const { model, where } = data;
|
|
474
|
+
const table = db[model] || [];
|
|
475
|
+
|
|
476
|
+
if (!where) {
|
|
477
|
+
return table.length;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// Convert Where from Adapter type to internal WhereCondition type
|
|
481
|
+
const whereArray = (Array.isArray(where)
|
|
482
|
+
? where
|
|
483
|
+
: [where]) as unknown as WhereCondition<Model>[];
|
|
484
|
+
const filtered = convertWhereClause(whereArray, table, model);
|
|
485
|
+
return filtered.length;
|
|
486
|
+
},
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Updates a single record matching the where conditions
|
|
490
|
+
*
|
|
491
|
+
* @typeParam Model - The model type
|
|
492
|
+
* @typeParam Result - The result type
|
|
493
|
+
* @param data - The data for the update operation
|
|
494
|
+
* @returns The updated record or null if not found
|
|
495
|
+
*/
|
|
496
|
+
async update<
|
|
497
|
+
Model extends EntityName,
|
|
498
|
+
Result extends TableFields<Model>,
|
|
499
|
+
>(data: {
|
|
500
|
+
model: Model;
|
|
501
|
+
where: Where<Model>;
|
|
502
|
+
update: EntityInput<Model>;
|
|
503
|
+
}): Promise<Result | null> {
|
|
504
|
+
const { model, where, update: values } = data;
|
|
505
|
+
const table = db[model] || [];
|
|
506
|
+
// Convert Where from Adapter type to internal WhereCondition type
|
|
507
|
+
const whereArray = (Array.isArray(where)
|
|
508
|
+
? where
|
|
509
|
+
: [where]) as unknown as WhereCondition<Model>[];
|
|
510
|
+
const res = convertWhereClause(whereArray, table, model);
|
|
511
|
+
|
|
512
|
+
for (const record of res) {
|
|
513
|
+
Object.assign(
|
|
514
|
+
record,
|
|
515
|
+
transformInput(values as EntityInput<Model>, model, 'update')
|
|
516
|
+
);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
return transformOutput(res[0] || null, model) as Result | null;
|
|
520
|
+
},
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Updates multiple records matching the where conditions
|
|
524
|
+
*
|
|
525
|
+
* @typeParam Model - The model type
|
|
526
|
+
* @typeParam Result - The result type
|
|
527
|
+
* @param data - The data for the update operation
|
|
528
|
+
* @returns Array of updated records
|
|
529
|
+
*/
|
|
530
|
+
async updateMany<
|
|
531
|
+
Model extends EntityName,
|
|
532
|
+
Result extends TableFields<Model>,
|
|
533
|
+
>(data: {
|
|
534
|
+
model: Model;
|
|
535
|
+
where: Where<Model>;
|
|
536
|
+
update: Partial<EntityInput<Model>>;
|
|
537
|
+
}): Promise<Result[]> {
|
|
538
|
+
const { model, where, update: values } = data;
|
|
539
|
+
const table = db[model] || [];
|
|
540
|
+
// Convert Where from Adapter type to internal WhereCondition type
|
|
541
|
+
const whereArray = (Array.isArray(where)
|
|
542
|
+
? where
|
|
543
|
+
: [where]) as unknown as WhereCondition<Model>[];
|
|
544
|
+
const res = convertWhereClause(whereArray, table, model);
|
|
545
|
+
|
|
546
|
+
for (const record of res) {
|
|
547
|
+
Object.assign(
|
|
548
|
+
record,
|
|
549
|
+
transformInput(values as EntityInput<Model>, model, 'update')
|
|
550
|
+
);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
return res.map((record) => transformOutput(record, model) as Result);
|
|
554
|
+
},
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* Deletes a single record matching the where conditions
|
|
558
|
+
*
|
|
559
|
+
* @typeParam Model - The model type
|
|
560
|
+
* @param data - The data for the delete operation
|
|
561
|
+
*/
|
|
562
|
+
async delete<Model extends EntityName>(data: {
|
|
563
|
+
model: Model;
|
|
564
|
+
where: Where<Model>;
|
|
565
|
+
}): Promise<void> {
|
|
566
|
+
const { model, where } = data;
|
|
567
|
+
const table = db[model] || [];
|
|
568
|
+
// Convert Where from Adapter type to internal WhereCondition type
|
|
569
|
+
const whereArray = (Array.isArray(where)
|
|
570
|
+
? where
|
|
571
|
+
: [where]) as unknown as WhereCondition<Model>[];
|
|
572
|
+
const res = convertWhereClause(whereArray, table, model);
|
|
573
|
+
db[model] = table.filter((record) => !res.includes(record));
|
|
574
|
+
},
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* Deletes multiple records matching the where conditions
|
|
578
|
+
*
|
|
579
|
+
* @typeParam Model - The model type
|
|
580
|
+
* @param data - The data for the delete operation
|
|
581
|
+
* @returns The number of records deleted
|
|
582
|
+
*/
|
|
583
|
+
async deleteMany<Model extends EntityName>(data: {
|
|
584
|
+
model: Model;
|
|
585
|
+
where: Where<Model>;
|
|
586
|
+
}): Promise<number> {
|
|
587
|
+
const { model, where } = data;
|
|
588
|
+
const table = db[model] || [];
|
|
589
|
+
// Convert Where from Adapter type to internal WhereCondition type
|
|
590
|
+
const whereArray = (Array.isArray(where)
|
|
591
|
+
? where
|
|
592
|
+
: [where]) as unknown as WhereCondition<Model>[];
|
|
593
|
+
const res = convertWhereClause(whereArray, table, model);
|
|
594
|
+
let count = 0;
|
|
595
|
+
|
|
596
|
+
db[model] = table.filter((record) => {
|
|
597
|
+
if (res.includes(record)) {
|
|
598
|
+
count++;
|
|
599
|
+
return false;
|
|
600
|
+
}
|
|
601
|
+
return true;
|
|
602
|
+
});
|
|
603
|
+
|
|
604
|
+
return count;
|
|
605
|
+
},
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* Executes a function within a memory-based transaction
|
|
609
|
+
*
|
|
610
|
+
* This method provides a simplified transaction mechanism for the in-memory
|
|
611
|
+
* database. It creates a deep copy of the current database state, performs
|
|
612
|
+
* operations on the copy, and then replaces the original database if successful.
|
|
613
|
+
*
|
|
614
|
+
* @typeParam ResultType - The type of data returned by the transaction
|
|
615
|
+
* @param data - The transaction data containing the callback function
|
|
616
|
+
* @returns A promise that resolves with the result of the callback function
|
|
617
|
+
* @throws {Error} If the transaction callback throws an error
|
|
618
|
+
*/
|
|
619
|
+
async transaction<ResultType>(data: {
|
|
620
|
+
callback: (transactionAdapter: Adapter) => Promise<ResultType>;
|
|
621
|
+
}): Promise<ResultType> {
|
|
622
|
+
const { callback } = data;
|
|
623
|
+
|
|
624
|
+
// Create a deep copy of the database for transaction isolation
|
|
625
|
+
const tempDb: MemoryDB = {};
|
|
626
|
+
for (const key in db) {
|
|
627
|
+
if (Object.hasOwn(db, key)) {
|
|
628
|
+
tempDb[key] = JSON.parse(JSON.stringify(db[key]));
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// Create a new adapter instance that uses the temporary database
|
|
633
|
+
const transactionAdapter = memoryAdapter(tempDb)(options);
|
|
634
|
+
|
|
635
|
+
// Execute the callback function with the transaction adapter
|
|
636
|
+
const result = await callback(transactionAdapter);
|
|
637
|
+
|
|
638
|
+
// If successful, commit changes by replacing the original database
|
|
639
|
+
for (const key in tempDb) {
|
|
640
|
+
if (Object.hasOwn(tempDb, key)) {
|
|
641
|
+
db[key] = tempDb[key] as Record<string, unknown>[];
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
return result;
|
|
646
|
+
},
|
|
647
|
+
};
|
|
648
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './prisma-adapter';
|