@htmless/core 0.1.0
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/dist/ai/content-operations.d.ts +26 -0
- package/dist/ai/content-operations.d.ts.map +1 -0
- package/dist/ai/content-operations.js +75 -0
- package/dist/ai/content-operations.js.map +1 -0
- package/dist/ai/image-analyzer.d.ts +18 -0
- package/dist/ai/image-analyzer.d.ts.map +1 -0
- package/dist/ai/image-analyzer.js +457 -0
- package/dist/ai/image-analyzer.js.map +1 -0
- package/dist/ai/json-to-schema.d.ts +6 -0
- package/dist/ai/json-to-schema.d.ts.map +1 -0
- package/dist/ai/json-to-schema.js +155 -0
- package/dist/ai/json-to-schema.js.map +1 -0
- package/dist/ai/schema-generator.d.ts +34 -0
- package/dist/ai/schema-generator.d.ts.map +1 -0
- package/dist/ai/schema-generator.js +307 -0
- package/dist/ai/schema-generator.js.map +1 -0
- package/dist/api/cda/assets.d.ts +4 -0
- package/dist/api/cda/assets.d.ts.map +1 -0
- package/dist/api/cda/assets.js +82 -0
- package/dist/api/cda/assets.js.map +1 -0
- package/dist/api/cda/blocks.d.ts +4 -0
- package/dist/api/cda/blocks.d.ts.map +1 -0
- package/dist/api/cda/blocks.js +92 -0
- package/dist/api/cda/blocks.js.map +1 -0
- package/dist/api/cda/content.d.ts +4 -0
- package/dist/api/cda/content.d.ts.map +1 -0
- package/dist/api/cda/content.js +192 -0
- package/dist/api/cda/content.js.map +1 -0
- package/dist/api/cda/index.d.ts +4 -0
- package/dist/api/cda/index.d.ts.map +1 -0
- package/dist/api/cda/index.js +21 -0
- package/dist/api/cda/index.js.map +1 -0
- package/dist/api/cda/media.d.ts +4 -0
- package/dist/api/cda/media.d.ts.map +1 -0
- package/dist/api/cda/media.js +114 -0
- package/dist/api/cda/media.js.map +1 -0
- package/dist/api/cda/redirects.d.ts +4 -0
- package/dist/api/cda/redirects.d.ts.map +1 -0
- package/dist/api/cda/redirects.js +69 -0
- package/dist/api/cda/redirects.js.map +1 -0
- package/dist/api/cda/schemas.d.ts +4 -0
- package/dist/api/cda/schemas.d.ts.map +1 -0
- package/dist/api/cda/schemas.js +113 -0
- package/dist/api/cda/schemas.js.map +1 -0
- package/dist/api/cda/taxonomies.d.ts +4 -0
- package/dist/api/cda/taxonomies.d.ts.map +1 -0
- package/dist/api/cda/taxonomies.js +79 -0
- package/dist/api/cda/taxonomies.js.map +1 -0
- package/dist/api/cma/ai.d.ts +4 -0
- package/dist/api/cma/ai.d.ts.map +1 -0
- package/dist/api/cma/ai.js +458 -0
- package/dist/api/cma/ai.js.map +1 -0
- package/dist/api/cma/assets.d.ts +4 -0
- package/dist/api/cma/assets.d.ts.map +1 -0
- package/dist/api/cma/assets.js +166 -0
- package/dist/api/cma/assets.js.map +1 -0
- package/dist/api/cma/audit.d.ts +4 -0
- package/dist/api/cma/audit.d.ts.map +1 -0
- package/dist/api/cma/audit.js +74 -0
- package/dist/api/cma/audit.js.map +1 -0
- package/dist/api/cma/auth.d.ts +4 -0
- package/dist/api/cma/auth.d.ts.map +1 -0
- package/dist/api/cma/auth.js +123 -0
- package/dist/api/cma/auth.js.map +1 -0
- package/dist/api/cma/blocks.d.ts +4 -0
- package/dist/api/cma/blocks.d.ts.map +1 -0
- package/dist/api/cma/blocks.js +249 -0
- package/dist/api/cma/blocks.js.map +1 -0
- package/dist/api/cma/bulk.d.ts +4 -0
- package/dist/api/cma/bulk.d.ts.map +1 -0
- package/dist/api/cma/bulk.js +258 -0
- package/dist/api/cma/bulk.js.map +1 -0
- package/dist/api/cma/cache.d.ts +4 -0
- package/dist/api/cma/cache.d.ts.map +1 -0
- package/dist/api/cma/cache.js +99 -0
- package/dist/api/cma/cache.js.map +1 -0
- package/dist/api/cma/codegen.d.ts +4 -0
- package/dist/api/cma/codegen.d.ts.map +1 -0
- package/dist/api/cma/codegen.js +22 -0
- package/dist/api/cma/codegen.js.map +1 -0
- package/dist/api/cma/comments.d.ts +4 -0
- package/dist/api/cma/comments.d.ts.map +1 -0
- package/dist/api/cma/comments.js +164 -0
- package/dist/api/cma/comments.js.map +1 -0
- package/dist/api/cma/diff.d.ts +4 -0
- package/dist/api/cma/diff.d.ts.map +1 -0
- package/dist/api/cma/diff.js +88 -0
- package/dist/api/cma/diff.js.map +1 -0
- package/dist/api/cma/entries.d.ts +4 -0
- package/dist/api/cma/entries.d.ts.map +1 -0
- package/dist/api/cma/entries.js +736 -0
- package/dist/api/cma/entries.js.map +1 -0
- package/dist/api/cma/environments.d.ts +4 -0
- package/dist/api/cma/environments.d.ts.map +1 -0
- package/dist/api/cma/environments.js +160 -0
- package/dist/api/cma/environments.js.map +1 -0
- package/dist/api/cma/extensions.d.ts +4 -0
- package/dist/api/cma/extensions.d.ts.map +1 -0
- package/dist/api/cma/extensions.js +82 -0
- package/dist/api/cma/extensions.js.map +1 -0
- package/dist/api/cma/importexport.d.ts +4 -0
- package/dist/api/cma/importexport.d.ts.map +1 -0
- package/dist/api/cma/importexport.js +496 -0
- package/dist/api/cma/importexport.js.map +1 -0
- package/dist/api/cma/index.d.ts +4 -0
- package/dist/api/cma/index.d.ts.map +1 -0
- package/dist/api/cma/index.js +69 -0
- package/dist/api/cma/index.js.map +1 -0
- package/dist/api/cma/live.d.ts +4 -0
- package/dist/api/cma/live.d.ts.map +1 -0
- package/dist/api/cma/live.js +64 -0
- package/dist/api/cma/live.js.map +1 -0
- package/dist/api/cma/locales.d.ts +4 -0
- package/dist/api/cma/locales.d.ts.map +1 -0
- package/dist/api/cma/locales.js +117 -0
- package/dist/api/cma/locales.js.map +1 -0
- package/dist/api/cma/marketplace.d.ts +4 -0
- package/dist/api/cma/marketplace.d.ts.map +1 -0
- package/dist/api/cma/marketplace.js +550 -0
- package/dist/api/cma/marketplace.js.map +1 -0
- package/dist/api/cma/redirects.d.ts +4 -0
- package/dist/api/cma/redirects.d.ts.map +1 -0
- package/dist/api/cma/redirects.js +120 -0
- package/dist/api/cma/redirects.js.map +1 -0
- package/dist/api/cma/relationships.d.ts +4 -0
- package/dist/api/cma/relationships.d.ts.map +1 -0
- package/dist/api/cma/relationships.js +47 -0
- package/dist/api/cma/relationships.js.map +1 -0
- package/dist/api/cma/schemas.d.ts +4 -0
- package/dist/api/cma/schemas.d.ts.map +1 -0
- package/dist/api/cma/schemas.js +248 -0
- package/dist/api/cma/schemas.js.map +1 -0
- package/dist/api/cma/search.d.ts +4 -0
- package/dist/api/cma/search.d.ts.map +1 -0
- package/dist/api/cma/search.js +149 -0
- package/dist/api/cma/search.js.map +1 -0
- package/dist/api/cma/spaces.d.ts +4 -0
- package/dist/api/cma/spaces.d.ts.map +1 -0
- package/dist/api/cma/spaces.js +119 -0
- package/dist/api/cma/spaces.js.map +1 -0
- package/dist/api/cma/taxonomies.d.ts +4 -0
- package/dist/api/cma/taxonomies.d.ts.map +1 -0
- package/dist/api/cma/taxonomies.js +296 -0
- package/dist/api/cma/taxonomies.js.map +1 -0
- package/dist/api/cma/templates.d.ts +13 -0
- package/dist/api/cma/templates.d.ts.map +1 -0
- package/dist/api/cma/templates.js +312 -0
- package/dist/api/cma/templates.js.map +1 -0
- package/dist/api/cma/uploads.d.ts +4 -0
- package/dist/api/cma/uploads.d.ts.map +1 -0
- package/dist/api/cma/uploads.js +148 -0
- package/dist/api/cma/uploads.js.map +1 -0
- package/dist/api/cma/webhooks.d.ts +4 -0
- package/dist/api/cma/webhooks.d.ts.map +1 -0
- package/dist/api/cma/webhooks.js +175 -0
- package/dist/api/cma/webhooks.js.map +1 -0
- package/dist/api/cma/white-label.d.ts +4 -0
- package/dist/api/cma/white-label.d.ts.map +1 -0
- package/dist/api/cma/white-label.js +47 -0
- package/dist/api/cma/white-label.js.map +1 -0
- package/dist/api/graphql/index.d.ts +4 -0
- package/dist/api/graphql/index.d.ts.map +1 -0
- package/dist/api/graphql/index.js +57 -0
- package/dist/api/graphql/index.js.map +1 -0
- package/dist/api/graphql/introspection.d.ts +31 -0
- package/dist/api/graphql/introspection.d.ts.map +1 -0
- package/dist/api/graphql/introspection.js +90 -0
- package/dist/api/graphql/introspection.js.map +1 -0
- package/dist/api/graphql/parser.d.ts +14 -0
- package/dist/api/graphql/parser.d.ts.map +1 -0
- package/dist/api/graphql/parser.js +140 -0
- package/dist/api/graphql/parser.js.map +1 -0
- package/dist/api/graphql/resolver.d.ts +3 -0
- package/dist/api/graphql/resolver.d.ts.map +1 -0
- package/dist/api/graphql/resolver.js +138 -0
- package/dist/api/graphql/resolver.js.map +1 -0
- package/dist/api/preview/content.d.ts +4 -0
- package/dist/api/preview/content.d.ts.map +1 -0
- package/dist/api/preview/content.js +207 -0
- package/dist/api/preview/content.js.map +1 -0
- package/dist/api/preview/index.d.ts +4 -0
- package/dist/api/preview/index.d.ts.map +1 -0
- package/dist/api/preview/index.js +11 -0
- package/dist/api/preview/index.js.map +1 -0
- package/dist/api/preview/live.d.ts +4 -0
- package/dist/api/preview/live.d.ts.map +1 -0
- package/dist/api/preview/live.js +41 -0
- package/dist/api/preview/live.js.map +1 -0
- package/dist/audit/logger.d.ts +13 -0
- package/dist/audit/logger.d.ts.map +1 -0
- package/dist/audit/logger.js +21 -0
- package/dist/audit/logger.js.map +1 -0
- package/dist/audit/middleware.d.ts +7 -0
- package/dist/audit/middleware.d.ts.map +1 -0
- package/dist/audit/middleware.js +39 -0
- package/dist/audit/middleware.js.map +1 -0
- package/dist/auth/jwt.d.ts +9 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/jwt.js +15 -0
- package/dist/auth/jwt.js.map +1 -0
- package/dist/auth/middleware.d.ts +24 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +99 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/password.d.ts +3 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +9 -0
- package/dist/auth/password.js.map +1 -0
- package/dist/auth/rate-limit.d.ts +19 -0
- package/dist/auth/rate-limit.d.ts.map +1 -0
- package/dist/auth/rate-limit.js +77 -0
- package/dist/auth/rate-limit.js.map +1 -0
- package/dist/auth/rbac.d.ts +10 -0
- package/dist/auth/rbac.d.ts.map +1 -0
- package/dist/auth/rbac.js +61 -0
- package/dist/auth/rbac.js.map +1 -0
- package/dist/blocks/core-blocks.d.ts +13 -0
- package/dist/blocks/core-blocks.d.ts.map +1 -0
- package/dist/blocks/core-blocks.js +113 -0
- package/dist/blocks/core-blocks.js.map +1 -0
- package/dist/blocks/renderer-sdk.d.ts +75 -0
- package/dist/blocks/renderer-sdk.d.ts.map +1 -0
- package/dist/blocks/renderer-sdk.js +112 -0
- package/dist/blocks/renderer-sdk.js.map +1 -0
- package/dist/blocks/seed-core-blocks.d.ts +6 -0
- package/dist/blocks/seed-core-blocks.d.ts.map +1 -0
- package/dist/blocks/seed-core-blocks.js +37 -0
- package/dist/blocks/seed-core-blocks.js.map +1 -0
- package/dist/blocks/validator.d.ts +10 -0
- package/dist/blocks/validator.d.ts.map +1 -0
- package/dist/blocks/validator.js +111 -0
- package/dist/blocks/validator.js.map +1 -0
- package/dist/cache/cdn-purge.d.ts +41 -0
- package/dist/cache/cdn-purge.d.ts.map +1 -0
- package/dist/cache/cdn-purge.js +180 -0
- package/dist/cache/cdn-purge.js.map +1 -0
- package/dist/cache/observability.d.ts +36 -0
- package/dist/cache/observability.d.ts.map +1 -0
- package/dist/cache/observability.js +110 -0
- package/dist/cache/observability.js.map +1 -0
- package/dist/cache/tags.d.ts +28 -0
- package/dist/cache/tags.d.ts.map +1 -0
- package/dist/cache/tags.js +94 -0
- package/dist/cache/tags.js.map +1 -0
- package/dist/cli/commands/codegen.d.ts +2 -0
- package/dist/cli/commands/codegen.d.ts.map +1 -0
- package/dist/cli/commands/codegen.js +73 -0
- package/dist/cli/commands/codegen.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +2 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +60 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/help.d.ts +2 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +32 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +90 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +2 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +27 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/seed.d.ts +2 -0
- package/dist/cli/commands/seed.d.ts.map +1 -0
- package/dist/cli/commands/seed.js +28 -0
- package/dist/cli/commands/seed.js.map +1 -0
- package/dist/cli/index.d.ts +16 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +120 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -0
- package/dist/content/advanced-query.d.ts +37 -0
- package/dist/content/advanced-query.d.ts.map +1 -0
- package/dist/content/advanced-query.js +162 -0
- package/dist/content/advanced-query.js.map +1 -0
- package/dist/content/cache.d.ts +27 -0
- package/dist/content/cache.d.ts.map +1 -0
- package/dist/content/cache.js +100 -0
- package/dist/content/cache.js.map +1 -0
- package/dist/content/diff.d.ts +13 -0
- package/dist/content/diff.d.ts.map +1 -0
- package/dist/content/diff.js +80 -0
- package/dist/content/diff.js.map +1 -0
- package/dist/content/localization.d.ts +13 -0
- package/dist/content/localization.d.ts.map +1 -0
- package/dist/content/localization.js +42 -0
- package/dist/content/localization.js.map +1 -0
- package/dist/content/materializer.d.ts +26 -0
- package/dist/content/materializer.d.ts.map +1 -0
- package/dist/content/materializer.js +175 -0
- package/dist/content/materializer.js.map +1 -0
- package/dist/content/relationships.d.ts +30 -0
- package/dist/content/relationships.d.ts.map +1 -0
- package/dist/content/relationships.js +123 -0
- package/dist/content/relationships.js.map +1 -0
- package/dist/db.d.ts +5 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +5 -0
- package/dist/db.js.map +1 -0
- package/dist/events/emitter.d.ts +16 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +15 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/sse.d.ts +16 -0
- package/dist/events/sse.d.ts.map +1 -0
- package/dist/events/sse.js +37 -0
- package/dist/events/sse.js.map +1 -0
- package/dist/events/wire.d.ts +2 -0
- package/dist/events/wire.d.ts.map +1 -0
- package/dist/events/wire.js +27 -0
- package/dist/events/wire.js.map +1 -0
- package/dist/extensions/billing.d.ts +60 -0
- package/dist/extensions/billing.d.ts.map +1 -0
- package/dist/extensions/billing.js +98 -0
- package/dist/extensions/billing.js.map +1 -0
- package/dist/extensions/manifest.d.ts +43 -0
- package/dist/extensions/manifest.d.ts.map +1 -0
- package/dist/extensions/manifest.js +66 -0
- package/dist/extensions/manifest.js.map +1 -0
- package/dist/extensions/marketplace.d.ts +50 -0
- package/dist/extensions/marketplace.d.ts.map +1 -0
- package/dist/extensions/marketplace.js +676 -0
- package/dist/extensions/marketplace.js.map +1 -0
- package/dist/extensions/router.d.ts +4 -0
- package/dist/extensions/router.d.ts.map +1 -0
- package/dist/extensions/router.js +50 -0
- package/dist/extensions/router.js.map +1 -0
- package/dist/extensions/runtime.d.ts +29 -0
- package/dist/extensions/runtime.d.ts.map +1 -0
- package/dist/extensions/runtime.js +201 -0
- package/dist/extensions/runtime.js.map +1 -0
- package/dist/extensions/sdk.d.ts +146 -0
- package/dist/extensions/sdk.d.ts.map +1 -0
- package/dist/extensions/sdk.js +114 -0
- package/dist/extensions/sdk.js.map +1 -0
- package/dist/integrations/sheets.d.ts +41 -0
- package/dist/integrations/sheets.d.ts.map +1 -0
- package/dist/integrations/sheets.js +230 -0
- package/dist/integrations/sheets.js.map +1 -0
- package/dist/media/metadata.d.ts +9 -0
- package/dist/media/metadata.d.ts.map +1 -0
- package/dist/media/metadata.js +84 -0
- package/dist/media/metadata.js.map +1 -0
- package/dist/media/presets.d.ts +17 -0
- package/dist/media/presets.d.ts.map +1 -0
- package/dist/media/presets.js +21 -0
- package/dist/media/presets.js.map +1 -0
- package/dist/media/storage.d.ts +16 -0
- package/dist/media/storage.d.ts.map +1 -0
- package/dist/media/storage.js +39 -0
- package/dist/media/storage.js.map +1 -0
- package/dist/media/transforms-engine.d.ts +46 -0
- package/dist/media/transforms-engine.d.ts.map +1 -0
- package/dist/media/transforms-engine.js +91 -0
- package/dist/media/transforms-engine.js.map +1 -0
- package/dist/media/transforms.d.ts +15 -0
- package/dist/media/transforms.d.ts.map +1 -0
- package/dist/media/transforms.js +22 -0
- package/dist/media/transforms.js.map +1 -0
- package/dist/media/usage.d.ts +21 -0
- package/dist/media/usage.d.ts.map +1 -0
- package/dist/media/usage.js +105 -0
- package/dist/media/usage.js.map +1 -0
- package/dist/redis.d.ts +2 -0
- package/dist/redis.d.ts.map +1 -0
- package/dist/redis.js +9 -0
- package/dist/redis.js.map +1 -0
- package/dist/schema/codegen.d.ts +6 -0
- package/dist/schema/codegen.d.ts.map +1 -0
- package/dist/schema/codegen.js +95 -0
- package/dist/schema/codegen.js.map +1 -0
- package/dist/schema/json-schema.d.ts +42 -0
- package/dist/schema/json-schema.d.ts.map +1 -0
- package/dist/schema/json-schema.js +68 -0
- package/dist/schema/json-schema.js.map +1 -0
- package/dist/schema/validator.d.ts +14 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +103 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/sdk/client.d.ts +86 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +117 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +59 -0
- package/dist/server.js.map +1 -0
- package/dist/spaces/premium-templates.d.ts +37 -0
- package/dist/spaces/premium-templates.d.ts.map +1 -0
- package/dist/spaces/premium-templates.js +1603 -0
- package/dist/spaces/premium-templates.js.map +1 -0
- package/dist/spaces/provisioner.d.ts +16 -0
- package/dist/spaces/provisioner.d.ts.map +1 -0
- package/dist/spaces/provisioner.js +143 -0
- package/dist/spaces/provisioner.js.map +1 -0
- package/dist/spaces/template-registry.d.ts +34 -0
- package/dist/spaces/template-registry.d.ts.map +1 -0
- package/dist/spaces/template-registry.js +55 -0
- package/dist/spaces/template-registry.js.map +1 -0
- package/dist/spaces/templates.d.ts +44 -0
- package/dist/spaces/templates.d.ts.map +1 -0
- package/dist/spaces/templates.js +201 -0
- package/dist/spaces/templates.js.map +1 -0
- package/dist/spaces/white-label.d.ts +20 -0
- package/dist/spaces/white-label.d.ts.map +1 -0
- package/dist/spaces/white-label.js +32 -0
- package/dist/spaces/white-label.js.map +1 -0
- package/dist/utils/query-shaping.d.ts +27 -0
- package/dist/utils/query-shaping.d.ts.map +1 -0
- package/dist/utils/query-shaping.js +69 -0
- package/dist/utils/query-shaping.js.map +1 -0
- package/dist/utils/space.d.ts +4 -0
- package/dist/utils/space.d.ts.map +1 -0
- package/dist/utils/space.js +17 -0
- package/dist/utils/space.js.map +1 -0
- package/dist/webhooks/dispatcher.d.ts +9 -0
- package/dist/webhooks/dispatcher.d.ts.map +1 -0
- package/dist/webhooks/dispatcher.js +102 -0
- package/dist/webhooks/dispatcher.js.map +1 -0
- package/package.json +84 -0
- package/prisma/migrations/20260403025542_init/migration.sql +315 -0
- package/prisma/migrations/20260403034855_add_blocks_and_patterns/migration.sql +40 -0
- package/prisma/migrations/20260403041936_add_published_documents/migration.sql +30 -0
- package/prisma/migrations/20260403042809_add_locales_and_taxonomies/migration.sql +58 -0
- package/prisma/migrations/20260403043033_add_scheduled_unpublish_at/migration.sql +2 -0
- package/prisma/migrations/20260403052801_add_environments_and_whitelabel/migration.sql +65 -0
- package/prisma/migrations/20260403055920_add_marketplace_and_extension_config/migration.sql +73 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +530 -0
- package/prisma/seed.ts +154 -0
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
datasource db {
|
|
6
|
+
provider = "postgresql"
|
|
7
|
+
url = env("DATABASE_URL")
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// ─── Spaces (Multi-tenancy) ───
|
|
11
|
+
|
|
12
|
+
model Space {
|
|
13
|
+
id String @id @default(cuid())
|
|
14
|
+
name String
|
|
15
|
+
slug String @unique
|
|
16
|
+
whiteLabelConfig Json?
|
|
17
|
+
createdAt DateTime @default(now())
|
|
18
|
+
updatedAt DateTime @updatedAt
|
|
19
|
+
|
|
20
|
+
contentTypes ContentType[]
|
|
21
|
+
entries Entry[]
|
|
22
|
+
assets Asset[]
|
|
23
|
+
apiTokens ApiToken[]
|
|
24
|
+
previewTokens PreviewToken[]
|
|
25
|
+
webhooks Webhook[]
|
|
26
|
+
roleBindings RoleBinding[]
|
|
27
|
+
publishedDocuments PublishedDocument[]
|
|
28
|
+
blockDefinitions BlockDefinition[]
|
|
29
|
+
patterns Pattern[]
|
|
30
|
+
auditLogs AuditLog[]
|
|
31
|
+
locales Locale[]
|
|
32
|
+
taxonomies Taxonomy[]
|
|
33
|
+
comments Comment[]
|
|
34
|
+
environments Environment[]
|
|
35
|
+
redirects Redirect[]
|
|
36
|
+
extensionConfigs ExtensionConfig[]
|
|
37
|
+
|
|
38
|
+
@@map("spaces")
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ─── Users & Auth ───
|
|
42
|
+
|
|
43
|
+
model User {
|
|
44
|
+
id String @id @default(cuid())
|
|
45
|
+
email String @unique
|
|
46
|
+
passwordHash String
|
|
47
|
+
name String
|
|
48
|
+
avatarUrl String?
|
|
49
|
+
createdAt DateTime @default(now())
|
|
50
|
+
updatedAt DateTime @updatedAt
|
|
51
|
+
|
|
52
|
+
roleBindings RoleBinding[]
|
|
53
|
+
apiTokens ApiToken[]
|
|
54
|
+
previewTokens PreviewToken[]
|
|
55
|
+
entryVersions EntryVersion[]
|
|
56
|
+
auditLogs AuditLog[]
|
|
57
|
+
comments Comment[]
|
|
58
|
+
|
|
59
|
+
@@map("users")
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
model Role {
|
|
63
|
+
id String @id @default(cuid())
|
|
64
|
+
name String @unique // admin, editor, author, viewer
|
|
65
|
+
permissions Json // { "entry.create": true, "entry.publish": true, ... }
|
|
66
|
+
builtIn Boolean @default(false)
|
|
67
|
+
createdAt DateTime @default(now())
|
|
68
|
+
|
|
69
|
+
roleBindings RoleBinding[]
|
|
70
|
+
|
|
71
|
+
@@map("roles")
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
model RoleBinding {
|
|
75
|
+
id String @id @default(cuid())
|
|
76
|
+
userId String
|
|
77
|
+
roleId String
|
|
78
|
+
spaceId String
|
|
79
|
+
createdAt DateTime @default(now())
|
|
80
|
+
|
|
81
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
82
|
+
role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)
|
|
83
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
84
|
+
|
|
85
|
+
@@unique([userId, roleId, spaceId])
|
|
86
|
+
@@map("role_bindings")
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
model ApiToken {
|
|
90
|
+
id String @id @default(cuid())
|
|
91
|
+
name String
|
|
92
|
+
tokenHash String @unique
|
|
93
|
+
scopes Json // ["cda:read", "cma:write"]
|
|
94
|
+
spaceId String
|
|
95
|
+
createdById String
|
|
96
|
+
expiresAt DateTime?
|
|
97
|
+
lastUsedAt DateTime?
|
|
98
|
+
createdAt DateTime @default(now())
|
|
99
|
+
|
|
100
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
101
|
+
createdBy User @relation(fields: [createdById], references: [id])
|
|
102
|
+
|
|
103
|
+
@@map("api_tokens")
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
model PreviewToken {
|
|
107
|
+
id String @id @default(cuid())
|
|
108
|
+
tokenHash String @unique
|
|
109
|
+
spaceId String
|
|
110
|
+
entryId String?
|
|
111
|
+
route String?
|
|
112
|
+
createdById String
|
|
113
|
+
expiresAt DateTime
|
|
114
|
+
createdAt DateTime @default(now())
|
|
115
|
+
|
|
116
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
117
|
+
entry Entry? @relation(fields: [entryId], references: [id])
|
|
118
|
+
createdBy User @relation(fields: [createdById], references: [id])
|
|
119
|
+
|
|
120
|
+
@@map("preview_tokens")
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ─── Schema Registry ───
|
|
124
|
+
|
|
125
|
+
model ContentType {
|
|
126
|
+
id String @id @default(cuid())
|
|
127
|
+
spaceId String
|
|
128
|
+
key String // "article", "page", "product"
|
|
129
|
+
name String // "Article"
|
|
130
|
+
description String?
|
|
131
|
+
version Int @default(1)
|
|
132
|
+
createdAt DateTime @default(now())
|
|
133
|
+
updatedAt DateTime @updatedAt
|
|
134
|
+
|
|
135
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
136
|
+
fields Field[]
|
|
137
|
+
entries Entry[]
|
|
138
|
+
|
|
139
|
+
@@unique([spaceId, key])
|
|
140
|
+
@@map("content_types")
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
model Field {
|
|
144
|
+
id String @id @default(cuid())
|
|
145
|
+
contentTypeId String
|
|
146
|
+
key String // "title", "body", "heroImage"
|
|
147
|
+
name String // "Title"
|
|
148
|
+
type String // text, richtext, number, boolean, date, media, reference, json, slug, enum
|
|
149
|
+
required Boolean @default(false)
|
|
150
|
+
unique Boolean @default(false)
|
|
151
|
+
localized Boolean @default(false)
|
|
152
|
+
validations Json? // { minLength: 1, maxLength: 255, ... }
|
|
153
|
+
defaultValue Json?
|
|
154
|
+
enumValues Json? // ["draft", "active", "archived"]
|
|
155
|
+
referenceTarget String? // content type key for reference fields
|
|
156
|
+
sortOrder Int @default(0)
|
|
157
|
+
createdAt DateTime @default(now())
|
|
158
|
+
updatedAt DateTime @updatedAt
|
|
159
|
+
|
|
160
|
+
contentType ContentType @relation(fields: [contentTypeId], references: [id], onDelete: Cascade)
|
|
161
|
+
|
|
162
|
+
@@unique([contentTypeId, key])
|
|
163
|
+
@@map("fields")
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// ─── Content ───
|
|
167
|
+
|
|
168
|
+
model Entry {
|
|
169
|
+
id String @id @default(cuid())
|
|
170
|
+
spaceId String
|
|
171
|
+
contentTypeId String
|
|
172
|
+
slug String
|
|
173
|
+
createdAt DateTime @default(now())
|
|
174
|
+
updatedAt DateTime @updatedAt
|
|
175
|
+
|
|
176
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
177
|
+
contentType ContentType @relation(fields: [contentTypeId], references: [id])
|
|
178
|
+
versions EntryVersion[]
|
|
179
|
+
state EntryState?
|
|
180
|
+
previewTokens PreviewToken[]
|
|
181
|
+
|
|
182
|
+
@@unique([spaceId, contentTypeId, slug])
|
|
183
|
+
@@map("entries")
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
model EntryVersion {
|
|
187
|
+
id String @id @default(cuid())
|
|
188
|
+
entryId String
|
|
189
|
+
kind String // "draft" | "published"
|
|
190
|
+
data Json // { title: "Hello", body: [...] }
|
|
191
|
+
etag String
|
|
192
|
+
createdById String
|
|
193
|
+
createdAt DateTime @default(now())
|
|
194
|
+
|
|
195
|
+
entry Entry @relation(fields: [entryId], references: [id], onDelete: Cascade)
|
|
196
|
+
createdBy User @relation(fields: [createdById], references: [id])
|
|
197
|
+
|
|
198
|
+
// Reverse relations for entry state
|
|
199
|
+
draftStates EntryState[] @relation("DraftVersion")
|
|
200
|
+
publishedStates EntryState[] @relation("PublishedVersion")
|
|
201
|
+
|
|
202
|
+
@@index([entryId, createdAt(sort: Desc)])
|
|
203
|
+
@@map("entry_versions")
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
model EntryState {
|
|
207
|
+
id String @id @default(cuid())
|
|
208
|
+
entryId String @unique
|
|
209
|
+
status String @default("draft") // draft, published, scheduled, archived
|
|
210
|
+
draftVersionId String
|
|
211
|
+
publishedVersionId String?
|
|
212
|
+
scheduledAt DateTime?
|
|
213
|
+
scheduledUnpublishAt DateTime?
|
|
214
|
+
updatedAt DateTime @updatedAt
|
|
215
|
+
|
|
216
|
+
entry Entry @relation(fields: [entryId], references: [id], onDelete: Cascade)
|
|
217
|
+
draftVersion EntryVersion @relation("DraftVersion", fields: [draftVersionId], references: [id])
|
|
218
|
+
publishedVersion EntryVersion? @relation("PublishedVersion", fields: [publishedVersionId], references: [id])
|
|
219
|
+
|
|
220
|
+
@@map("entry_state")
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// ─── Media ───
|
|
224
|
+
|
|
225
|
+
model Asset {
|
|
226
|
+
id String @id @default(cuid())
|
|
227
|
+
spaceId String
|
|
228
|
+
filename String
|
|
229
|
+
mimeType String
|
|
230
|
+
bytes Int
|
|
231
|
+
width Int?
|
|
232
|
+
height Int?
|
|
233
|
+
alt String?
|
|
234
|
+
caption String?
|
|
235
|
+
storageKey String // path in storage provider
|
|
236
|
+
checksum String?
|
|
237
|
+
createdById String?
|
|
238
|
+
createdAt DateTime @default(now())
|
|
239
|
+
updatedAt DateTime @updatedAt
|
|
240
|
+
|
|
241
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
242
|
+
|
|
243
|
+
@@map("assets")
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// ─── Denormalized Read Model (CDA Performance) ───
|
|
247
|
+
|
|
248
|
+
model PublishedDocument {
|
|
249
|
+
id String @id @default(cuid())
|
|
250
|
+
spaceId String
|
|
251
|
+
entryId String @unique
|
|
252
|
+
contentTypeKey String
|
|
253
|
+
slug String
|
|
254
|
+
data Json // Pre-resolved JSON with references expanded
|
|
255
|
+
publishedAt DateTime
|
|
256
|
+
etag String
|
|
257
|
+
createdAt DateTime @default(now())
|
|
258
|
+
updatedAt DateTime @updatedAt
|
|
259
|
+
|
|
260
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
261
|
+
|
|
262
|
+
@@unique([spaceId, contentTypeKey, slug])
|
|
263
|
+
@@index([spaceId, contentTypeKey])
|
|
264
|
+
@@index([spaceId, slug])
|
|
265
|
+
@@map("published_documents")
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// ─── Blocks ───
|
|
269
|
+
|
|
270
|
+
model BlockDefinition {
|
|
271
|
+
id String @id @default(cuid())
|
|
272
|
+
spaceId String
|
|
273
|
+
key String // "paragraph", "heading", "image", "callout"
|
|
274
|
+
version String @default("1.0.0")
|
|
275
|
+
title String
|
|
276
|
+
description String?
|
|
277
|
+
icon String? // emoji or icon identifier
|
|
278
|
+
attributesSchema Json // JSON Schema for block attributes
|
|
279
|
+
allowedChildren Json? // array of block keys allowed as children, null = any
|
|
280
|
+
builtIn Boolean @default(false) // core blocks shipped with HTMLess
|
|
281
|
+
createdAt DateTime @default(now())
|
|
282
|
+
updatedAt DateTime @updatedAt
|
|
283
|
+
|
|
284
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
285
|
+
|
|
286
|
+
@@unique([spaceId, key, version])
|
|
287
|
+
@@map("block_definitions")
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
model Pattern {
|
|
291
|
+
id String @id @default(cuid())
|
|
292
|
+
spaceId String
|
|
293
|
+
title String
|
|
294
|
+
description String?
|
|
295
|
+
blockTree Json // array of BlockInstance objects
|
|
296
|
+
typeKeys Json? // content type keys this pattern applies to, null = any
|
|
297
|
+
createdAt DateTime @default(now())
|
|
298
|
+
updatedAt DateTime @updatedAt
|
|
299
|
+
|
|
300
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
301
|
+
|
|
302
|
+
@@map("patterns")
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// ─── Webhooks ───
|
|
306
|
+
|
|
307
|
+
model Webhook {
|
|
308
|
+
id String @id @default(cuid())
|
|
309
|
+
spaceId String
|
|
310
|
+
url String
|
|
311
|
+
events Json // ["entry.published", "asset.created"]
|
|
312
|
+
signingSecret String
|
|
313
|
+
active Boolean @default(true)
|
|
314
|
+
createdAt DateTime @default(now())
|
|
315
|
+
updatedAt DateTime @updatedAt
|
|
316
|
+
|
|
317
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
318
|
+
deliveries WebhookDelivery[]
|
|
319
|
+
|
|
320
|
+
@@map("webhooks")
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
model WebhookDelivery {
|
|
324
|
+
id String @id @default(cuid())
|
|
325
|
+
webhookId String
|
|
326
|
+
eventType String
|
|
327
|
+
payload Json
|
|
328
|
+
statusCode Int?
|
|
329
|
+
responseTime Int? // ms
|
|
330
|
+
attempt Int @default(1)
|
|
331
|
+
success Boolean @default(false)
|
|
332
|
+
error String?
|
|
333
|
+
createdAt DateTime @default(now())
|
|
334
|
+
|
|
335
|
+
webhook Webhook @relation(fields: [webhookId], references: [id], onDelete: Cascade)
|
|
336
|
+
|
|
337
|
+
@@index([webhookId, createdAt(sort: Desc)])
|
|
338
|
+
@@map("webhook_deliveries")
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// ─── Audit ───
|
|
342
|
+
|
|
343
|
+
model AuditLog {
|
|
344
|
+
id String @id @default(cuid())
|
|
345
|
+
spaceId String
|
|
346
|
+
userId String?
|
|
347
|
+
action String // "entry.created", "schema.updated", "user.login"
|
|
348
|
+
resource String? // "entry:ent_123", "contentType:article"
|
|
349
|
+
meta Json?
|
|
350
|
+
createdAt DateTime @default(now())
|
|
351
|
+
|
|
352
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
353
|
+
user User? @relation(fields: [userId], references: [id])
|
|
354
|
+
|
|
355
|
+
@@index([spaceId, createdAt(sort: Desc)])
|
|
356
|
+
@@map("audit_logs")
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// ─── Redirects ───
|
|
360
|
+
|
|
361
|
+
model Redirect {
|
|
362
|
+
id String @id @default(cuid())
|
|
363
|
+
spaceId String
|
|
364
|
+
fromSlug String
|
|
365
|
+
toSlug String
|
|
366
|
+
statusCode Int @default(301) // 301 or 302
|
|
367
|
+
createdAt DateTime @default(now())
|
|
368
|
+
|
|
369
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
370
|
+
|
|
371
|
+
@@unique([spaceId, fromSlug])
|
|
372
|
+
@@map("redirects")
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// ─── Localization ───
|
|
376
|
+
|
|
377
|
+
model Locale {
|
|
378
|
+
id String @id @default(cuid())
|
|
379
|
+
spaceId String
|
|
380
|
+
code String // "en", "es", "fr", "de"
|
|
381
|
+
name String // "English", "Spanish"
|
|
382
|
+
isDefault Boolean @default(false)
|
|
383
|
+
createdAt DateTime @default(now())
|
|
384
|
+
|
|
385
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
386
|
+
|
|
387
|
+
@@unique([spaceId, code])
|
|
388
|
+
@@map("locales")
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// ─── Taxonomies ───
|
|
392
|
+
|
|
393
|
+
model Taxonomy {
|
|
394
|
+
id String @id @default(cuid())
|
|
395
|
+
spaceId String
|
|
396
|
+
key String
|
|
397
|
+
name String
|
|
398
|
+
hierarchical Boolean @default(false)
|
|
399
|
+
createdAt DateTime @default(now())
|
|
400
|
+
updatedAt DateTime @updatedAt
|
|
401
|
+
|
|
402
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
403
|
+
terms TaxonomyTerm[]
|
|
404
|
+
|
|
405
|
+
@@unique([spaceId, key])
|
|
406
|
+
@@map("taxonomies")
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
model TaxonomyTerm {
|
|
410
|
+
id String @id @default(cuid())
|
|
411
|
+
taxonomyId String
|
|
412
|
+
slug String
|
|
413
|
+
name String
|
|
414
|
+
parentId String?
|
|
415
|
+
sortOrder Int @default(0)
|
|
416
|
+
createdAt DateTime @default(now())
|
|
417
|
+
|
|
418
|
+
taxonomy Taxonomy @relation(fields: [taxonomyId], references: [id], onDelete: Cascade)
|
|
419
|
+
parent TaxonomyTerm? @relation("TermParent", fields: [parentId], references: [id])
|
|
420
|
+
children TaxonomyTerm[] @relation("TermParent")
|
|
421
|
+
|
|
422
|
+
@@unique([taxonomyId, slug])
|
|
423
|
+
@@map("taxonomy_terms")
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// ─── Editorial Collaboration ───
|
|
427
|
+
|
|
428
|
+
model Comment {
|
|
429
|
+
id String @id @default(cuid())
|
|
430
|
+
spaceId String
|
|
431
|
+
entryId String
|
|
432
|
+
userId String
|
|
433
|
+
body String
|
|
434
|
+
parentId String?
|
|
435
|
+
resolved Boolean @default(false)
|
|
436
|
+
createdAt DateTime @default(now())
|
|
437
|
+
updatedAt DateTime @updatedAt
|
|
438
|
+
|
|
439
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
440
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
441
|
+
parent Comment? @relation("CommentThread", fields: [parentId], references: [id], onDelete: Cascade)
|
|
442
|
+
replies Comment[] @relation("CommentThread")
|
|
443
|
+
|
|
444
|
+
@@index([entryId, createdAt])
|
|
445
|
+
@@map("comments")
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// ─── Environments ───
|
|
449
|
+
|
|
450
|
+
model Environment {
|
|
451
|
+
id String @id @default(cuid())
|
|
452
|
+
spaceId String
|
|
453
|
+
name String // "Production", "Staging", "Development"
|
|
454
|
+
slug String // "production", "staging", "development"
|
|
455
|
+
isDefault Boolean @default(false)
|
|
456
|
+
createdAt DateTime @default(now())
|
|
457
|
+
|
|
458
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
459
|
+
|
|
460
|
+
@@unique([spaceId, slug])
|
|
461
|
+
@@map("environments")
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// ─── Extension Config Storage ───
|
|
465
|
+
|
|
466
|
+
model ExtensionConfig {
|
|
467
|
+
id String @id @default(cuid())
|
|
468
|
+
spaceId String
|
|
469
|
+
extensionKey String
|
|
470
|
+
configKey String
|
|
471
|
+
value Json
|
|
472
|
+
createdAt DateTime @default(now())
|
|
473
|
+
updatedAt DateTime @updatedAt
|
|
474
|
+
|
|
475
|
+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
|
|
476
|
+
|
|
477
|
+
@@unique([spaceId, extensionKey, configKey])
|
|
478
|
+
@@map("extension_configs")
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// ─── Marketplace ───
|
|
482
|
+
|
|
483
|
+
model MarketplaceListing {
|
|
484
|
+
id String @id @default(cuid())
|
|
485
|
+
extensionKey String @unique
|
|
486
|
+
name String
|
|
487
|
+
description String
|
|
488
|
+
longDescription String?
|
|
489
|
+
author String
|
|
490
|
+
authorEmail String?
|
|
491
|
+
repository String?
|
|
492
|
+
homepage String?
|
|
493
|
+
iconUrl String?
|
|
494
|
+
screenshotUrls Json? // string[]
|
|
495
|
+
category String // ai, analytics, commerce, media, seo, notifications, integration, utility
|
|
496
|
+
tags Json? // string[]
|
|
497
|
+
pricing String @default("free") // free, paid, freemium
|
|
498
|
+
priceMonthly Int? // cents
|
|
499
|
+
license String @default("MIT")
|
|
500
|
+
version String
|
|
501
|
+
manifest Json // full ExtensionManifest
|
|
502
|
+
downloads Int @default(0)
|
|
503
|
+
rating Float?
|
|
504
|
+
reviewCount Int @default(0)
|
|
505
|
+
status String @default("pending") // pending, approved, rejected, suspended
|
|
506
|
+
rejectionReason String?
|
|
507
|
+
submittedAt DateTime @default(now())
|
|
508
|
+
approvedAt DateTime?
|
|
509
|
+
createdAt DateTime @default(now())
|
|
510
|
+
updatedAt DateTime @updatedAt
|
|
511
|
+
|
|
512
|
+
reviews MarketplaceReview[]
|
|
513
|
+
|
|
514
|
+
@@map("marketplace_listings")
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
model MarketplaceReview {
|
|
518
|
+
id String @id @default(cuid())
|
|
519
|
+
listingId String
|
|
520
|
+
userId String
|
|
521
|
+
rating Int // 1-5
|
|
522
|
+
title String?
|
|
523
|
+
body String?
|
|
524
|
+
createdAt DateTime @default(now())
|
|
525
|
+
|
|
526
|
+
listing MarketplaceListing @relation(fields: [listingId], references: [id], onDelete: Cascade)
|
|
527
|
+
|
|
528
|
+
@@unique([listingId, userId])
|
|
529
|
+
@@map("marketplace_reviews")
|
|
530
|
+
}
|
package/prisma/seed.ts
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { PrismaClient } from '@prisma/client';
|
|
2
|
+
import bcrypt from 'bcryptjs';
|
|
3
|
+
|
|
4
|
+
const prisma = new PrismaClient();
|
|
5
|
+
|
|
6
|
+
async function main() {
|
|
7
|
+
// Create built-in roles
|
|
8
|
+
const adminRole = await prisma.role.upsert({
|
|
9
|
+
where: { name: 'admin' },
|
|
10
|
+
update: {},
|
|
11
|
+
create: {
|
|
12
|
+
name: 'admin',
|
|
13
|
+
builtIn: true,
|
|
14
|
+
permissions: {
|
|
15
|
+
'space.manage': true,
|
|
16
|
+
'schema.admin': true,
|
|
17
|
+
'entry.create': true,
|
|
18
|
+
'entry.read': true,
|
|
19
|
+
'entry.update': true,
|
|
20
|
+
'entry.delete': true,
|
|
21
|
+
'entry.publish': true,
|
|
22
|
+
'asset.upload': true,
|
|
23
|
+
'asset.delete': true,
|
|
24
|
+
'webhook.manage': true,
|
|
25
|
+
'token.manage': true,
|
|
26
|
+
'user.manage': true,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const editorRole = await prisma.role.upsert({
|
|
32
|
+
where: { name: 'editor' },
|
|
33
|
+
update: {},
|
|
34
|
+
create: {
|
|
35
|
+
name: 'editor',
|
|
36
|
+
builtIn: true,
|
|
37
|
+
permissions: {
|
|
38
|
+
'entry.create': true,
|
|
39
|
+
'entry.read': true,
|
|
40
|
+
'entry.update': true,
|
|
41
|
+
'entry.publish': true,
|
|
42
|
+
'asset.upload': true,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const authorRole = await prisma.role.upsert({
|
|
48
|
+
where: { name: 'author' },
|
|
49
|
+
update: {},
|
|
50
|
+
create: {
|
|
51
|
+
name: 'author',
|
|
52
|
+
builtIn: true,
|
|
53
|
+
permissions: {
|
|
54
|
+
'entry.create': true,
|
|
55
|
+
'entry.read': true,
|
|
56
|
+
'entry.update': true,
|
|
57
|
+
'asset.upload': true,
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
await prisma.role.upsert({
|
|
63
|
+
where: { name: 'viewer' },
|
|
64
|
+
update: {},
|
|
65
|
+
create: {
|
|
66
|
+
name: 'viewer',
|
|
67
|
+
builtIn: true,
|
|
68
|
+
permissions: {
|
|
69
|
+
'entry.read': true,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Create default admin user
|
|
75
|
+
const passwordHash = await bcrypt.hash('admin123', 12);
|
|
76
|
+
const admin = await prisma.user.upsert({
|
|
77
|
+
where: { email: 'admin@htmless.com' },
|
|
78
|
+
update: {},
|
|
79
|
+
create: {
|
|
80
|
+
email: 'admin@htmless.com',
|
|
81
|
+
name: 'Admin',
|
|
82
|
+
passwordHash,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// Create default space
|
|
87
|
+
const space = await prisma.space.upsert({
|
|
88
|
+
where: { slug: 'default' },
|
|
89
|
+
update: {},
|
|
90
|
+
create: {
|
|
91
|
+
name: 'Default Space',
|
|
92
|
+
slug: 'default',
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Bind admin to space
|
|
97
|
+
await prisma.roleBinding.upsert({
|
|
98
|
+
where: {
|
|
99
|
+
userId_roleId_spaceId: {
|
|
100
|
+
userId: admin.id,
|
|
101
|
+
roleId: adminRole.id,
|
|
102
|
+
spaceId: space.id,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
update: {},
|
|
106
|
+
create: {
|
|
107
|
+
userId: admin.id,
|
|
108
|
+
roleId: adminRole.id,
|
|
109
|
+
spaceId: space.id,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// Create sample content type
|
|
114
|
+
const articleType = await prisma.contentType.upsert({
|
|
115
|
+
where: { spaceId_key: { spaceId: space.id, key: 'article' } },
|
|
116
|
+
update: {},
|
|
117
|
+
create: {
|
|
118
|
+
spaceId: space.id,
|
|
119
|
+
key: 'article',
|
|
120
|
+
name: 'Article',
|
|
121
|
+
description: 'Blog articles and posts',
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// Create fields for article
|
|
126
|
+
const fields = [
|
|
127
|
+
{ key: 'title', name: 'Title', type: 'text', required: true, sortOrder: 0 },
|
|
128
|
+
{ key: 'slug', name: 'Slug', type: 'slug', required: true, unique: true, sortOrder: 1 },
|
|
129
|
+
{ key: 'excerpt', name: 'Excerpt', type: 'text', required: false, sortOrder: 2 },
|
|
130
|
+
{ key: 'body', name: 'Body', type: 'richtext', required: true, sortOrder: 3 },
|
|
131
|
+
{ key: 'featuredImage', name: 'Featured Image', type: 'media', required: false, sortOrder: 4 },
|
|
132
|
+
];
|
|
133
|
+
|
|
134
|
+
for (const field of fields) {
|
|
135
|
+
await prisma.field.upsert({
|
|
136
|
+
where: { contentTypeId_key: { contentTypeId: articleType.id, key: field.key } },
|
|
137
|
+
update: {},
|
|
138
|
+
create: {
|
|
139
|
+
contentTypeId: articleType.id,
|
|
140
|
+
...field,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
console.log('Seed complete:');
|
|
146
|
+
console.log(` Roles: admin, editor, author, viewer`);
|
|
147
|
+
console.log(` User: admin@htmless.com (password: admin123)`);
|
|
148
|
+
console.log(` Space: ${space.slug} (${space.id})`);
|
|
149
|
+
console.log(` Content Type: article with ${fields.length} fields`);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
main()
|
|
153
|
+
.catch(console.error)
|
|
154
|
+
.finally(() => prisma.$disconnect());
|